Есть ли вообще такая вещь, как трехмерный центроид? Позвольте мне быть предельно ясным - последние два дня я читал и читал о центроидах как на этом сайте, так и в Интернете, поэтому я прекрасно осведомлен о существующих сообщениях по этой теме, включая Википедия .
Тем не менее, позвольте мне объяснить, что я пытаюсь сделать. По сути, я хочу взять выбор ребер и / или вершин, но НЕ граней. Затем я хочу поместить объект в трехмерное положение центроида.
Я скажу тебе, чего не хочу:
- Среднее число вершин, которое слишком сильно тянет в любом направлении с более детализированной сеткой.
- Ограничивающий прямоугольник, потому что у меня уже есть кое-что для этого сценария.
Я открыт для предложений относительно центра масс, но я не понимаю, как это будет работать, потому что только вершины или ребра не определяют какую-либо массу, особенно когда я просто выбрал петлю ребра.
Для пинка я покажу вам PyMEL , над которым я работал, используя @ код Эмиля в качестве ссылки, но я не думаю, что это работает так, как должно:
from pymel.core import ls, spaceLocator
from pymel.core.datatypes import Vector
from pymel.core.nodetypes import NurbsCurve
def get_centroid(node):
if not isinstance(node, NurbsCurve):
raise TypeError("Requires NurbsCurve.")
centroid = Vector(0, 0, 0)
signed_area = 0.0
cvs = node.getCVs(space='world')
v0 = cvs[len(cvs) - 1]
for i, cv in enumerate(cvs[:-1]):
v1 = cv
a = v0.x * v1.y - v1.x * v0.y
signed_area += a
centroid += sum([v0, v1]) * a
v0 = v1
signed_area *= 0.5
centroid /= 6 * signed_area
return centroid
texas = ls(selection=True)[0]
centroid = get_centroid(texas)
print(centroid)
spaceLocator(position=centroid)