Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Математика _ Вектора в полуплоскости

Автор: Fanat 20.12.2008 18:08

Подскажите алгоритм (наверно, скорее формулу) определения находятся ли все (допустим 3) вектора в одной полуплоскости.
Например (1,1) (1,2) (-1,1) находятся, а (1,1), (-1,0), (1,-1) нет.

Автор: Fanat 20.12.2008 19:56

Цитата(Fanat @ 20.12.2008 14:08) *

Подскажите алгоритм (наверно, скорее формулу) определения находятся ли все (допустим 3) вектора в одной полуплоскости.
Например (1,1) (1,2) (-1,1) находятся, а (1,1), (-1,0), (1,-1) нет.


В принципе уже сам придумал. Можно пройти по всем векторам, построить прямые ограничивающии полуплоскость, и если все остальные вектора лежат в ней или все не лежат то все вектора в одной полуплоскости.

Буду делать так. Может можно лучше.

Автор: Lapp 21.12.2008 13:57

Цитата(Fanat @ 20.12.2008 14:08) *
алгоритм (наверно, скорее формулу) определения находятся ли все (допустим 3) вектора в одной полуплоскости.
Нет, скорее алгоритм smile.gif.
Идешь в цикле по всем векторам Ai.
Производишь поворот системы координат (от исходного положения) на угол, который текущий вектор Ai составляет с осью Х. После такого поворота его Y-компонента занулится:
(Aix, Aiy) -> (Aix', 0) .
Все остальные вектора также подвергнутся преобразованию:
(Ajx, Ajy) -> (Ajx', Ajy') .
Проходишь в цикле по всем остальным (кроме i-того и последнего) векторам и смотришь произведение:
mj = Ajy' * Aj+1y'
Если все такие произведения неотрицательны:
mj <=0 ,
то все вектора лежат в одной полуплоскости, причем сечение плоскости производится вектором Ai. Если нет - продолжить внешний цикл.

Вроде так. Замучился индексы проставлять.. smile.gif

Автор: Fanat 21.12.2008 16:39

Цитата(Lapp @ 21.12.2008 9:57) *

Нет, скорее алгоритм smile.gif.
Идешь в цикле по всем векторам Ai.
Производишь поворот системы координат (от исходного положения) на угол, который текущий вектор Ai составляет с осью Х. После такого поворота его Y-компонента занулится:
(Aix, Aiy) -> (Aix', 0) .
Все остальные вектора также подвергнутся преобразованию:
(Ajx, Ajy) -> (Ajx', Ajy') .
Проходишь в цикле по всем остальным (кроме i-того и последнего) векторам и смотришь произведение:
mj = Ajy' * Aj+1y'
Если все такие произведения неотрицательны:
mj <=0 ,
то все вектора лежат в одной полуплоскости, причем сечение плоскости производится вектором Ai. Если нет - продолжить внешний цикл.

Вроде так. Замучился индексы проставлять.. smile.gif


Спасибо...думаю, пригодится smile.gif