3D重心のようなものもありますか?はっきりさせておきますが、私はこのサイトとWebの両方で過去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
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)