甚至有 3D 质心这样的东西吗?让我非常清楚 - 在过去的两天里,我一直在这个网站和整个网络上阅读和阅读关于质心的内容,所以我完全了解该主题的现有帖子,包括Wikipedia。
也就是说,让我解释一下我想要做什么。基本上,我想选择边和/或顶点,但不是面。然后,我想在 3D 质心位置放置一个对象。
我会告诉你我不想要的:
- 顶点平均,这会在任何具有更详细网格的方向上拉得太远。
- 边界框中心,因为我已经有一些适用于这种情况的东西。
我对关于质心的建议持开放态度,但我不明白这是如何工作的,因为单独的顶点或边并不能定义任何类型的质量,尤其是当我只选择了一个边循环时。
为了好玩,我将向您展示一些我使用@Emile的代码作为参考编写的 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)