找到最近的一条线

时间:2013-03-19 00:28:51

标签: algorithm math geometry

想象一下原点的直线。旋转和 反射很容易,假设斜率在0到1的范围内。 我们在笛卡尔平面上有一个整数点的网格。 我想找到大于0且< = D的网格点 线路最接近。

简单的方法是从1 .. D中的每个x,找到上面的点和 在线下方并计算到线的垂直距离。 这将需要2 x D比较才能找到最小值。

这不错,但我试图提出一种日志(D)方法。 有吗?

同样的问题是找到最接近的理性 数n / d,其中d <= D。

2 个答案:

答案 0 :(得分:1)

这个问题似乎与您的问题相同:Finding the closest integer fraction to a given random real

接受的答案使用了Farey Sequence

还链接到此interesting blog post

答案 1 :(得分:0)

不是完整的答案,而是在某些情况下的优化:如果线的斜率是有理数,则会有重复,如果D大于分母,则允许您查看更少的点。

例如:如果坡度为12/17,那么您不需要从原点看超过17个点。之后它会重复。

当然,如果D&lt;在这个例子中,没有任何好处。

另外,如果你的斜率为π,那你就不幸了......