使用四边形的重心坐标

时间:2010-06-30 23:03:30

标签: image 2d coordinates quad

你们中的一些人知道如何使用重心填充2D中的四边形 坐标?目前,我将四边形分成两个三角形, 但这种方式效率低下,因为我必须迭代第二种方式 边界框重复之前填充的像素(由 例如,为了填充第二个三角形,我遍历了第一个三角形 属于第二个三角形形成的边界框) 感谢

esmitt

1 个答案:

答案 0 :(得分:0)

这是一个python示例,应该是您正在寻找的。正如您可能知道的那样,二维中的四边形没有唯一定义的重心坐标(三维中有四面体的重心坐标,但这是另一回事)。

import sys

def fill(xa, ya, xb, yb, xc, yc, xd, yd):
    abx = yb - ya
    aby = xa - xb
    kab = - (xa*abx + ya*aby)

    bcx = yc - yb
    bcy = xb - xc
    kbc = - (xb*bcx + yb*bcy)

    cdx = yd - yc
    cdy = xc - xd
    kcd = - (xc*cdx + yc*cdy)

    dax = ya - yd
    day = xd - xa
    kda = - (xd*dax + yd*day)

    for y in xrange(25):
        for x in xrange(79):
            if (x*abx + y*aby + kab >= 0 and
                x*bcx + y*bcy + kbc >= 0 and
                x*cdx + y*cdy + kcd >= 0 and
                x*dax + y*day + kda >= 0):
                sys.stdout.write('+')
            else:
                sys.stdout.write('-')
        sys.stdout.write('\n')

fill( 10, 5,
      6, 22,
      60, 17,
      70, 9 )

基本上我正在计算每条边的线系数,然后检查该点是否在每条边的正确边上。线系数没有标准化,因为如果你只想要一个不需要的命中/未命中测试(你只会检查符号而不是x nx + y ny + nk的大小)。

请注意,此方法需要凸面导向的四边形...