algorithm - 三角形的三点中有多少个整数点?

标签 algorithm geometry

实际上这是 SO 用户的经典问题 Victor把它(在另一个 SO question 中,关于在面试中要问哪些任务)。

我一个小时都做不出来(叹息)那么计算三角形内整数点数的算法是什么?

编辑:假设顶点位于整数坐标处。 (否则它变成了一个问题,找到三角形内的所有点,然后减去所有 float ,只剩下整数点;一个不太优雅的问题)。

最佳答案

假设顶点位于整数坐标,您可以通过在三角形周围构造一个矩形来获得答案,如 Kyle Schultz 的 An Investigation of Pick's Theorem 中所述。 .

对于一个j x k 矩形,内部点的个数是

I = (j – 1)(k – 1).

对于下面的 5 x 3 矩形,有 8 个内部点。

alt text
(来源:uga.edu)

对于具有垂直边 (j) 和水平边 (k) 的三角形,内部点的数量由下式给出

I = ((j – 1)(k – 1) - h) / 2

其中 h 是矩形内部与三角形斜边重合的点数(不是长度)。

alt text
(来源:uga.edu)

对于具有垂直边或水平边的三角形,内部点数 (I) 由下式给出

alt text
(来源:uga.edu)

下图中标出的j,k,h1,h2,b

alt text
(来源:uga.edu)

最后,三角形没有垂直或水平边的情况可以分为两种子情况,一种是三角形周围的区域形成三个三角形,一种是周围区域形成三个三角形和一个矩形(参见下图)。

第一个子案例中的内部点数 (I) 由下式给出

alt text
(来源:uga.edu)

下图中所有变量都标出

alt text
(来源:uga.edu)

第二个子案例中的内部点数 (I) 由下式给出

alt text
(来源:uga.edu)

下图中所有变量都标出

alt text
(来源:uga.edu)

关于algorithm - 三角形的三点中有多少个整数点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1049409/

相关文章:

python - Karatsuba算法太多递归

swift - 将一条线分成 n 等份

python - 如何根据该地区的人口密度计算 map 搜索的动态默认半径?

找到相距最远的点的算法——比 O(n^2) 更好?

algorithm - 评估谷歌地图中道路 "twistiness"的技术?

algorithm - 给定数字列表,在使用 +-*/获得特定结果时保持数字顺序

c - 二维网格图实现

c++ - 在计算列表中获取前 n 项的最快方法是什么?

python - 如何找到包含给定点的 delaunay 三角剖分面

math - 以编程方式校正鱼眼失真