2
$\begingroup$

I simply have a triangle.. say abc . Given coordinates of a & b. and the length of ac and bc..

I can calculate the length between ab via the distance square rule.

$D = \sqrt{(X_2 - X_1)^2 + (Y_2 - Y_1)^2} $

I have tried to use the distance rule to compute the third vertex, but it has a lot of steps.. I wonder if there is another method.. that yields the two possible solutions for the vertex

$\endgroup$
  • $\begingroup$ What are the X and Y? I don't quite understand what you're asking here... $\endgroup$ – The Count Feb 22 '17 at 21:02
  • $\begingroup$ X and Y are just place holders for the coordinates of any point in the Cartesian plane.. and D is the distance between them $\endgroup$ – Shady Atef Feb 22 '17 at 21:03
3
$\begingroup$

Let $A = (x_A, y_A)$ and $B = (x_B,y_B)$ the known vertices of your triangle. Let's call $d_{AB}$, $d_{BC}$ and $d_{CA}$ the lengths of each side.

  1. Translate your points subtracting $x_A$ and $y_A$ so that $A$ corresponds with the origin. That is:

$$A' = (0, 0), B' = (x_B-x_A, y_B-y_A ) = (x_B', y_B').$$

  1. Rotate $B'$ so that it lies on the $x$-axis. This can be done without knowing the angle, indeed:

$$A'' = (0,0), B'' = (d_{AB}, 0).$$

Anyway, the value of the rotation angle is important for the next steps. In particular it is $$\theta = \arctan2\left(y_B-y_A,x_B-x_A\right),$$

where $\arctan2(\cdot, \cdot)$ is defined in details here.

  1. At this point, it is easy to find $C''$. Notice that there are two solutions, since the point $C''$ can be placed above or below the side $AB$.

$$x_C'' = \frac{d_{AB}^2+d_{AC}^2-d_{BC}^2}{2d_{AB}},$$

and

$$y_C'' = \pm\frac{\sqrt{(d_{AB}+d_{AC}+d_{BC})(d_{AB}+d_{AC}-d_{BC})(d_{AB}-d_{AC}+d_{BC})(-d_{AB}+d_{AC}+d_{BC})}}{2d_{AB}}.$$

  1. Now, rotate back your point $C''$ using $-\theta$ (see step 2), thus obtaining $C'$.
  2. Finally, translate $C'$ by adding $x_A$ and $y_A$ to the components in order to obtain $C$.
$\endgroup$
  • 2
    $\begingroup$ I was astonished .. Thanks $\endgroup$ – Shady Atef Feb 22 '17 at 22:02
  • $\begingroup$ @ShadyAtef you are welcome $\endgroup$ – the_candyman Feb 22 '17 at 22:03
  • $\begingroup$ It would be nice if you also provide the way to rotate C'' in step 4. $\endgroup$ – DDRamone Apr 24 '18 at 13:29
  • $\begingroup$ This was a massive help, thank you. A few post-implementation notes: In step 2, calculate θ = arctan2(B'y, B'x) as it's simpler. Thus calculated, θ is the angle from the x-axis to B', so it is actually the opposite of the triangle's rotation angle as stated. So don't negate θ for step 4. Step 4, to counter-rotate your two C'' points [call them C1'' & C2''] back to C1' and C2' do: C1'x = C''x * cos(θ) - C1''y * sin(θ), C1'y = C''x * sin(θ) + C1''y * cos(0) and C2'x = C''x * cos(θ) - C2''y * sin(θ), C2'y = C''x * sin(θ) + C2''y * cos(0). $\endgroup$ – par Jul 19 '18 at 5:02
1
$\begingroup$

There is much easier solution, which has 3 steps instead of 5 and doesn't require translating or rotating:

$φ_1 = \arctan2(B_y - A_y, B_x - A_x)$

$φ_2 = \arccos\left(\dfrac{l_1^2 + l_3^2 - l_2^2}{2\cdot l_1\cdot l_3}\right) $

$C = A + l_1\cdot[\cos(φ_1±φ_2)$; $\sin(φ_1±φ_2)]$

Where $A_x$, $A_y$, $B_x$, $B_y$ are your given coordinates and $l_1$, $l_2$, $l_3$ are lengths of $AC$, $BC$ and $AB$ respectively (see the image). Note that there is $±$ sign, because you can build 2 triangles which will satisfy your problem.

Problem legend

This answer may be a bit late, but I hope other people who face this problem will find my solution useful.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.