我想知道当相对于另一个点旋转一个角度时如何计算一个点的新坐标。
我有一个方块箭头,想将它相对于箭头底部中间的一个点旋转一个角度 theta。
这是允许我在 2 个屏幕控件之间绘制多边形所必需的。我无法使用和旋转图像。
从我目前所考虑的情况来看,更复杂的是,屏幕的原点位于左上角。
如果您逐点旋转(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
如果您使用 GDI+ 来执行此操作,则可以使用对象Transform
的方法Graphics
:
graphics.TranslateTransform(point of origin);
graphics.RotateTransform(rotation angle);
然后画出实际的东西。
如果您有可用的System.Windows.Media
命名空间,那么您可以使用内置的转换:
using System.Windows.Media;
var transform = new RotateTransform() {Angle = angleInDegrees, CenterX = center.X, CenterY = center.Y};
var transformedPoint = transform.Transform(point);