想象一下原点的直线。旋转和 反射很容易,假设斜率在0到1的范围内。 我们在笛卡尔平面上有一个整数点的网格。 我想找到大于0且< = D的网格点 线路最接近。
简单的方法是从1 .. D中的每个x,找到上面的点和 在线下方并计算到线的垂直距离。 这将需要2 x D比较才能找到最小值。
这不错,但我试图提出一种日志(D)方法。 有吗?
同样的问题是找到最接近的理性 数n / d,其中d <= D。
答案 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;在这个例子中,没有任何好处。
另外,如果你的斜率为π
,那你就不幸了......