Partilhar via


Rotação

Muitas aplicações CAD fornecem funcionalidades que giram objetos desenhados na área do cliente. Os aplicativos que incluem recursos de rotação usam a função SetWorldTransform para definir o espaço de mundo apropriado para a transformação de espaço de página. Esta função recebe um ponteiro para uma estrutura de XFORM contendo os valores apropriados. Os membros eM11, eM12, eM21 e eM22 do XFORM especificam, respectivamente, o cosseno, seno, senono negativo e cosseno do ângulo de rotação.

Quando rotação ocorre, os pontos que constituem um objeto são girados em relação à origem do espaço coordenado. A ilustração a seguir mostra um retângulo de 20 por 20 unidades girado 30 graus quando copiado do espaço de coordenadas mundiais para o espaço de coordenadas de página.

ilustração mostrando dois espaços de coordenadas; cada um tem um retângulo em um local diferente e com uma rotação diferente

Na ilustração anterior, cada ponto do retângulo foi girado 30 graus em relação à origem do espaço coordenado.

O algoritmo a seguir calcula a nova coordenada x (x ') para um ponto (x,y ) que é girado pelo ângulo A em relação à origem do espaço de coordenadas.

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

O algoritmo a seguir calcula a coordenada y (y ') para um ponto (x,y ) que é girado pelo ângulo A em relação à origem.

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

As duas transformações de rotação podem ser combinadas em uma matriz 2 por 2 da seguinte forma.

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

A matriz 2 por 2 que produziu a rotação contém os seguintes valores.

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

Derivação do algoritmo de rotação

Os algoritmos de rotação são baseados no teorema da adição da trigonometria afirmando que a função trigonométrica de uma soma de dois ângulos (A1 e A2) pode ser expressa em termos das funções trigonométricas dos dois ângulos.

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

A ilustração a seguir mostra um ponto p girado no sentido anti-horário para uma nova posição p'. Além disso, mostra dois triângulos formados por uma linha traçada a partir da origem do espaço coordenado para cada ponto e uma linha desenhada de cada ponto através do eixo x.

diagrama mostrando a origem, p e p', e dois triângulos

Usando trigonometria, a coordenada x do ponto p pode ser obtida multiplicando o comprimento da hipotenusa h pelo cosseno de A1.

x = h * cos A1 

A coordenada y do ponto p pode ser obtida multiplicando o comprimento da hipotenusa h pelo seno de A1.

y = h * sin A1 

Da mesma forma, a coordenada x do ponto p' pode ser obtida multiplicando o comprimento da hipotenusa h pelo cosseno de (A1 +A2 ).

x' = h * cos (A1 + A2) 

Finalmente, a coordenada y do ponto p' pode ser obtida multiplicando o comprimento da hipotenusa h pelo seno de (A1 +A2 ).

y' = h * sin (A1 + A2) 

Usando o teorema da adição, os algoritmos anteriores tornam-se os seguintes:

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

Os algoritmos de rotação para um dado ponto girado pelo ângulo A2 podem ser obtidos substituindo x para cada ocorrência de (h * cos A1 ) e substituindo y para cada ocorrência de (h * sin A1 ).

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