你们中的一些人知道如何使用重心填充二维四边形
坐标?目前,我将四边形分成2个三角形,
但这种方式效率低下,因为我必须迭代第二个
边界框重复先前填充的像素(通过
例如,为了填充第二个三角形,我遍历了第一个三角形
属于由第二个三角形形成的边界框)
谢谢
esmitt
这是一个 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纽约 + 纽约)。
请注意,这种方法需要凸向四边形......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)