Найти последнюю координату равнобедренного треугольника с учетом координат основания и высоты - PullRequest
1 голос
/ 08 декабря 2008

Я понятия не имею о тригонометрии, несмотря на то, что изучаю ее в школе еще тогда, и думаю, что это должно быть довольно просто, но перетаскивание тонн триггера в Интернете заставляет мою голову болеть :) Так что, возможно, кто-то может мне помочь ...

Название точно объясняет, что я хочу сделать, у меня есть строка: х1, у1 и х2, у2 и хотите, чтобы функция нашла x3, y3, чтобы завершить равнобедренный треугольник, учитывая высоту.

Просто чтобы прояснить, линия x1, y2 -> x2, y2 будет базой, и она не будет выровнена по любой оси (это будет под случайным углом ..)

У кого-нибудь есть простая функция для этого ??

Ответы [ 3 ]

3 голосов
/ 08 декабря 2008

построить нормаль к вектору (x1, y1) -> (x2, y2). поместите его в середину ((x1 + x2) / 2, (y1 + y2) / 2) и выйдите на расстояние h.

нормаль будет выглядеть так (- (y2-y1), x2-x1). сделать это единичным вектором (http://en.wikipedia.org/wiki/Unit_vector).

добавьте h раз этот единичный вектор к средней точке.

2 голосов
/ 08 декабря 2008

Третья точка находится на перпендикулярном биссектрисе вашей базы и находится на расстоянии altitude единиц от линии.

  1. Рассчитать среднюю точку базы путем усреднения координат x и y.
  2. Рассчитайте наклон вашей высоты: -dx / dy (перпендикулярно dy / dx). Теперь у вас есть линия (точка и уклон).
    • y - my = -dx / dy * (x - mx)
  3. Подставьте переменные в формулу расстояния: d = sqrt (dx ^ 2 + dy ^ 2)
    1. d = sqrt ((x - mx) ^ 2 + (y - my) ^ 2)
    2. d = sqrt ((x - mx) ^ 2 + (-dx / dy * (x - mx)) ^ 2)
    3. d ^ 2 = (x - mx) ^ 2 + (-dx / dy * (x - mx)) ^ 2
    4. d ^ 2 - (x - mx) ^ 2 = (-dx / dy * (x - mx)) ^ 2
    5. ± sqrt (d ^ 2 - (x - mx) ^ 2) = -dx / dy * (x - mx)
    6. ± sqrt (d ^ 2 - (x - mx) ^ 2) * dy / dx = x - mx
    7. ± sqrt (d ^ 2 - (x - mx) ^ 2) * dy / dx + mx = x
    8. x = ± sqrt (d ^ 2 - (x - mx) ^ 2) * dy / dx + mx
  4. Вычислите другую переменную (y здесь), используя ваше уравнение строки (из # 2).
  5. Теперь у вас есть две точки; выберите то, что вы хотите ...

В псевдокоде:

dx = x1 - x2
midpoint = ((x1 + x2) / 2, (y1 + y2) / 2)
slope = -dx / (y1 - y2)
x = sqrt(altitude*altitude - dx*dx) / slope + midpoint.x
y = slope * (x - midpoint.x) + midpoint.y

Это, вероятно, не самый оптимальный метод. Не уверен, что это даже работает. XD

0 голосов
/ 08 декабря 2008

Я могу вспомнить, что равнобедренный треугольник будет иметь стороны одинаковой длины и равные углы у основания. Если у вас есть высота, то у вас есть окончательная координата, потому что это будет точка пересечения, верно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...