![]()  | 
	
 
  | 
| 
		 
			 
			#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  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Мне с клавиатуры не надо =) 
		
	
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	 |