2009-04-24 52 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);