# Find new position of rotated by 10 degrees line

I have a line that goes to x (x1) of 300, and then I rotate the line by -10 degrees. How can I get the new x (x0) of the rotated line?

Here's a picture to show what I mean:

Are there any books that would help me learn this stuff?

• You need to have y coordinates for your end values and a start point for your problem to be solvable, I'm pretty sure. If the length of your line varies, the end point ("x1") is going to be different. Sep 6, 2011 at 15:24
• I have them, but I don't have the correct equation. Sep 7, 2011 at 8:35

You should learn trigonometry on Khan Academy. We didn't yet learn it in the school, but I believe it has to do something with sines and cosines and tangents. The basic idea is that when you do a thing like that, you get a right triangle, where the hypotenuse is the line from your standpoint to x1. If you do sin(a), you would get the length of your desired line divided by the hypotenuse, I'm not sure I never really got into this and no one thought me, so this might be false. Check on the internet (although it's obvious that you get a right triangle and need to use trigonometry).

• +1 Khan Academy is great! It didn't have the advanced stuff I needed when I was at university, but it does cover stuff like trig very well. Sep 6, 2011 at 15:21

you can easily use a rotation matrix of -10deg to find your answer. check wikipage to learn how to create a rotation matrix. after that you only need to multiply rotation matrix into (300,0).

If I'm not mistaken for your problem you also need height of rectangle to find intersection point;

here is a sudo code that computes x1 for you:

x0 = 0;
y0 = rectHeight;
teta = 10 * pi / 180;

x1 = cos(teta) * x0 - sin(teta) * y0;
y1 = sin(teta) * x0 + cos(teta) * y0;

ratio = rectHeight / y1;

x1 = x1 * ratio;
y1 = y1 * ratio;

result = 300 + x1;

• height of what rectangle? Sep 6, 2011 at 14:48
• in your drawing you are rotating a line in a rectangle and trying to find intersection point. that's the rectangle I'm talking about. Sep 6, 2011 at 15:00

If it is not on the line (which means the new line is not longer, just rotated), the x position is Length * sin (angle) and the y position is Length * cos(angle).

300 * sin (-10) = 52.09...
300 * cos (-10) = 295.44...


You must yourself switch the 52 to -52 as the sinus function doesn't do that.

So the answer should be (-52 , 295).

• of course, this only works for a vertical line, otherwise use a rotation matrix like the answer made by Gajet Sep 7, 2011 at 12:20
• and what is considered to be the center of rotation with this formula? It is not the center of the line actually the center of rotation :/ if it was, maybe this would be correct. Sep 13, 2011 at 9:38
• well, the answer is relative to the base position, if you want to rotate around a certain point, just translate all vectors to that point, rotate and translate back (which you can multiply together in a matrix if you want). Sep 13, 2011 at 11:45

Here's my javascript solution. I needed to set limits on the amount of rotation allowed. HTH.

static findRotationPoint(startPoint: PointXY, endPoint: PointXY, degreeRotation: number, slope: number, reverse: boolean): PointXY {
const distance: number = getDistanceBetweenPoints(startPoint, endPoint);
const degrees: number = convertSlopeToDegrees(slope);
const theta = (degreeRotation + degrees) * Math.PI / 180;

if (reverse) {
return new PointXY((Math.cos(theta) * distance) + startPoint.x, (Math.sin(theta) * distance) + startPoint.y);
} else {
return new PointXY((Math.cos(theta) * -distance) + startPoint.x, (Math.sin(theta) * -distance) + startPoint.y);
}
}

static getDistanceBetweenPoints(pointA: PointXY, pointB: PointXY): number {
return Math.sqrt(Math.pow((pointA.x - pointB.x), 2) + Math.pow((pointA.y - pointB.y), 2));
}

static convertSlopeToDegrees(slope: number): number {
if (slope === Infinity || slope === -Infinity) {
return 90;
} else if (slope === 0 || slope === -0) {
return 0;
} else {
return 360 * Math.atan(slope) / (2 * Math.PI);
}
}