在2D中将点旋转另一个点

时间:2009-04-24 15:55:58

标签: c# math rotation angle

我想知道如何在相对于另一个点旋转一个角度时计算出一个点的新坐标。

我有一个方块箭头,想要相对于箭头底部中间的一个角度θ旋转。

这是允许我在2个屏幕控件之间绘制多边形所必需的。我无法使用和旋转图像。

从我到目前为止所考虑的事情进一步复杂化的是屏幕的起源位于左上角。

3 个答案:

答案 0 :(得分:131)

如果您将点(px, py)的点(ox, oy)按角度theta旋转,您将获得:

p'x = cos(theta) * (px-ox) - sin(theta) * (py-oy) + ox
p'y = sin(theta) * (px-ox) + cos(theta) * (py-oy) + oy

答案 1 :(得分:8)

如果您使用GDI +执行此操作,则可以使用Transform对象的Graphics方法:

graphics.TranslateTransform(point of origin);
graphics.RotateTransform(rotation angle);

然后绘制实际的东西。

答案 2 :(得分:2)

如果您有System.Windows.Media命名空间,则可以使用内置转换:

    using System.Windows.Media;

    var transform = new RotateTransform() {Angle = angleInDegrees, CenterX = center.X, CenterY = center.Y};
    var transformedPoint = transform.Transform(point);