Суббота, 23 Ноября 2024, 00:02

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Расстояние между точками
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)
---------------------------------------------
или сектора, что там в пространстве biggrin

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;
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг