比较后选择最佳变量



当然有人问我这个问题,但我不知道如何制定我的研究以获得相关结果。

在我的问题中,我有一个点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;
}

您可以将数字(/坐标(放入一个容器(比如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)

λ与适当的比较中使用的在线距离度量

distance(from_point_on_plane, to_point_on_plane)

平面上的距离度量。