还有像3D质心这样的东西吗?让我清楚一点 - 我一直在阅读和阅读本网站和网络上过去两天的质心,因此我完全了解该主题的现有帖子,包括Wikipedia。如何计算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)
你知道,在你发布这个消息之前,我只是想着同样的事情。我想知道结果会是什么。因为在这种情况下数学会非常简单,因为它只是一个加权平均值。我现在需要睡觉,但明天我会看看。 – jedmao 2011-01-28 11:10:55
仍在研究此解决方案。我会尽力让你更新。 – jedmao 2011-02-02 07:52:44
我很乐意看到结果。它明显适用于一些简单的测试用例。例如。一个顶点很多,而另一个顶点较少的圆柱体。如果它不起作用,什么样的测试案例是一个问题? – Keith 2011-02-03 02:51:14