想象一个显示在 2D 屏幕上的美式足球场。场地每十码有一个标记。每个标记只是跨越场地高度的一条垂直线。假设有人在场上给了你一个 (x, y) 位置。如何在不使用循环的情况下确定最接近 (x, y) 位置的垂直标记?
目前我正在使用这样的简单循环:
// want marker closest to x
float x = randomFloat();
double minDistance = Double.MaxValue;
Marker closestMarker = null;
foreach (Marker m in markers) {
double d = ABS(x - m.x);
if (d < minDistance) {
minDistance = d;
closestMarker = m;
}
}
我觉得这可以在不检查每个标记的情况下完成,因为标记是均匀间隔的,而且我们知道总标记数。但是,在必要的划分等方面,我是空白的。