Rotate a point by another point in 2D
Solution 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
Solution 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.
Solution 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);
Comments
-
James almost 2 years
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.
-
mmx about 15 yearsDo you have the 3D version in memory too? :)
-
Sophie Alpert over 14 yearsIt depends on which library you're using for the trig functions. In C, you need to pass in radians.
-
Lama about 11 yearsto convert in radians : value * Math.PI / 180;
-
Glenn about 11 yearsThe answer to the general 3D problem is here.
-
A X almost 5 yearsThis is great code ... but it is not actually in C#!