在二维平面中,将一个点绕另一个点旋转

56

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

我有一个矩形箭头,想要将它相对于箭头底部中间的一个点旋转角度θ。

这是为了让我能够在两个屏幕控件之间绘制一个多边形。我不能使用并旋转图片。

到目前为止,我所考虑的复杂化问题的是屏幕的原点在左上角。

4个回答

138

如果你将点(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版本吗? :) - Mehrdad Afshari
7
这取决于你使用的三角函数库。在C语言中,你需要传入弧度制。 - Sophie Alpert
3
转换为弧度:value * Math.PI / 180; - Lama
1
通用3D问题的答案在这里 - Glenn
这是很棒的代码...但它实际上不是C#! - A X

8
如果您正在使用GDI+进行操作,您可以使用Graphics对象的Transform方法:
graphics.TranslateTransform(point of origin);
graphics.RotateTransform(rotation angle);

然后绘制实际图形。

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

0

这个在WPF中采用布局转换命令,可以将您的图像旋转到所需的角度。

progress_image.LayoutTransform = new RotateTransform(90);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接