Rotate a point by another point in 2D

53,656

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);
Share:
53,656
James
Author by

James

Java/C# Developer

Updated on July 09, 2022

Comments

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