Подскажите алгоритм (наверно, скорее формулу) определения находятся ли все (допустим 3) вектора в одной полуплоскости.
Например (1,1) (1,2) (-1,1) находятся, а (1,1), (-1,0), (1,-1) нет.
![]() |
1. Заголовок темы должен быть информативным. В противном случае тема закрывается и удаляется ...
2. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
3. Одна тема - один вопрос (задача)
4. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
Fanat |
![]()
Сообщение
#1
|
![]() Fanat ![]() ![]() ![]() Группа: Пользователи Сообщений: 261 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
Подскажите алгоритм (наверно, скорее формулу) определения находятся ли все (допустим 3) вектора в одной полуплоскости.
Например (1,1) (1,2) (-1,1) находятся, а (1,1), (-1,0), (1,-1) нет. |
Fanat |
![]()
Сообщение
#2
|
![]() Fanat ![]() ![]() ![]() Группа: Пользователи Сообщений: 261 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
Подскажите алгоритм (наверно, скорее формулу) определения находятся ли все (допустим 3) вектора в одной полуплоскости. Например (1,1) (1,2) (-1,1) находятся, а (1,1), (-1,0), (1,-1) нет. В принципе уже сам придумал. Можно пройти по всем векторам, построить прямые ограничивающии полуплоскость, и если все остальные вектора лежат в ней или все не лежат то все вектора в одной полуплоскости. Буду делать так. Может можно лучше. |
Lapp |
![]()
Сообщение
#3
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
алгоритм (наверно, скорее формулу) определения находятся ли все (допустим 3) вектора в одной полуплоскости. Нет, скорее алгоритм ![]() Идешь в цикле по всем векторам Ai. Производишь поворот системы координат (от исходного положения) на угол, который текущий вектор Ai составляет с осью Х. После такого поворота его Y-компонента занулится: (Aix, Aiy) -> (Aix', 0) . Все остальные вектора также подвергнутся преобразованию: (Ajx, Ajy) -> (Ajx', Ajy') . Проходишь в цикле по всем остальным (кроме i-того и последнего) векторам и смотришь произведение: mj = Ajy' * Aj+1y' Если все такие произведения неотрицательны: mj <=0 , то все вектора лежат в одной полуплоскости, причем сечение плоскости производится вектором Ai. Если нет - продолжить внешний цикл. Вроде так. Замучился индексы проставлять.. ![]() -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Fanat |
![]()
Сообщение
#4
|
![]() Fanat ![]() ![]() ![]() Группа: Пользователи Сообщений: 261 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
Нет, скорее алгоритм ![]() Идешь в цикле по всем векторам Ai. Производишь поворот системы координат (от исходного положения) на угол, который текущий вектор Ai составляет с осью Х. После такого поворота его Y-компонента занулится: (Aix, Aiy) -> (Aix', 0) . Все остальные вектора также подвергнутся преобразованию: (Ajx, Ajy) -> (Ajx', Ajy') . Проходишь в цикле по всем остальным (кроме i-того и последнего) векторам и смотришь произведение: mj = Ajy' * Aj+1y' Если все такие произведения неотрицательны: mj <=0 , то все вектора лежат в одной полуплоскости, причем сечение плоскости производится вектором Ai. Если нет - продолжить внешний цикл. Вроде так. Замучился индексы проставлять.. ![]() Спасибо...думаю, пригодится ![]() |
![]() ![]() |
![]() |
Текстовая версия | 17.04.2025 19:13 |