Как вывести возможные значения для последних двух координат трапеции, когда известны все 4 длины линии - PullRequest
1 голос
/ 10 апреля 2020

У меня есть трапеция, где я знаю длину всех 4 линий, и я знаю координаты двух углов. Как найти координаты оставшихся двух углов в JavaScript?

ПРИМЕЧАНИЕ: все 4 линии имеют разную длину, ie это не равнобедренная трапеция

Вот немного Диаграмма на случай, если это поможет:

       L3  
    D ____ C
     /    \
 L4 /      \ L2 
    --------
  A    L1    B

Я знаю координаты A и B и длину L1, L2, L3 и L4 (которые все разные). Мне просто нужно получить все возможные наборы координат для D и C!

1 Ответ

1 голос
/ 10 апреля 2020

Отбросьте вертикальные линии от точек C и D к линии AB, чтобы найти их проекции на E и F на AB:

enter image description here

Сейчас AED и BF C - это прямоугольные треугольники одинаковой высоты. Давайте назовем высоту h. Из Пифагора:

a² + h² = L4²     and     b² + h² = L2²

Вычитая одно уравнение из другого, вы получите: a² - b² = L4² - L2²

Также вы можете разделить L1 на сегменты AE, EF и FB, поэтому длина L1 должна be:

L1 = a + L3 + b    =>    a + b = L1 - L3

Поэтому у нас есть система уравнений в a и b:

a² - b² = L4² - L2²
a + b  = L3 - L1

Используя тот факт, что a² - b² = (a+b)(a-b) и приведенное выше уравнение, вы получите:

(L3 - L1)(a - b) = L4² - L2²   =>   a - b = (L4² - L2²)/(L3 - L1)

(Обратите внимание, что L1 и L3 не могут быть равны. Если L1 = L3, существует бесконечное число решений.)

Таким образом, уравнения упрощаются до:

a + b  = L3 - L1
a - b = (L4² - L2²)/(L3 - L1)

Решение:

a = (L3 - L1 + (L4² - L2²)/(L3 - L1)) / 2
b = (L3 - L1 - (L4² - L2²)/(L3 - L1)) / 2

Высота трапеции:

h = sqrt(L4² - a²) = sqrt(L2² - b²)

Теперь вы можете использовать a для определения угла в точке A и b чтобы определить угол в точке B и использовать их для вычисления координат для C и D. Или вы можете использовать a, b и h напрямую.

Например: предположим A находится в начале координат (0,0), а B - в (L1, 0). Тогда два решения:

  • C в (a, h) и D в (L1 - b, h)
  • C в (a, -h) и D в (L1 - b, -h)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...