|
#1
|
|||
|
|||
Окружность
Привет. подскажыте плиз как нарисовать окружность на форме ПО ПИКСЕЛЯМ? Т.е. не стандартным Ellips'ом, а с помощью Form1.Canvas.Pixels[x,y]. Нужен сам алгоритм (курсовик такой). Заранее спасибо!
|
#2
|
||||
|
||||
по формуле окружности:
Y= -b±sqrt(sqr(R)-sqr(X-a)) где (a,b) центр окружности. перевести это в паскалевский синтаксис и загнать в цикл думаю сам догадаешься игрека 2 штуки для кажд Х как видишь. |
#3
|
||||
|
||||
|
#4
|
|||
|
|||
не совсем понятно.... почему стоит плюс/минус (какой знак использовать на этом месте) и с каким условием (или диапазон) должен быть цикл?
|
#5
|
|||
|
|||
//Должно работать
function TForm1.RotatePixel(x0,y0,x,y,alpha:real):Tpoint; //Поврот точки var Pix:TPoint; R:real; beta:real; begin R:=sqrt(sqr(x0-x)+sqr(y0-y)); //Находим радиус beta:=ArcTan2((y0-y),(x0-x)); //Компинсирующий угол alpha:=pi*alpha/180; Pix.X:=Round(R*-cos(alpha-beta)+x0); Pix.y:=Round(R*sin(alpha-beta)+y0); result:=Pix; end; procedure TForm1.DrawCircle(x0,y0,R:real); var i:real; pix:Tpoint; begin i:=0; while i<3600 do begin i:=i+0.1; Pix:=rotatePixel(x0,y0,x0+R,y0,i); form1.Canvas.Pixels[Round(Pix.X),Round(Pix.Y)]:=clblack; end; end; |
#6
|
|||
|
|||
Decoding и ART - спасибо большое!! оба варианта работают :-)
|