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

时间:2014-06-26 19:33:13

标签: 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 - 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]

我现在想知道如何使用代表多边形的任意数量的点来做到这一点。我不确定我是否只需要计算每个三角形和一些如何从中得到坐标。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:0)

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

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

  • 平面性:三角形总是平面的,因此重心坐标始终位于三角形上。对于ngons不适用。

然而,您可以对凸平面非线性进行重心坐标。可能更好的是对三角形进行三角测量并使用更简单,更稳健的三角形。

答案 1 :(得分:0)

我最终为此做的是实施this,它似乎与maya的复制皮肤重量相关。我确实检查了多边形是否是凸的,如果是,它只是在最近的三角形上使用常规的重心坐标。

感谢您的投入!