如何倾斜对象

倾斜 (或剪切) 对象意味着从 x 轴和/或 y 轴按指定角度扭曲对象。 例如,当你倾斜正方形时,它将成为一个平行四边形。

Matrix3x2F::Skew 方法采用 3 个参数:

  • angleX:x 轴倾斜角度,从 y 轴逆时针以度为单位。
  • angleY:y 轴倾斜角度,从 x 轴顺时针以度为单位。
  • centerPoint:执行倾斜的点。

若要预测倾斜转换的效果,请考虑 angleX 是从 y 轴逆时针以度为单位测量的倾斜角度。 例如,如果 angleX 设置为 30,则对象沿 centerPoint 的 y 轴逆时针倾斜 30 度。 下图显示正方形左上角的正方形水平倾斜 30 度。

从 y 轴逆时针方向倾斜 30 度的方形图示

同样, angleY 是从 x 轴顺时针以度为单位的倾斜角度。 例如,如果 angleY 设置为 30,则对象沿 centerPoint 的 x 轴顺时针倾斜 30 度。 下图显示了正方形左上角的正方形垂直倾斜 30 度。

从 x 轴顺时针方向倾斜 30 度的方形图示

如果将 angleXangleY 都设置为 30 度,并将 centerPoint 设置为正方形的左上角,您将看到以下倾斜的正方形 (实心轮廓) 。 请注意,倾斜的正方形从 y 轴逆时针倾斜 30 度,从 x 轴顺时针倾斜 30 度。

正方形从 y 轴逆时针倾斜 30 度,从 x 轴逆时针 30 度

下面的代码示例将正方形水平倾斜到正方形的左上角 45 度。

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

下图显示了将倾斜转换应用于正方形的效果,其中原始正方形是虚线轮廓, (平行四边形) 的倾斜对象是实心轮廓。 请注意,倾斜角度与 y 轴逆时针方向为 45 度。

正方形从 y 轴逆时针倾斜 45 度图示

Direct2D 转换概述

Direct2D 参考