甚至还有3D重心之类的东西吗?让我非常清楚-在过去的两天里,我在该网站和整个网络上都在阅读和阅读有关质心的信息,所以我很清楚关于该主题的现有文章,包括Wikipedia。
就是说,让我解释一下我要做什么。基本上,我想选择边缘和/或顶点,但不要选择面。然后,我要在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)
最佳答案
从理论上讲centroid = SUM(pos*volume)/SUM(volume)
,当您将零件分为有限的体积时,每个体积都有一个位置pos
和体积值volume
。
这正是为找到复合零件的重心而进行的计算。
关于python - 如何计算3D重心?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4824141/