我有一个一维的网格。它的间距是一个浮点数。我也有一个带有浮点坐标的点。我需要找到它到最近的网格点的距离。
例如:
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/