你们中的一些人知道如何使用重心填充2D中的四边形 坐标?目前,我将四边形分成两个三角形, 但这种方式效率低下,因为我必须迭代第二种方式 边界框重复之前填充的像素(由 例如,为了填充第二个三角形,我遍历了第一个三角形 属于第二个三角形形成的边界框) 感谢
esmitt
答案 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的大小)。
请注意,此方法需要凸面导向的四边形...