Rotate a point by another point in 2D

做~自己de王妃 提交于 2019-11-26 12:23:47

问题


I want to know how to work out the new co-ordinates for a point when rotated by an angle relative to another point.

I have a block arrow and want to rotate it by an angle theta relative to a point in the middle of the base of the arrow.

This is required to allow me to draw a polygon between 2 onscreen controls. I can\'t use and rotate an image.

From what I have considered so far what complicates the matter further is that the origin of a screen is in the top left hand corner.


回答1:


If you rotate point (px, py) around point (ox, oy) by angle theta you'll get:

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



回答2:


If you are using GDI+ to do that, you can use Transform methods of the Graphics object:

graphics.TranslateTransform(point of origin);
graphics.RotateTransform(rotation angle);

Then draw the actual stuff.




回答3:


If you have the System.Windows.Media namespace available, then you can use the built in transformations:

    using System.Windows.Media;

    var transform = new RotateTransform() {Angle = angleInDegrees, CenterX = center.X, CenterY = center.Y};
    var transformedPoint = transform.Transform(point);


来源:https://stackoverflow.com/questions/786472/rotate-a-point-by-another-point-in-2d

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!