How do I find the coordinates of the endpoint of a line with its length, starting position and angle relative to the x-axis? Thank you in advance.
Find coordinate of end point of a line
trigonometryvectors
Related Solutions
Your line passes through $A = (-3,7)$ and $B = (4,1).$ The gradient of the line is:
$$\frac{B_y-A_y}{B_x-A_x} = -\frac{6}{7} \, . $$
The cartesian equation of the line is thus:
$$\frac{y-B_y}{x-B_x} = -\frac{6}{7} $$
which simplifies to give $6x+7y=31.$ Next, we substitute $x=r\cos\theta$ and $y=r\sin\theta$ to give:
$$6r\cos\theta + 7r\sin\theta = 31 \iff r= \frac{31}{7\sin\theta+6\cos\theta} \, .$$
This expression is valid provided $7\sin\theta+6\cos\theta \neq 0.$ In this case, the ray joining $(0,0)$ to $(r,\theta)$ is parallel to the line. The parametrisation is thus $\theta \mapsto (r(\theta),\theta)$, where $r$ is as above and
$$-\arctan\left(\frac{6}{7}\right) < \theta < \pi - \arctan\left(\frac{6}{7}\right) . $$
Welcome to Math.SE! Here is my sketch for the case of clockwise direction: initial point is $A$, the endpoint you want is $B$, and $C$ is the radius of the circle on which the arc lies.
I will use polar angles: you can see the description in Wikipedia. The formulas for conversion from polar to Cartesian (on the same wiki article) will also be used.
On the picture, $\theta$ is the polar angle of the direction in which the curve departs from point $A$. Since any radius of a circle is perpendicular to the circle, the polar angle of the vector $\vec{CA}$ is $\theta+\pi/2$. The length of $\vec{CA}$ is $r$. Therefore, its Cartesian coordinates are $$\vec {CA} = ( r\cos(\theta+\pi/2), r\sin(\theta+\pi/2)) = ( -r\sin(\theta), r\cos(\theta)) $$ Next, we need the coordinates of the vector $\vec{CB}$. Its length is also $r$. Since $\angle ACB$ is $L/r$ radian, the polar angle of $\vec{CB}$ is $\theta+\pi/2-L/r$. Convert to Cartesian: $$\vec {CB} = ( r\cos(\theta+\pi/2-L/r), r\sin(\theta+\pi/2-L/r)) = ( -r\sin(\theta-L/r), r\cos(\theta-L/r)) $$ Finally, $\vec{AB}=\vec{CB}-\vec{CA}$, which yields $$\boxed{\vec {AB} = ( -r\sin(\theta-L/r)+r\sin(\theta), r\cos(\theta-L/r)-r\cos(\theta)) } $$
These can be rewritten using some trigonometric identities, but I don't think it would win anything. As a sanity check, consider what happens when $L=0$: the vector is zero, hence $B$ is the same as $A$. As an aside, if $r\to \infty$ the curve becomes a straight line segment, but figuring out the limit is an exercise in calculus. :-)
If the curve bends counterclockwise, the signs will be different in a few places. Namely, the polar angle of $\vec{CA}$ will be $\theta-\pi/2$, hence $$\vec {CA} = ( r\sin(\theta), -r\cos(\theta)) $$ The polar angle of $\vec{CB}$ will be $\theta-\pi/2+L/r$, hence $$\vec {CB} = ( r\sin(\theta+L/r), -r\cos(\theta+L/r)) $$ The conclusion in this case is $$\boxed{\vec {AB} = ( r\sin(\theta+L/r)-r\sin(\theta), -r\cos(\theta+L/r)+r\cos(\theta))}$$
Later: a simpler solution for the case when $C$ is given. First, calculate the vector $\vec{CA}$ and convert it to polar coordinates using these formulas. Then either increase or decrease the angle by $L/r$, depending on counterclockwise/clockwise choice.
Since you wanted JavaScript, I made a jsfiddle and also copied the code below. The parameters are coordinates of A and C, as well as length of the arc and the direction. The radius $r$ is calculated within the function.
function findB(Ax, Ay, Cx, Cy, L, clockwise) {
var r = Math.sqrt(Math.pow(Ax - Cx, 2) + Math.pow(Ay - Cy, 2));
var angle = Math.atan2(Ay - Cy, Ax - Cx);
if (clockwise) {
angle = angle - L / r;
}
else {
angle = angle + L / r;
}
var Bx = Cx + r * Math.cos(angle);
var By = Cy + r * Math.sin(angle);
return [Bx, By];
}
document.write(findB(0, 1, 1, 0, 1, true));
Best Answer
Let's call the unknown points $(x_1,y_1)$
The known point is (x,y)
Since we know the length of the line, let's call it $l$ $$\sin \theta= \frac{x_1-x}{l}$$ $$\cos \theta= \frac{y_1-y}{l}$$ $$x_1=l\sin \theta+x$$ $$y_1=l\cos \theta+y$$