2009-04-24 57 views
51

我想知道如何计算相对于另一个点旋转角度的点的新坐标。以2D中的另一个点旋转点

我有一个块箭头,并希望通过相对于箭头底部中间点的角度θ旋转它。

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

从我迄今为止所考虑的问题来看,更进一步的问题是屏幕的原点位于左上角。

回答

126

如果通过旋转角点(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 
+2

你在内存中是否还有3D版本? :) – 2009-04-24 16:08:29

8

如果您正在使用GDI +要做到这一点,你可以使用Graphics对象的Transform方法:

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

然后绘制实际的东西。

+3

这不应该是原点翻译吗? – Spook 2012-10-24 11:42:30

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