Como distorcer um objeto

Distorcer (ou estornar) um objeto significa distorcer um objeto por um ângulo especificado do eixo x, do eixo y ou ambos. Por exemplo, quando você distorce um quadrado, ele se transforma em um paralelogramo.

O método Matrix3x2F::Skew usa 3 parâmetros:

  • angleX: o ângulo de distorção do eixo x, que é medido em graus no sentido anti-horário do eixo y.
  • angleY: o ângulo de distorção do eixo y, que é medido em graus no sentido horário do eixo x.
  • centerPoint: o ponto sobre o qual a distorção é executada.

Para prever o efeito de uma transformação de distorção, considere que angleX é o ângulo de distorção medido em graus no sentido anti-horário do eixo y. Por exemplo, se angleX for definido como 30, o objeto distorce 30 graus no sentido anti-horário ao longo do eixo y sobre o centerPoint. A ilustração a seguir mostra um quadrado distorcido horizontalmente 30 graus sobre o canto superior esquerdo do quadrado.

ilustração de um quadrado distorcido 30 graus no sentido anti-horário do eixo y

Da mesma forma, angleY é um ângulo de distorção medido em graus no sentido horário do eixo x. Por exemplo, se angleY for definido como 30, o objeto distorce 30 graus no sentido horário ao longo do eixo x sobre o centerPoint. A ilustração a seguir mostra um quadrado distorcido verticalmente 30 graus sobre o canto superior esquerdo do quadrado.

ilustração de um quadrado distorcido 30 graus no sentido horário do eixo x

Se você definir angleX e angleY como 30 graus, e o centerPoint para o canto superior esquerdo do quadrado, você verá o quadrado distorcido a seguir (delineado sólido). Observe que o quadrado distorcido é distorcido 30 graus no sentido anti-horário do eixo y e 30 graus no sentido horário do eixo x.

ilustração de um quadrado distorcido 30 graus no sentido anti-horário do eixo y e 30 graus no sentido horário do eixo x

O exemplo de código a seguir distorce o quadrado de 45 graus horizontalmente sobre o canto superior esquerdo do quadrado.

    // Create a rectangle.
    D2D1_RECT_F rectangle = D2D1::Rect(126.0f, 301.5f, 186.0f, 361.5f);

    // Draw the outline of the rectangle.
    m_pRenderTarget->DrawRectangle(
        rectangle,
        m_pOriginalShapeBrush,
        1.0f,
        m_pStrokeStyleDash
        );

    // Apply the skew transform to the render target.
    m_pRenderTarget->SetTransform(
        D2D1::Matrix3x2F::Skew(
            45.0f,
            0.0f,
            D2D1::Point2F(126.0f, 301.5f))
        );

    // Paint the interior of the rectangle.
    m_pRenderTarget->FillRectangle(rectangle, m_pFillBrush);

    // Draw the outline of the rectangle.
    m_pRenderTarget->DrawRectangle(rectangle, m_pTransformedShapeBrush);

A ilustração a seguir mostra o efeito de aplicar a transformação de distorção ao quadrado, em que o quadrado original é um contorno pontilhado e o objeto distorcido (parallelogram) é um contorno sólido. Observe que o ângulo de distorção é 45 graus no sentido anti-horário do eixo y.

ilustração de um quadrado distorcido 45 graus no sentido anti-horário do eixo y

Visão geral das transformações de Direct2D

Referência de Direct2D