Tema: Librerias
Ver Mensaje Individual
  #4  
Antiguo 07-08-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Reputación: 22
andres1569 Va por buen camino
Hola:

Probablemente ya conozcas esta página, la efg's, allí puedes encontrar toda clase de rutinas gráficas, ejemplos, programas de descarga ..., suelen ser de propósito general, aunque no será muy difícil adaptarlo a DirectX, hay secciones donde explica lo de las rotaciones y demás.

En castellano no me suena ninguna.

Bueno, esta función rota un punto el ángulo que se le pasa (ángulo en radianes):

Código:
funcion RotatePoint (APoint: TPoint; angle: single) : TPoint;
begin
  result.x := APoint.x * Cos(Angle) - APoint.y * Sin(Angle);
  result.y := APoint.x * Sin(Angle) + APoint.y * Cos(Angle);
end;
Aplicada a los cuatro vértices de un cuadrado, ya lo tienes rotado. Por cierto, este ejemplo llama dos veces a la función Cos y dos veces a Sin que están en la unit math.pas. Puesto que se les pasa el mismo ángulo (Angle), es más rápido utilizar la funcion SinCos que calcula seno y coseno de golpe y más rápido, le tendrías que pasar dos variables por referencia donde obtendrías esos valores. En el ejemplo te lo he puesto así, sin optimizar, pero no es muy complicado hacer el cambio.

Una vez optimizado, podrías también crearte una función donde le pasaras un array of TPoint y te lo devolviera ya rotado, sólo harías el cálculo de los senos y cosenos 1 vez, y te serviría para pasarle triángulos, cuadrados ...

¡Ah! Se me olvidaba, la función que te he puesto arriba rota un punto respecto al origen (punto (0, 0)); para rotar respecto de cualquier punto -muchas veces querrás rotar respecto al centro de la figura-, sería así:
Código:
funcion RotatePoint (APoint, FromPoint: TPoint; angle: single) : TPoint;
var
  dx, dy: Integer;
begin
  dx := APoint.x - FromPoint.x;
  dy := APoint.y - FromPoint.y;
  result.x := (dx * Cos(Angle) - dy * Sin(Angle)) + FromPoint.x;
  result.y := (dx * Sin(Angle) + dy * Cos(Angle)) + FromPoint.y;
end;
A ver si te sirve.
__________________
Guía de Estilo

Última edición por andres1569 fecha: 07-08-2003 a las 09:28:59.
Responder Con Cita