是否存在3D质心这样的东西?让我非常清楚地说明一下-我已经在这个网站和整个网络上阅读了有关质心的文章两天了,所以我非常清楚有关该主题的现有帖子,包括维基百科。
话虽如此,让我解释一下我的意图。基本上,我想选择边和/或顶点,但不是面。然后,我想将一个物体放置在3D质心位置。
我告诉你我不想要什么:
- 顶点平均值,因为它会在具有更高详细网格的任何方向上拉得太远。
- 边界框中心,因为我已经为这种情况有了可行的解决方案。
我可以接受关于重心的建议,但我不明白这怎么可能起作用,因为单独的顶点或边并不定义任何形式的质量,特别是当我只选择一个边环时。
为了好玩,我会展示一些我写的PyMEL代码,参考了@Emile's code,但我认为它的工作方式不正确:
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)