我有一个一维的网格。它的间距是一个浮点数。我也有一个带有浮点坐标的点。我需要找到它到最近的网格点的距离。
例如:

            0.12
             |
             *
 |---------|---------|---------|---------|---------|
 0        0.1       0.2       0.3       0.4       0.5

结果将是-0.02,因为最接近的点在它后面。
但是如果是
                -0.66
                  |
                  *
 |---------|---------|---------|---------|---------|
-1       -0.8      -0.6      -0.4      -0.2        0

结果将是0.06。如您所见,它的浮点数可以是负数。
我尝试了以下方法:
float spacing = ...;
float point = ...;

while(point >= spacing) point -= spacing;
while(point < 0) point += spacing;

if(std::abs(point - spacing) < point) point -= spacing;

它有效,但是我敢肯定有一种没有循环的方法

最佳答案

让我们首先计算左侧和右侧的最近点,如下所示:

leftBorder = spacing * floor(point/spacing);
rightBorder = leftBorder + spacing;

那么距离很简单:
if ((point - leftBorder) < (rightBorder - point))
    distance = leftBorder - point;
else
    distance = rightBorder - point;

请注意,我们可以通过上限找到最接近的点:
rightBorder = spacing * ceil(point/spacing);
leftBorder = rightBorder - spacing;

关于c++ - 获取网格上最接近的点到点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8346452/

10-13 06:29