| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Алгоритмы > Расчет координат трапеции |
| Автор: Dementor 7.2.2014, 12:32 |
| Всем привет! Не могу никак понять как решить задачу, связанную с расчетом координат вершин трапеции - беда у меня с геометрией. На рисунке ниже я попытался отобразить то, что мне необходимо построить (углы не выверял): ![]() Итак - у меня есть ломаная, которая на рисунке показана красным цветом. Координаты вершин известны. Необходимо рассчитать координаты вершин трапеций, которые на рисунке показаны зеленым и синим цветом. Координаты точек пересечения ребер трапеций и ломаной известны. Ребра трапеций образованы биссектрисами углов ломаной (углы посчитать не проблема). Также известны и длины высот трапеций. Очень прошу помощи в написании алгоритма расчета координат. |
| Автор: 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) - нормализуете полученный вектор, получая при этом вектор указывающий в сторону от ломаной - зная эти вектора, вы легко получаете точки ваших трапеций вычетая и прибавляя вектора к точкам ломаной ![]() |
| Автор: Dementor 7.2.2014, 20:30 |
| Bitter, огромное вам спасибо!!! Отлично работает, правда с небольшим дополнением - пришлось нормализовать вектора V1 и V2. |
| Автор: Bitter 7.2.2014, 20:48 |
| Dementor, ну их нормализовать не обязательно, главное нормализовать вектор суммы Добавлено через 2 минуты и 27 секунд Хотя вы правы, нормализовать надо. Потому что если сумма нормализованных векторов v1 и v2 равна нулю (то есть длина вектора vs = 0), то вектора повернуты на 180 градусов друг относительно друга, и тогда вам надо поступать как в случае с первой вершиной |