问题描述
这个问题确实被问到了,但我不知道如何制定我的研究以获得相关结果。
在我的问题中,我在平面上有一个点 A 和其他几个点 B、C...。 我想比较 A-B、A-C、... 之间的距离并返回最近的点,例如 B。
除了我的方式不是很优化,也许你有更好的想法。
这是我的一小段代码,总结了我所说的内容 这里是我的一小段代码,总结了我所说的内容,我将二维向量的点替换为简单的 int 以简化解释。
int A(5);
int B(7);
int C(-3);
int D(9);
int i(1);
int best_dist = A-B;
if((A-C) < best_dist)
{
best_dist = A-C;
i = 2;
}
if((A-D) < best_dist)
{
best_dist = A-D;
i = 3;
}
switch(i){
case 1:
return B;
break;
case 2:
return C;
break;
case 3:
return D;
break;
}
解决方法
您可以将数字 (/coordinates) 放入容器中(例如 std::array
)并使用 std::min_element
查找“from”指向的成员(A
,在您的示例)具有最小的绝对距离。例如:
#include <algorithm> // std::min_element
#include <array>
#include <cmath> // std::abs
#include <iostream>
int main() {
constexpr int from{5};
constexpr std::array<int,3> candidates{7,-3,9};
// consider using an != end() check on the resulting
// iterator if you do not know the container to be non-empty.
int const closest_point_on_plane = *std::min_element(
candidates.begin(),candidates.end(),[](int lhs,int rhs) {
return std::abs(from - lhs) < std::abs(from - rhs);
});
std::cout << closest_point_on_plane; // 7
}
对于飞机的实际用例,您将不得不更换
std::abs(from_point_on_line - to_point_on_line)
在与合适的 lambda 比较中使用的直线距离度量
distance(from_point_on_plane,to_point_on_plane)
平面距离度量。