Дуги, окружности, эллипсы
Процедура Ellipse
Вычерчивает эллипсную дугу. Заголовок:
Procedure Ellipse(X,Y: Integer; BegA,EndA,RX,RY: Word);
Здесь:
- X, Y – координаты центра;
- BegA, EndA – соответственно начальный и конечный углы дуги;
- RX, RY – горизонтальный и вертикальный радиусы эллипса в пикселях.
При вычерчивании дуги эллипса используются те же соглашения относительно линий, что и в процедуре Circle, и те же соглашения относительно углов, что и в процедуре Arc. Если радиусы согласовать с учетом масштабного коэффициента GetAspectRatio, будет вычерчена правильная окружность.
В следующей программе вычерчиваются три эллипсных дуги (рис. 14.7) при разных отношениях радиусов. Замечу, что чем выше разрешение графического экрана, тем ближе к единице отношение сторон и тем меньше первый график отличается от третьего.

Рис. 14.7. Эллипсные дуги:
Uses Graph, CRT;
var
d,r,e: Integer;
xa,ya: Word;
begin
{Инициируем графику}
d: = Detect; InitGraph(d, r, '');
e: = GraphResult; if e <> grOK then
WriteLn(GraphErrorMsg(e))
else
begin
{Первый график}
OutTextXY(5 0.4 0,'RX = RY'); {Надпись}
Line (0.100.160.100); {Ось X}
Line (80.55.80.145); {Ось Y}
Ellipse (80.100.180.90.40.40);
{Второй график}
OutTextXY(260.40,'RX = 5*RY');
Line (190.100.410.100);
Line (300.55.300.145);
Ellipse (300.100.0.359.100.20);
{Третий график}
OutTextXY(465.40,'Aspect Ratio');
Line (440.100.600.100);
Line (520.55.520.145);
GetAspectRatio(xa, ya);
Ellipse (520.100.0.270.40,round(40*(xa/ya)));
if ReadKey=#0 then
d: = ord(ReadKey);
CloseGraph
end
end.
