地球の曲率を説明するには、直線距離の代わりにハーバーニン式を使用できます。Haversineフォーミュラは、地球などの球体上の2つのポイント間の大きな円距離を計算します。これが更新されたコードです：

#include <cmath>

const double arearthradius = 6371.0;//キロメートルの地球の半径

double Toradians（2倍）{
return gegrees * m_pi / 180.0;
}

2倍の距離（ダブルx1、double y1、double x2、double y2）{
double lat1 = toradians（x1）;
double lat2 = toradians（x2）;
double lon1 = toradians（y1）;
double lon2 = toradians（y2）;
double deltalat = lat2 -lat1;
double deltalon = lon2 -lon1;
double a = sin（deltalat / 2） * sin（deltalat / 2） +
cos（lat1） * cos（lat2） * sin（deltalon / 2） * sin（deltalon / 2）;
double c = 2 * atan2（sqrt（a）、sqrt（1 -a））;
return arearthradius * c;
}
To account for the curvature of the Earth, you can use the haversine formula instead of straight-line distance. The haversine formula calculates the great-circle distance between two points on a sphere, such as the Earth. Here is the updated code:

#include <cmath>

const double earthRadius = 6371.0; // Earth's radius in kilometers

double toRadians(double degrees) {
return degrees * M_PI / 180.0;
}

double distance(double x1, double y1, double x2, double y2) {
double lat1 = toRadians(x1);
double lat2 = toRadians(x2);
double lon1 = toRadians(y1);
double lon2 = toRadians(y2);
double deltaLat = lat2 - lat1;
double deltaLon = lon2 - lon1;
double a = sin(deltaLat / 2) * sin(deltaLat / 2) +
cos(lat1) * cos(lat2) * sin(deltaLon / 2) * sin(deltaLon / 2);
double c = 2 * atan2(sqrt(a), sqrt(1 - a));
return earthRadius * c;
}