Ver Mensaje Individual
  #4  
Antiguo 19-11-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Reputación: 24
seoane Va por buen camino
Según entendí lo que tu quieres son las coordenadas de la elipse y con ellas poder hacer lo que quieras, dibujar la elipse o mover un objeto siguiendo esa trayectoria. Sea como sea, aquí te dejo una función, que pasándole como parámetros x1,y1,x2,y2 (que tienen el mismo significado que en la función de dibujo) y el ángulo entre 0 y 2pi nos devuelve las coordenadas del punto correspondiente de la elipse.

Código Delphi [-]
function EllipsePoint(X1,Y1,X2,Y2: Integer; Angulo: Double): TPoint;
var
  Cx,Cy,A,B: Double;
begin
  A:= abs(X2-X1)/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;

Por ejemplo si queremos dibujar la elipse:
Código Delphi [-]
var
  i: integer;
  P: TPoint;
begin
  P:= EllipsePoint(10,10,300,100,0);
  Canvas.MoveTo(P.X,P.Y);
  for i:= 1 to 360 do
  begin
    P:= EllipsePoint(10,10,300,100,(Pi*i)/180);
    Canvas.LineTo(P.X,P.Y);
  end;
end;

O si queremos mover un botón a lo largo de la trayectoria:
Código Delphi [-]
var
  i: integer;
  P: TPoint;
begin
  for i:= 0 to 360 do
  begin
    P:= EllipsePoint(10,10,300,100,(Pi*i)/180);
    Button1.Left:= P.X;
    Button1.Top:= P.Y;
    Application.ProcessMessages;
    Sleep(10);
  end;
end;
Responder Con Cita