Существует ли вообще такая вещь, как трехмерный центроид? Позвольте мне быть предельно ясным - я читал и читал о центроидах в течение последних 2 дней как на этом сайте, так и в Интернете, поэтому я прекрасно осведомлен о существующих сообщениях по этой теме, включая Википедию .
Тем не менее, позвольте мне объяснить, что я пытаюсь сделать. По сути, я хочу взять набор ребер и / или вершин, но НЕ граней. Затем я хочу поместить объект в положение трехмерного центроида.
Я скажу вам, чего я не хочу:
Я открыт для предложений относительно центра масс, но я не понимаю, как это будет работать, потому что вершины или ребра сами по себе не определяют какой-либо вид массы, особенно когда у меня просто выбран краевой цикл.
Для удовольствия я покажу вам несколько PyMEL , которые я обработал, используя код @ Emile в качестве ссылки, но я не Думаю, он работает так, как должен:
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)