Delphi
{как нарисовать эллипс повернутый на 45/60/30 градусов на Delphi} {рисование наклонного эллипса} // cn:Tcanvas; канва для отображения элепса // cx,cy - координаты центра // r1,r2 - радиус 1 радиус 2 // angle - угол поворота procedure Ellips(cn:Tcanvas;cx,cy,r1,r2:integer;angle:integer=0); var sx,sy,rx,ry,i:integer; u,du:real; {функции для определения кординат точек эллипса} 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; begin u:=angle*pi/180; with cn do begin sx:=cx+rot_x(r1,0,u); sy:=cy+rot_y(r1,0,u); moveto(sx,sy); du:=0; for i:=1 to 38 do begin du:=du+pi/20; rx:=round(r1*cos(du)); ry:=round(r2*sin(du)); lineto(cx+rot_x(rx,ry,u),cy+rot_y(rx,ry,u)); end; lineto(sx,sy); end; end;
// пример использования
procedure TForm1.Button1Click(Sender: TObject); begin Ellips(form1.Canvas,50,50,20,50,-45); Ellips(form1.Canvas,50,50,20,50,45); Ellips(form1.Canvas,50,50,10,10); end;
на основании статьи http://graphic-in-pascal.blogspot.com/2012/04/blog-post_04.html (Как рисовать в Паскале)
Pascal
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.
|