我想知道如何在相对于另一个点旋转一个角度时计算出一个点的新坐标。
我有一个方块箭头,想要相对于箭头底部中间的一个角度θ旋转。
这是允许我在2个屏幕控件之间绘制多边形所必需的。我无法使用和旋转图像。
从我到目前为止所考虑的事情进一步复杂化的是屏幕的起源位于左上角。
答案 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);