c++ - 比较后选择最佳变量
问题描述
肯定有人问过这个问题,但我不知道如何制定我的研究以获得相关结果。
在我的问题中,我在飞机上有一个点 A 和其他几个点 B、C ...。我想比较 AB、AC、... 之间的距离并返回最近的点,例如 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;
}
解决方案
您可以将数字(/坐标)放入容器(例如std::array
)中,并用于std::min_element
查找“从”点(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)
平面距离度量。