以2D中的另一点旋转点

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

我有一个块箭头,并希望相对于箭头底部中间的一个angular度旋转angular度theta。

这是需要让我画2个屏幕控件之间的多边形。 我无法使用和旋转图像。

从我迄今为止所考虑的事情来看,更进一步的事情是屏幕的起源在左上angular。

如果你通过angular度theta旋转点(px, py) (ox, oy)的点(px, py) (ox, oy)你会得到:

 p'x =cosθ*(px-ox)-sinθ*(py-oy)+ ox
 p'y = sin(θ)*(px-ox)+cosθ*(py-oy)+ oy

如果您使用GDI +来执行此操作,则可以使用Graphics对象的Transform方法:

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