首页 > 解决方案 > 比较后选择最佳变量

问题描述

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

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

标签: c++optimizationcompare

解决方案


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

平面距离度量。


推荐阅读