Нарисовать эллипс под любым углом

uses graph,crt;

{функции для определения кординат точек эллипса}   
function rot_x(x,y:integer;t:real):integer;
    begin
        rot_x:=round(x*cos(t)-y*sin(t));
    end;

function rot_y(x,y:integer;t:real):integer;
    begin
        rot_y:=round(x*sin(t)+y*cos(t));
    end;

{рисование наклонного эллипса}
procedure Ellips(x,y,a,b:integer;u:real; c:integer);
  var sx,sy,rx,ry,i:integer;
        du:real;
begin
   sx:=x+rot_x(a,0,u);
   sy:=y+rot_y(a,0,u);
   moveto(sx,sy);
   du:=0;
    for i:=1 to 38 do
      begin
        du:=du+pi/20;
        rx:=round(a*cos(du));
        ry:=round(b*sin(du));
        lineto(x+rot_x(rx,ry,u),y+rot_y(rx,ry,u));
    end;
lineto(sx,sy);
end;


 {Основная программа}
var a,b,x0,y0,u,xc,yc:integer;
    u1,u2:real;
    c:char;
begin

clrscr;

u:=-10; {Угол наклона в градусах}
a:=0;
initgraph(a,b,'');
x0:=getmaxX-300; {Определяем позицию по оси X}
y0:=getmaxy-50;    {Определяем позицию по оси Y}

a:=50;
b:=25;
u1:=u*pi/180;
xc:=x0+round(a*cos(u1));
yc:=y0-round(a*sin(u1));
u2:=pi-u1;
ellips(xc,yc,a,b,u2,12); {Рисуем эллипс}
readln;
CloseGraph;
end.

Комментариев нет:

Отправить комментарий

Если у вас интересные исходники и вы не прочь поделиться, то присылайте daslex@yandex.ru с указанием Темы: Графика Паскаль
К вашей работе будет прикреплено ваше авторство и по желанию добавлена ссылка на ваш сайт.
На одну страницу - Одна работа. На одну работу - Одна ссылка + указание автора


Основное требование - это один файл .pas без сторонних модулей (только с родными. предпочтение Graph).
Можно использовать ассемблерные вставки.

Все что Запускается у меня и работает, я выкладываю. в этом блоге.
Яндекс.Метрика