Дуги, окружности, эллипсы
Процедура 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.