![]() |
|
|
![]()
|
|
| Dementor |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 9.7.2007 Репутация: нет Всего: нет |
Всем привет!
Не могу никак понять как решить задачу, связанную с расчетом координат вершин трапеции - беда у меня с геометрией. На рисунке ниже я попытался отобразить то, что мне необходимо построить (углы не выверял): ![]() Итак - у меня есть ломаная, которая на рисунке показана красным цветом. Координаты вершин известны. Необходимо рассчитать координаты вершин трапеций, которые на рисунке показаны зеленым и синим цветом. Координаты точек пересечения ребер трапеций и ломаной известны. Ребра трапеций образованы биссектрисами углов ломаной (углы посчитать не проблема). Также известны и длины высот трапеций. Очень прошу помощи в написании алгоритма расчета координат. |
|||
|
||||
| Bitter |
|
|||
![]() Опытный лентяй ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1209 Регистрация: 15.8.2004 Где: Харьков, Ukraine Репутация: 4 Всего: 27 |
Все довольно просто. Если вам известны коорденаты вершин красной ломаной, и при этом вы понимаете что такое вектора и как с ними работать, то алгоритм сводится к таким простым действиям:
- в каждой не первой и не последней точке ломаной строите два вектора, первый направлен к предыдущей точке (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 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 9.7.2007 Репутация: нет Всего: нет |
Bitter, огромное вам спасибо!!! Отлично работает, правда с небольшим дополнением - пришлось нормализовать вектора V1 и V2.
|
|||
|
||||
| Bitter |
|
|||
![]() Опытный лентяй ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1209 Регистрация: 15.8.2004 Где: Харьков, Ukraine Репутация: 4 Всего: 27 |
Dementor, ну их нормализовать не обязательно, главное нормализовать вектор суммы
Добавлено через 2 минуты и 27 секунд Хотя вы правы, нормализовать надо. Потому что если сумма нормализованных векторов v1 и v2 равна нулю (то есть длина вектора vs = 0), то вектора повернуты на 180 градусов друг относительно друга, и тогда вам надо поступать как в случае с первой вершиной |
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |