C# 快速找到直线和栅格之间的交点

C# 快速找到直线和栅格之间的交点,c#,geometry,C#,Geometry,是否存在允许我找到直线和网格之间所有交点的方法?(据我所知,相交圆不是按比例绘制的) 强力法是计算x-y网格与直线的交点,但该算法效率极低(O(m*n),其中m是x网格的数量,n是y网格的数量) 我正在寻找一个更好的算法 听起来你需要一个手术室。Bresenham是用于在位图上绘制线条的相同算法;在这种情况下,给像素着色相当于检查该正方形中的碰撞。我不确定我是否真正理解这个问题。这就是你想要的吗 如果栅格与轴对齐: 找出直线方程 计算交点 直接使用网格 线的x或y作为固定变量 如果栅格规

是否存在允许我找到直线和网格之间所有交点的方法?(据我所知,相交圆不是按比例绘制的)

强力法是计算
x-y
网格与直线的交点,但该算法效率极低(
O(m*n)
,其中
m
x
网格的数量,
n
y
网格的数量)


我正在寻找一个更好的算法

听起来你需要一个手术室。Bresenham是用于在位图上绘制线条的相同算法;在这种情况下,给像素着色相当于检查该正方形中的碰撞。

我不确定我是否真正理解这个问题。这就是你想要的吗


如果栅格与轴对齐:

  • 找出直线方程
  • 计算交点 直接使用网格 线的x或y作为固定变量

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

    网格应该是规则的吗?@Ignacio,是的,网格是规则的。我想要红线和网格线之间的每个交点。因此,这些点是
    (0,b)
    ((h-b)/m,h)
    (w,mw+b)
    (2w,2wm+b)
    ((2h-b)/m,2h)
    (3w,3wm+b)
    ,等等on@dtb,没有遗漏。但我需要一个有效的算法,对我来说,这就像是每个交叉口一次计算。我无法想象有比这更有效的了。@dtb,如果是这样的话,那将是非常低效的。假设你有一个100×100的网格,那么你必须在100×100的运算中运行。我答案中的网格由5条水平线和5条垂直线组成。红线在7处与网格线相交。要找到这7个交点,您最多需要进行10次计算,而不是25次。我相信这应该是公认的答案。使用像Bresenham这样的算法可以检查网格点,然后从那里可以更容易地计算出各个交点——水平和垂直分量都是已知的。