BitNeBolt
@BitNeBolt

Как определить, что вектор не направлен в сторону центра координат?

У меня есть структура полигона, для него мне надо вычислять нормаль. Для этого я выбираю 2 случайных вектора и векторно умножаю их. Так как я выбираю 2 вектора случайно, то получившийся вектор может быть направлен в одну сторону, так и противоположную ей.

Точка (0; 0; 0) не лежит в этом полигоне.

Мне надо выбрать такую нормаль, луч (из полигона), в направлении которой не пересекает плоскость, параллельную данному полигону и содержащую (0; 0; 0).

Как мне это можно сделать? Как в теории (хорошо или плохо) будет работать решение с уравнениями?
  • Вопрос задан
  • 86 просмотров
Решения вопроса 1
wataru
@wataru Куратор тега Алгоритмы
Разработчик на С++, гуглер, экс-олимпиадник.
Во-первых, берите две соседние стороны многоугольника. Если они коллинеарны, то берите другие 2 соседние. Но по хорошему, у вас коллинеарных соседних строн быть не должно и их можно объеденить при вводе полигона.

Но все-равно остается вопрос, а вдруг нормаль смотрит в сторону отчки (0,0,0).
Постройте уравнение плоскости ax+by+cz+d=0. (a,b,c) - это ваш найденный вектор нормали. d высчитывается, если подставить одну любую точку полигона.

Теперь, если d положительно, то точка (0,0,0) лежит в том полупространстве, куда смотрит вектор и вам надо развернуть нормаль.

Тут используется свойство знакового расстояния. Можно в уравнение плоскости подставить любую точку. Вы получите 0 для плоскости, положительные числа для одного полупространства и отрицательные для другого. Положительные в той части, куда торчит вектор нормали (ведь если отложить от точки на плоскости эту нормаль, и подсчитать знаковое расстояние, то получите тупо длину вектора нормали).
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
samodum
@samodum
Какой вопрос - такой и ответ
Нужно брать два соседних вектора, а не случайных. И тогда проблема пропадёт
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы