Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Расчет координат трапеции 
:(
    Опции темы
Dementor
Дата 7.2.2014, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 9.7.2007

Репутация: нет
Всего: нет



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

user posted image

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

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

Очень прошу помощи в написании алгоритма расчета координат.
PM MAIL   Вверх
Bitter
Дата 7.2.2014, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 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)
- нормализуете полученный вектор, получая при этом вектор указывающий в сторону от ломаной
- зная эти вектора, вы легко получаете точки ваших трапеций вычетая и прибавляя вектора к точкам ломаной
user posted image
PM MAIL ICQ Skype   Вверх
Dementor
Дата 7.2.2014, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 9.7.2007

Репутация: нет
Всего: нет



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


PM MAIL   Вверх
Bitter
Дата 7.2.2014, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 4
Всего: 27



Dementor, ну их нормализовать не обязательно, главное нормализовать вектор суммы

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

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0384 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.