Приветствую Вас Гость | RSS

Delphi заготовки

Понедельник, 13.05.2024, 07:38
Главная » 2012 » Май » 24 » Как нарисовать эллипс повернутый на 45/60/30 градусов
07:36
Как нарисовать эллипс повернутый на 45/60/30 градусов
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.
Просмотров: 5646 | Добавил: NetSoftWare | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *: