甚至还有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) 给定凸多面体(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平均值替换表达式.