微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

比较后选择最佳变量

如何解决比较后选择最佳变量

这个问题确实被问到了,但我不知道如何制定我的研究以获得相关结果。

在我的问题中,我在平面上有一个点 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)

平面距离度量。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。