2D画面に表示されるアメリカンフットボール競技場を想像してみてください。フィールドには10ヤードごとにマーカーがあります。各マーカーは、フィールドの高さにまたがる単なる垂直線です。誰かがあなたにフィールド上の(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;
}
}
マーカーの間隔が均一で、マーカーの総数がわかっているので、すべてのマーカーをチェックしなくてもこれを実行できると思います。ただし、必要な分割等については空白を描いています。