Расстояние между точками
|
|
bumer7721 | Дата: Пятница, 23 Марта 2012, 19:14 | Сообщение # 1 |
был не раз
Сейчас нет на сайте
| Рассчитать расстояние между точками заданными географическими координатами.
тоесть, есть 2 точки А и В координаты А(latitude,longitude) и В(latitude,longitude)
latitude-шырота longitude- долгота
нужно получить расстояние между етими точками точками в милях
И ещо, нужно вычислить окружность по компасу между етими географическими точками.
Уменя эсть код функции на java вотCode public double distanceTo(GeoPoint gp) { if (gp!=null){ double pi_div_180=Math.PI/180; double lat1=latitude*pi_div_180; double lon1=longitude*pi_div_180; double lat2=gp.latitude*pi_div_180; double lon2=gp.longitude*pi_div_180; double Rz=6371*0.621371192;//радиус земли в милях double d=Math.sin(lat1)*Math.sin(lat2)+Math.cos(lat1)*Math.cos(lat2)*Math.cos(lon1-lon2); d=Math.acos(d); d=d*Rz; return d;//*/ } throw new RuntimeException("Not yet implemented"); } но она щитает не всегда верно, не могу поняь причину....
Буду рад любой инфе....
Зарание спасибо!!!!
Сообщение отредактировал bumer7721 - Пятница, 23 Марта 2012, 19:15 |
|
| |
M1ghtMortal | Дата: Пятница, 23 Марта 2012, 21:20 | Сообщение # 2 |
участник
Сейчас нет на сайте
| bumer7721, На счет ошибок в алгоритме ничего сказать не могу, но дели не на 180, а на 180.0f.
Java/C++/Unity(C#) Programmer. Мой блог MightMortal.RU
|
|
| |
Snake174 | Дата: Понедельник, 02 Апреля 2012, 12:38 | Сообщение # 3 |
участник
Сейчас нет на сайте
| Code float getVectorLength( float dx, float dy ) { return sqrt( dx * dx + dy * dy ); }
float getDistanceBetweenPoints( float x1, float y1, float x2, float y2 ) { return getVectorLength( x2 - x1, y2 - y1 ); }
Не следует обманывать инспектора Pipmak Assistant Love2D Exporter Love2D-Helpers Old Consoles Games
Сообщение отредактировал Snake174 - Понедельник, 02 Апреля 2012, 12:39 |
|
| |
M1ghtMortal | Дата: Четверг, 05 Апреля 2012, 13:52 | Сообщение # 4 |
участник
Сейчас нет на сайте
| Snake174, ТС писал про расстояние в милях по географическим координатам(широте и долготе). А ты дал просто нахождение расстояние между 2 точками на плоскости.
Java/C++/Unity(C#) Programmer. Мой блог MightMortal.RU
|
|
| |
GECK | Дата: Четверг, 05 Апреля 2012, 16:08 | Сообщение # 5 |
заслуженный участник
Сейчас нет на сайте
| bumer7721, а в каких случаях считает неверно?
Всё гениальное просто. И хреново работает.
|
|
| |
hero564 | Дата: Четверг, 03 Мая 2012, 00:00 | Сообщение # 6 |
Made in Ukraine
Сейчас нет на сайте
| GECK, все посложнее , я конечно в яве не шарю но по моему нужно длину дуги искать Добавлено (03.05.2012, 00:00) --------------------------------------------- или сектора, что там в пространстве
|
|
| |
Kamskii | Дата: Четверг, 03 Мая 2012, 09:53 | Сообщение # 7 |
Game ≠ Toy
Сейчас нет на сайте
| Действительно, тут обычная длина отрезка не подойдет, ибо Земля не плоская. Обычно для таких целей используют формулу гаверсинусов. Code a = sin²(Δlat/2) + cos(lat1)*cos(lat2)*sin²(Δlong/2) c = 2*atan2(√a, √(1−a)) d = R*c, где R - радиус Земли На Java код будет такой: Code public double distanceTo(GeoPoint gp1, GeoPoint gp2) { if (gp!=null){ int radius = 6371; // Километры double dLat = Math.toRadians(gp2.latitude - gp1.latitude); double dLong = Math.toRadians(gp2.longitude - gp1.longitude); double lat1 = Math.toRadians(gp1.latitude); double lat2 = Math.toRadians(gp2.latitude);
double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(lat1) * Math.cos(lat2) * Math.sin(dLong / 2) * Math.sin(dLong / 2); double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); return c * R;
|
|
| |