1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| procedure PlotEllipse(CX, CY, Rx,Ry : integer);
begin
var
Rx2,Ry2,
TwoRx2,TwoRy2,
X ,Y ,
P: longint;
begin
Rx2 := Rx*Rx;
Ry2 := Ry*Ry;
TwoRx2 := 2*Rx2;
TwoRy2 := 2*Ry2;
X := 0;
Y := Ry;
P:=0;
Plot4EllipsePoints(CX,CY,X,Y); // 1 pixel
//region 1
P := Ry2-(Rx2*Ry)+(0.25*Rx2) ;//0.25 => (1/4)*
While ((2*Ry2)*x) < ((2*Rx2)*y) do
begin
inc(x);
if (p < 0) Then
p := p+ ((TwoRy2)*x*Ry2)
else
begin
dec(y);
p := p+ TwoRy2*x+Ry2-TwoRx2*y
end;
Plot4EllipsePoints(CX,CY,X,Y);
end;
//region 2
P := Ry2*(x+0.5)*(x+0.5)+Rx2*(y-1)*(y-1)-Rx2*Ry2 ;
While y>0 do
begin
dec(y);
if (p > 0) Then
p := p+ Rx2-(TwoRx2)*y
else
begin
inc(x);
p := p+TwoRy2*x+Rx2-TwoRx2*y
end;
Plot4EllipsePoints(CX,CY,X,Y);
end;
end; |
Partager