Расчет Bounding Sphere для объектов

Чаще всего для быстрых упрощенных расчетов с геометрией объектов используются их Bounding Box – минимальный параллелепипед, в который вписан данный объект. Однако. иногда большую точность и простоту в расчетах может дать Bounding Sphere – минимальная сфера, в которую можно вписать объект. И если размеры и расположение Bounding Box доступно в Blender для любого объекта сразу, Bounding Sphere необходимо рассчитывать самостоятельно.

Напишем функцию, которая на основании переданного объекта вернет нам координаты центра и радиус описывающей его Bounding Sphere.

Определим функцию, в которую будем передавать два параметра:

objects – объект или список объектов, вокруг которых нужно рассчитать Bounding Sphere

mode – способ расчета Bounding Sphere: GEOMETRY – точный метод, на основе координат каждой точки объекта, или BBOX – упрощенный расчет, на основании только 8 точек от уже известного для каждого объекта Bounding Box. Упрощенный расчет даст меньшую точность (сфера получится больше в диаметре), однако он не вызовет больших нагрузок при расчете для высокополигональных объектов.

Предусмотрим, что в objects мы можем передавать как отдельный объект, так и список объектов.

Определим список координат точек, по которым будем вести расчет (в глобальной системе координат):

Для точного подсчета занесем в него координаты всех вертексов объекта.

Для расчета по Bounding Box в список достаточно занести восемь координат точек параллелепипеда.

Имея список координат всех нужных точек, мы можем найти центральную для них точку – это будет центр искомой Bounding Sphere.

Разобьем координаты точек на три списка – отдельно координаты по оси X, отдельно по оси Y и отдельно по оси Z. Считать координаты в проекциях всегда проще и быстрее, чем в 3D пространстве.

Определим функцию, которая будет возвращать центральную точку для двух точек из списка – с максимальной и минимальной координатами.

Теперь мы можем получить координаты центральной точки во всех трех проекциях. Это и будут координаты центра Bounding Sphere.

Имея координаты центра и список всех точек, найдем координаты точки, максимально удаленной от центра. Расстояние между центром и найденной точкой – будет радиусом для Bounding Sphere.

Вернем параметры рассчитанной Bounding Sphere.

Полный код:

Nikita

Автор: Nikita

Blender add-ons developer and articles writer.

0 0 голоса
Article Rating
Подписаться
Уведомить о
guest
0 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии