以快速的方式找到LIne和网格之间的交点

时间:2010-07-17 08:45:32

标签: c# geometry

无论如何,是否允许我找到线和网格之间的所有交点? (交叉圆圈不是按比例绘制的,我知道)

蛮力方式是计算x-y网格与线的非常交集,但此算法非常低效(O(m*n),其中m是{{1}的数量网格和xn网格的数量。

我正在寻找更好的算法。

3 个答案:

答案 0 :(得分:6)

听起来您需要Digital Differential AnalyzerBresenham's line algorithm。 Bresenham与用于在位图上绘制线条的算法相同;在这种情况下,着色像素等同于检查该方块中的碰撞。

答案 1 :(得分:6)

我不确定我是否真的理解这个问题。这是你想要的任何机会吗?

Illustration 1 http://i31.tinypic.com/mwwg37.png

Illustration 2 http://i27.tinypic.com/657uc1.png

答案 2 :(得分:0)

如果网格是轴对齐的:

  1. 找出线方程
  2. 计算交点 直接使用网格 line的x或y作为固定变量
  3. 如果网格是规则的,则每条水平线的交点之间的距离将相同。垂直线也是如此。在这种情况下,你可以用dx和dy做一个简单的迭代算法。