【问题标题】:barycentric coordinates using quads使用四边形的重心坐标
【发布时间】:2019-10-31 06:25:14
【问题描述】:

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

埃斯密特

【问题讨论】:

  • “四边形”是指四边形吗?
  • 是的,是四边形

标签: image 2d coordinates


【解决方案1】:

这是一个 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 )

基本上,我正在计算每条边的线系数,然后检查该点是否在每条边的正确一侧。线系数未归一化,因为如果您只需要不需要的命中/未命中测试(您将只检查符号而不是 xnx + yny + nk 的大小)。

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

【讨论】:

  • .. 该方法还要求四边形是凸的。
  • 谢谢...已添加。它还要求四边形是非自相交的,但我认为“定向”包括这一点。
猜你喜欢
  • 2016-11-27
  • 1970-01-01
  • 1970-01-01
  • 2022-07-28
  • 2013-02-07
  • 1970-01-01
  • 1970-01-01
  • 2016-05-21
  • 2021-12-25
相关资源
最近更新 更多