我在理解这个功能正在做什么时遇到了问题,我知道这与找到两点之间的距离有关,但我不确切地知道这是怎么回事......
double closestPoints(double points[], int n)
{
double closest = 100.0;
for (int p1 = 0; p1 < n; p1++)
{
for (int p2 = 0; p2 < n; p2++)
{
if (p1 != p2 && abs(points[p1] - points[p2]) < closest)
{
closest = abs(points[p1] - points[p2]);
}
}
}
return closest;
}
有人能帮我理解吗?
答案 0 :(得分:2)
好的,所以使用2个for-statements你只需选择所有点的组合(所以将每个点组合在一起)。
if(p1 != p2)
表示如果p1指向与p2相同的点,则忽略它们(因为您无法计算一点之间的距离。
abs(points[p1] - points[p2]) < closest
如果2个选定点之间的距离小于当前最小距离,则将当前最小距离设置为此距离。
PS。请注意abs(points[p1] - points[p2])
是计算线上点之间距离的公式。
答案 1 :(得分:0)
这段代码采用了一系列双打,找到了points
中哪一个最接近,并记录了它们的活动距离。而不是double closest = 100
你可以做double closest = abs(points[0] - points[1]);