Rotación

Muchas aplicaciones CAD proporcionan características que giran objetos dibujados en el área de cliente. Las aplicaciones que incluyen funcionalidades de rotación usan la función SetWorldTransform para establecer el espacio mundial adecuado en la transformación de espacio de página. Esta función recibe un puntero a una estructura XFORM que contiene los valores adecuados. Los miembros eM11, eM12, eM21 y eM22 de XFORM especifican respectivamente, el coseno, el seno, el seno negativo y el coseno del ángulo de rotación.

Cuando se produce un giro , los puntos que constituyen un objeto se giran con respecto al origen del espacio de coordenadas. En la ilustración siguiente se muestra un rectángulo de 20 por 20 unidades girado 30 grados cuando se copia del espacio de coordenadas del mundo al espacio de coordenadas de página.

ilustración en la que se muestran dos espacios de coordenadas; cada tiene un rectángulo en una ubicación diferente y con una rotación diferente

En la ilustración anterior, cada punto del rectángulo giraba 30 grados con respecto al origen del espacio de coordenadas.

El siguiente algoritmo calcula la nueva coordenada x (x ') para un punto (x,y ) girado por ángulo A con respecto al origen del espacio de coordenadas.

x' = (x * cos A) - (y * sin A) 

El siguiente algoritmo calcula la coordenada y (y) para un punto (x,y ) girado por el ángulo A con respecto al origen.

y' = (x * sin A) + (y * cos A) 

Las dos transformaciones de rotación se pueden combinar en una matriz de 2 a 2 de la siguiente manera.

|x' y'| == |x y| * | cos A   sin A| 
                   |-sin A   cos A| 

La matriz de 2 a 2 que produjo la rotación contiene los valores siguientes.

| .8660    .5000| 
|-.5000    .8660| 

Derivación del algoritmo de rotación

Los algoritmos de rotación se basan en el teorema de suma de trigonometría que indica que la función trigonométrica de una suma de dos ángulos (A1 y A2) se puede expresar en términos de las funciones trigonométricas de los dos ángulos.

sin(A1 + A2) = (sin A1 * cos A2) + (cos A1 * sin A2) 
cos(A1 + A2) = (cos A1 * cos A2) - (sin A1 * sin A2) 

En la ilustración siguiente se muestra un punto p girado en sentido contrario a las agujas del reloj a una nueva posición p'. Además, muestra dos triángulos formados por una línea dibujada desde el origen del espacio de coordenadas hasta cada punto y una línea dibujada desde cada punto hasta el eje x.

diagrama que muestra el origen, p y p', y dos triángulos

Mediante trigonometría, la coordenada x del punto p se puede obtener multiplicando la longitud de la hipotenusa h por el coseno de A1.

x = h * cos A1 

La coordenada y del punto p se puede obtener multiplicando la longitud de la hipotenusa h por el seno de A1.

y = h * sin A1 

Del mismo modo, la coordenada x del punto p' se puede obtener multiplicando la longitud de la hipotenusa h por el coseno de (A1 +A2 ).

x' = h * cos (A1 + A2) 

Por último, la coordenada y del punto p' se puede obtener multiplicando la longitud de la hipotenusa h por el seno de (A1 +A2 ).

y' = h * sin (A1 + A2) 

Con el teorema de suma, los algoritmos anteriores se convierten en los siguientes:

x' = (h * cos A1 * cos A2) - (h * sin A1 * sin A2) 
y' = (h * cos A1 * sin A2) + (h * sin A1 * cos A2) 

Los algoritmos de rotación de un punto determinado girado por ángulo A2 se pueden obtener sustituyendo x por cada aparición de (h * cos A1 ) y sustituyendo y por cada aparición de (h * sin A1 ).

x' = (x * cos A2) - (y * sin A2) 
y' = (x * sin A2) + (y * cos A2)