我正在寻找一种算法,可以计算定义区域中二维空间中任意矩形占用的所有网格单元。矩形由它的 4 个角坐标定义。在下图中,我将其中两个标记为红色,网格单元格的坐标为黑色。我正在寻找一个通用案例,它还涵盖未对齐的网格(网格中心!= 底层坐标系的中心),但是在单元坐标 <=> 坐标系之间进行转换是微不足道的并且已经实现。所有单元格都是正方形。
计算在很短的时间内完成了数千次,并且需要尽可能快。
我现在在做什么:
现在我正在计算矩形的边缘(AB、BC、CD、DA)并每sampleRate = cellWidth / 4
隔一段时间对它们进行采样。为了找到中间单元格,我从AB + sampleRate * x
to构造新行CD + sampleRate * x
并在 处再次对这些行进行采样sampleRate
。我将在每个采样点找到的所有单元格放入 HashSet 以删除重复项。但我觉得这是非常低效的。
我还考虑将相关区域中的所有单元格抓取到缓冲区中并生成范围树或索引树。然后我可以对矩形的边界进行排队并在 O(log n+m) 处获取所有包含的单元格,但我不确定如何实现它,我什至找不到任何 C# 范围树实现。
我在计算机图形学方面的知识非常生疏,但不应该有一种简单的几何方法无需采样即可工作吗?