C++에서 두 점 사이의 거리 계산

Jinku Hu 2023년10월12일
  1. std::sqrtstd::pow함수를 사용하여 C++에서 두 점 사이의 거리 계산
  2. std::hypot함수를 사용하여 C++에서 두 점 사이의 거리 계산
C++에서 두 점 사이의 거리 계산

이 기사에서는 C++에서 두 점 사이의 거리를 계산하는 방법을 소개합니다.

std::sqrtstd::pow함수를 사용하여 C++에서 두 점 사이의 거리 계산

일반적으로 피타고라스 정리를 적용하여 두 점 사이의 거리를 계산할 수 있습니다. 따라서 두 점의xy매개 변수를 알고 있다면 두 점 사이의 거리는 수평 및 수직 거리의 합에서 제곱근과 같으며 각각2의 거듭 제곱으로 올립니다. 수평 및 수직 거리 자체는 후자가 빗변 인 두 점을 연결하는 선 주위에 직각 삼각형을 구성하여 쉽게 계산할 수 있습니다.

이 경우,std네임 스페이스 아래에서 C++에서 사용할 수있는 C 표준 수학 라이브러리 함수, 즉 주어진 인수의 제곱근을 계산하는sqrt함수와 주어진 값으로 올린 수를 계산하는pow를 사용합니다. 이 두 함수는 모두 부동 소수점 숫자를float또는double유형으로 반환합니다.

#include <cmath>
#include <iomanip>
#include <iostream>
#include <vector>

using std::copy;
using std::cout;
using std::endl;
using std::vector;

double calculateDistance(std::pair<int, int> &x, std::pair<int, int> &y) {
  return sqrt(pow(x.first - y.first, 2) + pow(x.second - y.second, 2));
}

double calculateDistance(std::pair<double, double> &x,
                         std::pair<double, double> &y) {
  return sqrt(pow(x.first - y.first, 2) + pow(x.second - y.second, 2));
}

int main() {
  vector<std::pair<int, int>> vec = {
      {3, 4},
      {4, 3},
  };

  cout << "Distance between points (" << vec[0].first << ", " << vec[0].second
       << ") and (" << vec[1].first << ", " << vec[1].second << ") is "
       << calculateDistance(vec[0], vec[1]) << endl;

  return EXIT_SUCCESS;
}

출력:

Distance between points (3, 4) and (4, 3) is 1.41421

다음 예제 코드에 설명 된대로 부동 소수점 숫자로 표시된 좌표가있는 점에 대해 함수의 오버로드 된 변형을 구현할 수 있습니다.

#include <cmath>
#include <iomanip>
#include <iostream>
#include <vector>

using std::copy;
using std::cout;
using std::endl;
using std::vector;

double calculateDistance(std::pair<int, int> &x, std::pair<int, int> &y) {
  return sqrt(pow(x.first - y.first, 2) + pow(x.second - y.second, 2));
}

double calculateDistance(std::pair<double, double> &x,
                         std::pair<double, double> &y) {
  return sqrt(pow(x.first - y.first, 2) + pow(x.second - y.second, 2));
}

int main() {
  vector<std::pair<double, double>> vec2 = {
      {4.0, 4.5},
      {9.0, 4.5},
  };

  cout << "Distance between points (" << vec2[0].first << ", " << vec2[0].second
       << ") and (" << vec2[1].first << ", " << vec2[1].second << ") is "
       << calculateDistance(vec2[0], vec2[1]) << endl;

  return EXIT_SUCCESS;
}

출력:

Distance between points (4, 4.5) and (9, 4.5) is 5

std::hypot함수를 사용하여 C++에서 두 점 사이의 거리 계산

또는 수학 라이브러리 함수 인std::hypot을 사용하여 두 개 또는 세 개의 숫자 제곱합의 제곱근을 계산할 수 있습니다. 이 방법은 최종 사용자가 직접 구현하기 어려운 강력한 구현 및 오류보고를 보장하므로 거리를 계산하는 데 권장되는 방법입니다. 해당 좌표의 차이를 인수로 전달하고 반환 값을 계산 결과로 사용해야합니다.

#include <cmath>
#include <iomanip>
#include <iostream>
#include <vector>

using std::copy;
using std::cout;
using std::endl;
using std::vector;

int main() {
  vector<std::pair<double, double>> vec2 = {
      {4.0, 4.5},
      {9.0, 4.5},
  };

  cout << "Distance between points (" << vec2[0].first << ", " << vec2[0].second
       << ") and (" << vec2[1].first << ", " << vec2[1].second << ") is "
       << std::hypot(vec2[0].first - vec2[1].first,
                     vec2[0].second - vec2[1].second)
       << endl;

  return EXIT_SUCCESS;
}

출력:

Distance between points (4, 4.5) and (9, 4.5) is 5
작가: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

관련 문장 - C++ Math