![]() |
|
|
#1
|
||||
|
||||
|
Вот нашел формулу
Цитата:
Код:
function Ellipse(X, A, B: Integer): Integer; var RealA, RealB: Integer; begin if A < B then begin RealA:=B; RealB:=A; end else begin RealA:=A; RealB:=B; end; Result:=Round(Sqrt(RealB*RealB - (X*X*RealB*RealB)/(RealA*RealA))); end; Код:
var i: Integer; begin for i:=Image1.Width div 2 to Image1.Width do Image1.Canvas.Pixels[i, Image1.Height div 2 + Ellipse(i, Image1.Width div 2, Image1.Height div 2)]:=clBlack; end; Что не так? Может я неправильно преобразовал первое выражение? |
|
#2
|
||||
|
||||
|
Просто в один прекрасный момент выражение под корнем становиться меньше 0.
|
|
#3
|
||||
|
||||
|
Спасибо. Ошибка была там.
Но теперь Заменил Код:
Result:=Round(Sqrt(Abs(RealB*RealB - (X*X*RealB*RealB)/(RealA*RealA)))); ... for i:=0 to Image1.Width do Image1.Canvas.Pixels[i, Ellipse(i, Image1.Width, Image1.Height)]:=clBlack; ![]() |
|
#4
|
|||
|
|||
|
Цитата:
Тут нельзя использовать никаких abs. А то получается что если a*a < x*x они как бы меняются местами. Главное условие x должен быть меньше a по модулю. Рисовать надо по циклу, где x принимает значения допустим от -100 до 100. И использовать два уравнения. Первое положительная полудуга. Второе отрицательная полудуга. y=b/a*sqrt(a*a-x*x); y=-b/a*sqrt(a*a-x*x); И получаем замечательный эллипс. ![]() |
|
#5
|
||||
|
||||
|
Большое спасибо! Вот так сделал и все OK
Код:
function Ellipse(X, A, B: Integer): Integer;
begin
if A*A < X*X then
Result:=Round(b/a*sqrt(-(a*a-x*x))) else
Result:=Round(b/a*sqrt(a*a-x*x));
end;
var
i: Integer;
begin
for i:={Image1.Width}0 div 2 to Image1.Width div 2 do
begin
Image1.Canvas.Pixels[Image1.Width div 2 + i, Image1.Height div 2 + Ellipse(i, Image1.Width div 2, Image1.Height div 2)]:=clBlack;
Image1.Canvas.Pixels[Image1.Width div 2 - i, Image1.Height div 2 + Ellipse(i, Image1.Width div 2, Image1.Height div 2)]:=clBlack;
Image1.Canvas.Pixels[Image1.Width div 2 + i, Image1.Height div 2 - Ellipse(i, Image1.Width div 2, Image1.Height div 2)]:=clBlack;
Image1.Canvas.Pixels[Image1.Width div 2 - i, Image1.Height div 2 - Ellipse(i, Image1.Width div 2, Image1.Height div 2)]:=clBlack;
end; |
|
#6
|
|||
|
|||
Да классный эллипс. Осталось только сделать, чтобы параметры вводились с клавиатуры. ![]() |
|
#7
|
||||
|
||||
|
Мне с клавиатуры не надо =)
|