Come asimmetriare un oggetto

Per asimmetria (o shear) un oggetto significa distorcere un oggetto in base a un angolo specificato dall'asse x, dall'asse y o da entrambi. Ad esempio, quando si asimmetria un quadrato, diventa un parallelogramma.

Il metodo Matrix3x2F::Skew accetta 3 parametri:

  • angleX: angolo di asimmetria dell'asse x, misurato in gradi in senso antiorario dall'asse y.
  • angleY: angolo di inclinazione dell'asse y, misurato in gradi in senso orario dall'asse x.
  • centerPoint: punto su cui viene eseguita l'asimmetria.

Per stimare l'effetto di una trasformazione asimmetria, considerare che angleX è l'angolo di asimmetria misurato in gradi in senso antiorario dall'asse y. Ad esempio, se angleX è impostato su 30, l'oggetto asimmetrie di 30 gradi in senso antiorario lungo l'asse y sul centroPoint. La figura seguente mostra un quadrato asimmetrico orizzontalmente di 30 gradi circa l'angolo superiore sinistro del quadrato.

illustrazione di un quadrato asimmetrico di 30 gradi in senso antiorario dall'asse y

Analogamente, angleY è un angolo di asimmetria misurato in gradi in senso orario rispetto all'asse x. Ad esempio, se angleY è impostato su 30, l'oggetto asimmetrie di 30 gradi in senso orario lungo l'asse x sul centroPoint. La figura seguente mostra un quadrato asimmetrico verticalmente di 30 gradi circa l'angolo superiore sinistro del quadrato.

illustrazione di un quadrato asimmetrico di 30 gradi in senso orario dall'asse x

Se si imposta sia angleX che angleY su 30 gradi e il punto centrale nell'angolo superiore sinistro del quadrato, verrà visualizzato il quadrato asimmetrico seguente (delineato a tinta unita). Si noti che il quadrato asimmetrico è asimmetrico di 30 gradi in senso antiorario dall'asse y e 30 gradi in senso orario dall'asse x.

illustrazione di un quadrato asimmetrico di 30 gradi in senso antiorario dall'asse y e 30 gradi in senso orario dall'asse x

Nell'esempio di codice seguente l'inclinazione del quadrato è di 45 gradi orizzontalmente sull'angolo superiore sinistro del quadrato.

    // 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);

La figura seguente mostra l'effetto dell'applicazione della trasformazione asimmetria al quadrato, dove il quadrato originale è un contorno punteggiato e l'oggetto asimmetrico (parallelogramma) è un contorno solido. Si noti che l'angolo di asimmetria è di 45 gradi in senso antiorario dall'asse y.

illustrazione di un quadrato asimmetrico di 45 gradi in senso antiorario dall'asse y

Panoramica delle trasformazioni Direct2D

Informazioni di riferimento su Direct2D