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