`Добрый день. Необходимо на форме отрисовать равнобедренный треугольник. На входе дано только координаты вершин, что определяют основу треугольника и суму длин двух других сторон. В тех случаях, когда основа параллельна одной из осей проблем нету. Уже час не могу придумать как определить координаты третьей вершины когда она не параллельна.`

## 2 answers

Let `A`

, `B`

be the vertices of the base, `C`

be the unknown vertex. If the sum `s`

given, the lengths of the sides, then each side is equal to half of this sum. So, `AC = BC = s/2`

.

Let `M`

be the middle of `AB`

(its coordinates are equal to the half-sum of coordinates `A`

and `B`

). Then `CM`

is the height, from the right triangle `AMC`

we have:

` ``CM = sqrt(AC^2 - AM^2) = sqrt(s^2/4 - AB^2/4)`

(If there is a negative number under the root, the task obviously has no solutions.)

So, we have the length of the vector `MC`

, its direction is easy to find, given that it is perpendicular to the vector `AB`

: if `(p, q)`

is the vector `AB`

, then the vector `(-q, p)`

perpendicular to it, the vector `(-q/l, p/l)`

(where `l = sqrt(p^2 + q^2)`

) is perpendicular to `AB`

and has a length of 1 and vector `(-q/l*L, p/l*L)`

(where `L`

is the previously calculated length `CM`

) is perpendicular to `AB`

and has a length equal to the length of `MC`

.

So we have the vector `MC`

. Adding its coordinates to the coordinates of point `M`

, we get point `C`

Note that we have 2 possible solutions, different in the sign of the `MC`

vector: to get the second solution, change the sign of the `MC`

from the first solution.

This and other similar tasks will be coded very easily if there are classes in your arsenal representing a point, a vector, and operations on them are defined. For example, in my code, the solution usually looks like this (C #):

` ``var AB = B - A; var M = A + AB * 0.5; var L = Math.Sqrt(s * s - AB.Length * AB.Length) / 2; var MC = AB.Rotate(Angle.FromDegrees(90)).GetUnitVector() * L; var C1 = M + MC; var C2 = M + (-MC);`

- What draw the picture, if not a secret? - nitrocaster
- @Flammable: (sprinkling ashes on his head) ordinary Paint.NET :( - VladD
- I was thinking ... - nitrocaster
- Well, Paint.NET is not ms paint, but with xfig on such jobs it still doesn’t suffer. - alexlz 2:57 pm
- @alexlz: and he happens under the vents? - VladD pm

write a system of equations of a circle

` `` (x-x0)^2+(y-y0)^2=R (x-x01)^2+(y-y01)^2=R`

(where x and y are the coordinates of the third point) (where x0 y0 x01 y01 are the coordinates of two known vertices), but how did you decide when the base is parallel to one of the axes if in any case two possible solutions to the problem are obtained. The third point can be from above or below grounds.

- Thank! It does not matter which of the two points to take. - Freest
- not at all) - Dikaz
- one@Freest, mark the answer as accepted if it came up. - nitrocaster
- Right in the formulas R ^ 2. - Yuri Negometyanov