algorithm - 以 x,y 位置的形式获取三角形内的位置列表

标签 algorithm math geometry 2d computational-geometry

假设我有一个由三个整数顶点 (x1,y1)、(x2,y2) 和 (x3,y3) 给出的三角形。我可以使用哪种算法来返回位于三角形内的所有 (x,y) 整数对的完整列表。

最佳答案

这个问题的正确名称是三角形 rasterization .

这是一个经过深入研究的问题,有多种方法可以解决。两种流行的方法是:

  1. 逐行扫描。

    对于每条扫描线,您需要一些基本的几何形状来重新计算 行的开始和结束。参见 Bresenham's Line drawing algorithm .

  2. 测试边界框中的每个像素,看它是否在 三角形。

    这通常是通过使用 barycentric 来完成的坐标。

大多数人认为方法 1) 更有效,因为您不会浪费时间测试可能位于三角形外部的像素,大约是边界框中所有像素的一半。然而,2) 有一个主要优势——它可以更容易地并行运行,因此对于硬件来说通常是更快的选择。 2) 编码也更简单。

原文paper用于准确描述如何使用方法 2) 的文章由 Juan Pineda 于 1988 年编写,称为“A Parallel Algorithm for Polygon Rasterization”。

对于三角形,它在概念上非常简单(如果您学习了重心坐标)。如果将每个像素转换为三角形重心坐标、alpha、beta 和 gamma - 那么简单的测试是 alpha、beta 和 gamma 必须在 0 和 1 之间。

关于algorithm - 以 x,y 位置的形式获取三角形内的位置列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8957028/

相关文章:

java - 为什么这个共同的祖先解决方案具有更好的最坏情况性能?

go - 如何在二叉树中所有节点的先前父级都符合条件的二叉树中搜索(可能有多个)节点?

SQL:多边形的并集

algorithm - 聚类算法和 "extending"聚类以包括 N 个最近的邻居

algorithm - 二叉搜索树中缺少数字

math - float 学有问题吗?

javascript - 给定一个外盒和内盒,确定内盒的位置

math - 如何在墨卡托 map (JPEG) 上从 x、y 获取纬度、经度?

c++ - openCV中2个多边形的交叉区域

c++ - 巨大的图形存储问题