algorithm - 查找数组中被给定线段穿过的单元格

标签 algorithm math intersection point line-segment

我有一个二维单元格数组,大小为 10x10,许多点是成对的浮点值,例如:(1.6, 1.54), (4.53, 3.23)。对 (x,y) 满足 x<10 和 y<10

每个单元格取其坐标与单元格坐标具有相同整数部分的点。 因此 arr[3][7] 将采用 x={3...3.99(9)} 和 y={7...7.99(9)} 的点,例如 (3.5, 7.1) 或 (3.2, 7.6 ).类似地,(1.6, 1.54) 在 arr[1][1] 中,(4.53, 3.23) 在 arr[4][3] 中,等等。

每个点在数组中都有一个指定的位置,很容易找到,因为我只需将 x 和 y 转换为 int 即可去掉小数点。

但我想找出数组中的哪些单元格与两点 A(x,y) 和 B(x,y) 之间的线段相交。

例如:A(1.5, 2.5) 和 B(4.3, 3.2) 穿过索引为 [1][2]、[2][2]、[3,3] 和 [3,4] 的数组中的单元格

有什么算法吗?

这是一个类似的问题: Cells in grid crossed by a line ( PHP )

最佳答案

Amanatides和Woo的方法A Fast Voxel Traversal Algorithm for Ray Tracing允许枚举所有相交的单元格。
Here is实际执行。

工作示例(交叉和接触的单元格是彩色的) enter image description here

关于algorithm - 查找数组中被给定线段穿过的单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35807686/

相关文章:

php - 用php实现倒数计时器

c++ - C++ 中的递归深度优先搜索 (DFS) 算法

algorithm - 通过以下链接找到从网页 A 到网页 B 的最快方法

algorithm - 使用线程添加多个数组

selection - GIMP:减去重叠选择

python - 椭圆旋转θ角后椭圆与直线的交点

3d - 将一个网格拖到另一个网格上并将其限制在侧面 Three.js 内

基于关键词交集的匹配算法

c# - 为什么 Convert.ToInt32(1.0/0.00004) != (Int32)(1.0/0.00004)

javascript - 找到 3 个(或 x 个)图像的共同高度,它们的宽度等于容器元素的设置宽度