Найдите нормальный угол грани треугольника в 3D, учитывая координаты его вершин.
Автор вопроса: CommunityОтветов: 4
Как вы можете понять из этого снимка экрана, я пытаюсь создать физику движок для платформера, над которым я работаю, но я столкнулся с определенной проблемой: мне нужно узнать угол любого из треугольников, которые вы видите, составляя эту сетку, чтобы я мог вычислить вращение и, следовательно, угловое ускорение игрока на этом треугольнике.
Я могу использовать созданный мной алгоритм, чтобы найти расположение всех трех точек любого треугольника, с которым игрок контактирует, но я не знаю, как использовать эти точки для определения поворота треугольника.
Под вращением я подразумеваю направление нормали от центра лица, то есть угол, под которым человек наклонился бы, если бы он стоял на этой поверхности. Может ли кто-нибудь придумать серию уравнений, которые позволят решить эту проблему?
Спасибо, что добавили картинку, я всего лишь гость :-( 04.10.2009
где p0, p1 и p2 - три вершины треугольника, вы получите нормаль. Считается, что треугольник указывает на вас, если вершины расположены по часовой стрелке относительно его внешней нормали. Это называется правилом левой руки. Представьте, что вы держите левую руку с пальцами, загнутыми от p0 до p1, большой палец торчит в направлении нормали лица:
Ответ 2 · рейтинг 10 · sdclibbery
Перекрестное произведение - правильный ответ. Не забудьте нормализовать результат и не забудьте, что если треугольник имеет нулевую площадь, результат недействителен, потому что нет четко определенной нормали. В принципе, если ваши три вершины - это p0, p1 и p2:
vector temp = cross(p1 - p0, p2 - p0);
if (length(temp) < epsilon) then
Degenerate_triangle_error;
else
return normalize(temp);
Кроме того, как говорится в другом ответе, то, получите ли вы нормаль "вверх" или "вниз", будет зависеть от порядка ваших вершин.
Ответ 3 · рейтинг 3 · Incredulous Monk
Чтобы закончить ответ на ваш вопрос, когда у вас есть единичный вектор нормали вашего треугольника, вы можете вычислить угол, используя точечное произведение.
Точечный продукт двух единичных векторов равен косинусу угла между ними, поэтому, если вы вычисляете arccos скалярного произведения вашего единичного вектора нормали и единичного вектора Up, вы получите угол наклона вашего треугольника (угол от от горизонтали).
Также обратите внимание, что OpenGL обычно использует правостороннюю систему координат, поэтому, если вы используете ее, то вершины ваших треугольников будут иметь порядок против часовой стрелки.
Ответ 4 · рейтинг 2 · whatnick
Есть 2 нормали к треугольнику (конечно), а та, которую вы получаете из стандартных алгоритмов, зависит от порядка их вершин. Цитирование wiki
"Для многоугольника (например, треугольника) нормаль к поверхности может быть вычислена как векторное произведение двух (непараллельных) ребер многоугольника".
Но направление нормали зависит от порядка выбранных точек, вы можете рассчитать его и решить, используя некоторые другие эвристики, является ли обратный вектор нормалью, которая вас интересует.