Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Haversine formula Unity

So I'm trying to use the haversine formula in Unity to get the distance between two different points (latitude and longitud given). The code is working (no errors) but I keep gettting a wrong result. I followed the entire formula so I don't really know where the math/code problem is. Any idea?

Here's the code:

 public float lat1 = 42.239616f;
 public float lat2 = -8.72304f;
 public float lon1 = 42.239659f;
 public float lon2 = -8.722305f;

 void operacion(){
 float R = 6371000; // metres
 float omega1 = ((lat1/180)*Mathf.PI);
 float omega2 = ((lat2/180)*Mathf.PI);
 float variacionomega1 = (((lat2 - lat1)/180)*Mathf.PI);
 float variacionomega2 = (((lon2 - lon1) / 180) * Mathf.PI);
 float a = Mathf.Sin(variacionomega1/2) * Mathf.Sin(variacionomega1/2) +
             Mathf.Cos(omega1) * Mathf.Cos(omega2) *
             Mathf.Sin(variacionomega2/2) * Mathf.Sin(variacionomega2/2);
 float c = 2 * Mathf.Atan2(Mathf.Sqrt(a), Mathf.Sqrt(1-a));

 float d = R * c;
 }
like image 593
Manuel Estévez Avatar asked Aug 23 '16 21:08

Manuel Estévez


1 Answers

I think this line is incorrect:

float c = 2 * Mathf.Atan2(Mathf.Sqrt(a), Mathf.Sqrt(1-a));

UPDATED:

The correct way would be:

float c = 2 * Mathf.Asin(Mathf.Sqrt(a));
like image 80
Adilson de Almeida Jr Avatar answered Oct 06 '22 22:10

Adilson de Almeida Jr