2015-01-07 6 views
-1

Я думаю, что есть довольно прямой ответ на этот вопрос, но я не могу его найти. Для этого у меня слишком много уроков геометрии. проблема в том, что: Учитывая 2 точки A и B (координаты Ax Ay Bx и By), я хочу найти координаты точек C и D так, чтобы сегменты [AB] и [CD] пересекались в их центре, а [CD] длина d (переменная). Я хочу найти уравнение, дающее мне Cx, Cy, Dx и Dy из Ax, Ay, Bx, By и d. Вот небольшая схема задачи:вычислить координаты сегмента биссектриса

enter image description here

и образ предполагаемого результата:

enter image description here

Я уже знаю, как найти точку центра [AB] (Ax + Bx/2, Ay + By/2), как найти наклон сегмента [AB] (By-Ay/Bx-Ax), а затем один из сегментов [CD] (Ax-Bx/By-Ay). Но потом я зациклился на том, как получить мои два очка. Я думал, что могу рассчитать угол от склона, а затем использовать его с некоторой тригонометрией, чтобы получить координаты, но это звучит как довольно тяжелый, уродливый и ненужный расчет ... Он чувствует себя так близко, но я все еще не могу его получить.

Я также нашел this post, который почти идеален, но длина не может быть определена: она должна быть такой же, как в первом сегменте.

Я не думаю, что это зависит от языка, но если вы знаете, я делаю мини-прототип при обработке и, вероятно, позже его получу на javascript.

Спасибо за любую помощь.

ответ

0

Основной трюк в том, что в 2d перпендикуляр к вектору (x, y) является просто ± (-y, x). (Создаётся это путем вычисления cross product с (0, 0, 1) вектор в 3d и проектирования до 2d.) Так что вам нужно сделать, это:

  1. Получите среднюю точку между А и В (вы это сделали).

  2. Получить вектор от A до B, который является B - A = (x, y) = (bx - ax, by - ay).

  3. Получить перпендикулярный вектор: (-y, x).

  4. Нормализовать. Пусть length = sqrt(y*y + x*x), затем norm = (-y/length, x/length).

  5. Multiply нормированный перпендикулярно по нужному расстоянию ± d/2 (так как вы хотите, чтобы расстояние между C и D, чтобы быть d), и добавить к центральной точке.

Не требуется никаких функций наклона или триггера.

Смежные вопросы