algorithm - 二维网格上的基础数学

标签 algorithm math

想象一下 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;
    }
}

我觉得这可以在不检查每个标记的情况下完成,因为标记的间距是均匀的,而且我们知道标记的总数。但是,当涉及到必要的除法等时,我一片空白。

最佳答案

假设有 n标记 x<sub>0</sub> ... x<sub>n-1</sub>x<sub>i</sub> = x<sub>0</sub> + 10 * i .然后,离一个点最近的xi = min(n-1, max(0, round((x - x<sub>0</sub>) / 10))) 给出.

这比其他答案更笼统,因为它处理了第一个标记不在 x<sub>0</sub> = 0 的情况。 ,以及 x 的情况在场外。

关于algorithm - 二维网格上的基础数学,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12918781/

相关文章:

algorithm - 在已经失去 2 个或更多 child 后升级节点

java - 给定 Integer n 和 Double x。计算 : sin x + sinsin x +. ..+sinsin...sinx。其中n——罪的数目

Python 3.3.4。如何交换数组中的值

algorithm - 迭代生成自然数的排列

arrays - 算法:根据约束对数组中的对象进行排序

algorithm - 如何找到无向图中的所有多边形?

ruby - 这个方法在ruby中如何使用自己的方法呢?

javascript - 在 Javascript 中将 Math.exp() 与 BigDecimal 一起用于大型 float

java - Java数据结构的空间复杂度

javascript - 在 JavaScript 中使用超限序数