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.
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.
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.
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.
Argomenti correlati