比较后选择最佳变量
choose the best variable after comparing them
肯定有人问了这个问题,但我不知道如何制定我的研究以获得相关结果。
在我的问题中,我在平面上有一个点 A 和其他几个点 B、C...。
我想比较 A-B、A-C、... 和 return 最近点之间的距离,例如 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)
平面距离度量。
肯定有人问了这个问题,但我不知道如何制定我的研究以获得相关结果。
在我的问题中,我在平面上有一个点 A 和其他几个点 B、C...。 我想比较 A-B、A-C、... 和 return 最近点之间的距离,例如 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)
平面距离度量。