Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Girar un Timage con respecto a otro Timage (https://www.clubdelphi.com/foros/showthread.php?t=91074)

Tuvan 05-11-2016 01:52:25

Girar un Timage con respecto a otro Timage
 
1 Archivos Adjunto(s)
Buenas gente.
Supongo que debe ser algo sencillo pero me ha llevado tiempo poder hacerlo.
He logrado hacer un giro en 360 grados pero no con un punto de referencia, les explico lo que quiero hacer con un grafico que anexo y se pueda entender mejor.

Quiero lograr el giro de 360° respecto a un punto en especifico, en mi caso a un Timage, he usado este algoritmo publicado por Seoane en otro post, gracias de antemano.

Código Delphi [-]

function elipse (x1,y1,x2,y2: Integer; angulo : Double): Tpoint;
var
Cx,Cy,a,b : Double;
x,y : Integer;
begin
  a:= abs(x2+x)/2;
  b:= abs(y2+y1)/2;
  Cx:= (x1+x2)/2;
  Cy:= (y1+y2)/2;
  Result.x:= Trunc(Cx - A * cos(angulo));
  Result.y:= Trunc(Cy + b * sin(angulo));
end;

Y lo he implementado a un botón para iniciar la trayectoria dados de alta los parámetros:

Código Delphi [-]

var
i: integer;
p: Tpoint;


begin
    for i := 0 to 360 do
    begin
    //x1,y1,x2,y2: Integer; angulo : Double): Tpoint
      p:= elipse(150,100,300,200,(pi*i)/180);
      image1.Left:= p.X;
      image1.Top:= p.Y+50;
      Application.ProcessMessages;
      Sleep(10);
      end;
      

end;

Estaré muy pendiente de sus respuestas ^\||/

ecfisa 05-11-2016 21:30:50

Hola Tuvan.

A ver si este ejemplo es similar a lo que buscas:
Código Delphi [-]
....
procedure OrbitingImage(i1, i2: TImage; const Radius: Integer; const Delay: Cardinal);
var
  cp: TPoint;
   i: Integer;
begin
  cp.X := i1.Left;
  cp.Y := i1.Top;
  for i := 0 to 360 do
  begin
    i2.Left := cp.X + Trunc( Radius * sin( i* PI/180 ) );
    i2.Top  := cp.Y + Trunc( Radius * cos( i* PI/180 ) );
    Sleep( Delay );
    Application.ProcessMessages;
  end;
end;

// llamada
procedure TForm1.Button1Click(Sender: TObject);
begin
  OrbitingImage( Image1, Image2, 120, 20 );
end;

Salida:


Saludos :)


La franja horaria es GMT +2. Ahora son las 04:06:11.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi