Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Расчет координат трапеции


Автор: Dementor 7.2.2014, 12:32
Всем привет!
Не могу никак понять как решить задачу, связанную с расчетом координат вершин трапеции - беда у меня с геометрией.
На рисунке ниже я попытался отобразить то, что мне необходимо построить (углы не выверял):

user posted image

Итак - у меня есть ломаная, которая на рисунке показана красным цветом. Координаты вершин известны. Необходимо рассчитать координаты вершин трапеций, которые на рисунке показаны зеленым и синим цветом. 

Координаты точек пересечения ребер трапеций и ломаной известны. Ребра трапеций образованы биссектрисами углов ломаной (углы посчитать не проблема). Также известны и длины высот трапеций.

Очень прошу помощи в написании алгоритма расчета координат.

Автор: Bitter 7.2.2014, 14:07
Все довольно просто. Если вам известны коорденаты вершин красной ломаной, и при этом вы понимаете что такое вектора и как с ними работать, то алгоритм сводится к таким простым действиям:
- в каждой не первой и не последней точке ломаной строите два вектора, первый направлен к предыдущей точке (v1 = P0 - P1), второй к следующей точке (v2 = P2 - P1)
- находите сумму двух векторов (vs = v1 + v2)
   - если это первая точка то вместо нахождения суммы векторов берете вектор указывающий в следующую точку (v1 = P2 - P1), после чего поворачиваете его на 90 градусов (vt = -v.y, v.x)
   - если это последняя точка то вместо нахождения суммы векторов берете вектор указывающий на предыдущую точку (v1 = P0 - P1), после чего поворачиваете его на 90 градусов (vt = -v.y, v.x)
- нормализуете полученный вектор, получая при этом вектор указывающий в сторону от ломаной
- зная эти вектора, вы легко получаете точки ваших трапеций вычетая и прибавляя вектора к точкам ломаной
user posted image

Автор: Dementor 7.2.2014, 20:30
Bitter, огромное вам спасибо!!! Отлично работает, правда с небольшим дополнением - пришлось нормализовать вектора V1 и V2.


Автор: Bitter 7.2.2014, 20:48
Dementor, ну их нормализовать не обязательно, главное нормализовать вектор суммы

Добавлено через 2 минуты и 27 секунд
Хотя вы правы, нормализовать надо. Потому что если сумма нормализованных векторов v1 и v2 равна нулю (то есть длина вектора vs = 0), то вектора повернуты на 180 градусов друг относительно друга, и тогда вам надо поступать как в случае с первой вершиной

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)