Ответ
Расстояние вычисляется по формуле:
distance = sqrt((x2 - x1)² + (y2 - y1)²).
Базовая реализация:
#include <cmath> // для std::sqrt, std::hypot
#include <iostream>
struct Point {
double x;
double y;
};
double distance_simple(const Point& a, const Point& b) {
double dx = b.x - a.x;
double dy = b.y - a.y;
return std::sqrt(dx * dx + dy * dy);
}
int main() {
Point p1{1.0, 2.0};
Point p2{4.0, 6.0};
std::cout << "Distance: " << distance_simple(p1, p2) << std::endl; // 5.0
return 0;
}
Практические улучшения и замечания:
- Используйте
std::hypot(C++11): Эта функция специально предназначена для вычисления гипотенузы, она предотвращает переполнение и потерю точности.double distance_better(const Point& a, const Point& b) { return std::hypot(b.x - a.x, b.y - a.y); } - Избегайте извлечения квадратного корня, если это возможно: Во многих алгоритмах (например, для сравнения расстояний) достаточно квадрата расстояния, что экономит ресурсы.
double squared_distance(const Point& a, const Point& b) { double dx = b.x - a.x; double dy = b.y - a.y; return dx * dx + dy * dy; } // Сравнение: if (squared_distance(p1, p2) < radius*radius) ... - Шаблонная реализация для разных типов данных:
template<typename T> auto distance(const T& x1, const T& y1, const T& x2, const T& y2) -> decltype(std::hypot(x1, y1)) { return std::hypot(x2 - x1, y2 - y1); } // Работает с float, double, long double. - Для целочисленных координат: Используйте
doubleилиlong doubleдля результата, чтобы избежать потери точности, но будьте осторожны с переполнением при вычислении квадратов больших чисел (используйтеlong longдля промежуточных вычислений).