代码之家  ›  专栏  ›  技术社区  ›  Graviton

快速找到线与网格的交点

  •  8
  • Graviton  · 技术社区  · 14 年前

    是否允许我找到一条直线和一个网格之间的所有交点?(我知道,交集圆不是按比例绘制的)

    一种蛮力的方法是计算非常交叉的 x-y grid with the line,但此算法效率极低( o(m*n) ,where m is the number of x grid and n is the number of y grid)。.

    我在找一个更好的算法。

    一种蛮力的方法是计算 x-y 网格与线,但该算法效率非常低( O(m*n) 在哪里 m x 网格和 n y 网格)。

    我在找一个更好的算法。

    3 回复  |  直到 7 年前
        1
  •  6
  •   celion    14 年前

    听起来你需要一个 Digital Differential Analyzer Bresenham's line algorithm . Bresenham是用于在位图上绘制线条的相同算法;在这种情况下,为像素着色相当于检查该正方形中的冲突。

        2
  •  6
  •   dtb    14 年前

    我不确定我真的理解这个问题。这就是你想找的吗?

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

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

        3
  •  0
  •   jackrabbit    14 年前

    如果网格是轴对齐的:

    1. 找出直线方程
    2. 计算交叉点 直接使用任一网格 行的x或y作为固定变量

    如果网格是规则的,则与每条水平线相交的距离将相同。垂直线也是如此。在这种情况下,你可以用dx和dy做一个简单的迭代算法。