# Trying to rotate a point around another point and it's not working

I am trying to make a function to rotate a point around another point. My maths are very rusty but i did some research and i just dont understand why my function is not working.

public void rotatePoint(int pX,int pY,int angle) {
int newX = 0, newY = 0;
int centerX = 400, centerY = 300;

angle *= Math.PI / 180; // convert angle from deg to rad

double rotatedX = Math.cos(angle)*(pX-centerX)-Math.sin(angle)*(pY-centerY) + centerX;
double rotatedY = Math.sin(angle) * (pX-centerX) + Math.cos(angle) * (pY-centerY) + centerY;

newX = (int)Math.round(rotatedX);
newY = (int)Math.round(rotatedY);
}


On the image i just provide my original point is in grey. After a rotation of 90 or 180deg i would expect the point to arrive where the green ones are. They arrive where the red points are.

It looks like your red points are rotated something like 60 degrees from your starting point, rather than the full 90 you expected. Let's investigate why that could be...

angle *= Math.PI / 180;


As we substitute in an initial value of 90 for angle, this translates to...

angle = angle * 3.141592653589 / 180.0
angle = 90 * 0.01745329251
angle = 1.57079632679


But wait, our angle variable is an integer, so we have to truncate to convert this floating point intermediate to an integer value we can store in this variable:

angle = 1 radian


Or about 57 degrees, which matches up to what we're seeing in your graph.

So, use a float or double as your intermediate:

double radianAngle = angle * Math.PI / 180.0;


And compute your sine and cosine ratios off of this fractional intermediate instead.

• Tks!! i will try that tomorrow and give feedback but it makes a lot of sense. Jan 3, 2020 at 4:39
• Its working, big tks again! Jan 3, 2020 at 20:32