Определяем угол между двумя ребрами меша в Blender

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

Для определения угла между двумя прилегающими к одной точке ребрами меша, удобнее всего использовать структуру bmesh.

Создадим объект bmesh и загрузим в него геометрию текущего активного меша сцены. Сразу приведем индексацию вертексов и ребер в соответствие с индексацией исходного меша.

Возьмем точку с индексом 0. К ней прилегают два ребра, между которыми мы хотим определить угол.

Получить оба ребра, прилегающие к точке, можно через ее свойство link_edges:

Отталкиваясь теперь уже от ребер, определим их общую точку

и две оставшиеся точки

Теперь по этим трем точкам мы можем построить два вектора, соответсвующее двум ребрам меша:

Чтобы определить угол между двумя векторами, мы можем вычислить их скалярное произведение (dot product) или же воспользоваться функцией angle объекта Vector из модуля mathutils, который делает то же самое.

На самом деле между двумя векторами существуют два угла. Чаще всего при расчетах нам нужен внутренний (меньший) из них. Функция angle вычисляет угол между векторами в правосторонней системе координат т.е. по часовой стрелке. Соответственно, мы не знаем, какой именно угол получим в результате. Однако мы можем просто сравнить угол со 180 градусами, и если он больше – значит найден внешний (больший) угол. Чтобы получить внутренний, нужно и 360 градусов отнять полученное значение.

Обратите внимание, что функция angle возвращает результат в радианах. Чтобы оперировать привычными градусами, нам нужно не забывать делать преобразования.

В результате мы получаем нужный нам угол

1 1 голос
Article Rating
Подписаться
Уведомить о
guest

0 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии