多边形3D Maya API上的任意重心坐标

多边形3D Maya API上的任意重心坐标,api,3d,coordinates,maya,Api,3d,Coordinates,Maya,我正在寻找一个使用API计算maya中任意多边形重心坐标的好代码示例。我最近可以计算三角形内的重心坐标,如下所示: def baryInterp(vecA, vecB, vecC, vecP): ''' Calculates barycentricInterpolation of a point in a triangle. :param vecA - OpenMaya.MVector of a vertex point. :param vecB - OpenM

我正在寻找一个使用API计算maya中任意多边形重心坐标的好代码示例。我最近可以计算三角形内的重心坐标,如下所示:

def baryInterp(vecA, vecB, vecC, vecP):
    '''
    Calculates barycentricInterpolation of a point in a triangle.

    :param vecA - OpenMaya.MVector of a vertex point.
    :param vecB - OpenMaya.MVector of a vertex point.
    :param vecC - OpenMaya.MVector of a vertex point.
    :param vecP - OpenMaya.MVector of a point to be interpolated.

    Returns list of 3 floats representing weight values per each point.
    '''
    v0 = vecB - vecA
    v1 = vecC - vecA
    v2 = vecP - vecA

    d00 = v0 * v0
    d01 = v0 * v1
    d11 = v1 * v1
    d20 = v2 * v0
    d21 = v2 * v1

    denom = d00 * d11 - d01 * d01
    v = (d11 * d20 - d01 * d21) / denom
    w = (d00 * d21 - d01 * d20) / denom
    u = 1.0 - v - w

    return [u, v, w]
我现在想弄清楚如何用任意数量的点来表示多边形。我不确定我是否需要计算每个三角形,以及如何从中得到坐标


任何帮助都将不胜感激。

它可能必须是三角形的,原因有两个:

  • 凹度:如果你有一个凹的n边形,你必须测试每个坐标以确保它在里面。重心基本上是点之间距离的唯一组合,对于凹形图形,将有许多组合落在ngon边界之外

  • 平面性:三角形总是平面的,所以重心坐标总是在三角形上。对恩贡人来说并非如此


然而,你们可以为凸平面多边形做重心坐标。可能更好的方法是对几何体进行三角剖分,并使用更简单、更健壮的三角形。

我最终完成的工作是实现,它似乎可以相应地使用maya的“复制蒙皮权重”(copy skin weights)。我确实让它检查多边形是否是凸的,如果是凸的,它将在最近的三角形上使用正则重心坐标


谢谢你的意见

你有凸平面多边形的例子吗?或者用三角形计算多边形重心权重的方法?我想这就是我想要的,但对数学不太确定。看起来他们对内部网格进行了三角剖分,以离散形状的内部空间,并对三角形进行处理。你可以将重心坐标扩展到四边形,但它有问题,大多数情况下,你对所有东西都进行了三角剖分。最值得注意的例外是雷耶斯算法,它几乎所有东西都使用四边形。