甚至还有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/

    10-11 20:57