相关疑难解决方法(0)

如何计算3D质心?

甚至还有3D质心这样的东西?让我非常清楚 - 我已经在本网站和网络上阅读和阅读过去2天的质心,所以我完全了解该主题的现有帖子,包括维基百科.

那就是说,让我解释一下我要做的事情.基本上,我想选择边和/或顶点,但不是面.然后,我想将一个对象放在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 …
Run Code Online (Sandbox Code Playgroud)

python average maya

8
推荐指数
1
解决办法
5678
查看次数

给出顶点时计算多面体的质心和体积

给定凸多面体(3D)的顶点的位置,我需要计算多面体的质心和体积.以下代码可在Mathworks网站上获得.

function C = centroid(P)
k=convhulln(P);
if length(unique(k(:)))<size(P,1)
    error('Polyhedron is not convex.');
end
T = delaunayn(P);
n = size(T,1);
W = zeros(n,1);
C=0;
for m = 1:n
    sp = P(T(m,:),:);
    [null,W(m)]=convhulln(sp);
    C = C + W(m) * mean(sp);
end
C=C./sum(W);
return
end
Run Code Online (Sandbox Code Playgroud)

代码很优雅,但速度非常慢.我需要数百次计算数千个多面体的体积和质心.在当前状态下使用此代码是不可行的.有没有人知道更好的方法,或者这个代码可以更快?我可以想到一些微小的变化,例如用mean平均值替换表达式.

performance matlab volume polyhedra centroid

6
推荐指数
1
解决办法
3682
查看次数

标签 统计

average ×1

centroid ×1

matlab ×1

maya ×1

performance ×1

polyhedra ×1

python ×1

volume ×1