public Area(string name, double latitude, double longitude, double radius, string tag) { this.name = name; this.centre = new GeoLocCoordinates((float)latitude, (float)longitude); this.radius = radius; this.tag = tag; }
public float EuclideanDistanceBetweenPoints(GeoLocCoordinates pointA, GeoLocCoordinates pointB) { float Ax = pointA.latitude; float Ay = pointA.longitude; float Bx = pointB.latitude; float By = pointB.longitude; return(Mathf.Sqrt(Mathf.Pow(Mathf.Abs(Ax - Bx), 2) + Mathf.Pow(Mathf.Abs(Ay - By), 2))); }
void InitialSetup() { Debug.Log("Initial Setup of GeoLocManager --> Default area"); // Valores iniciales por defecto (area Default) defaultArea = allAreas[0]; currentArea = defaultArea; currentCoords = new GeoLocCoordinates(); Input.location.Start(); UpdateCoods(); //Pone las coordenadas actuales al inicializarse y sitúa el juego }
/// <summary> /// Devuelve si un punto está dentro de un area. Si el parámetro de area es el por defecto, devuelve falso. /// </summary> /// <param name="point"></param> /// <param name="area"></param> /// <returns></returns> bool PointInsideArea(GeoLocCoordinates point, Area area) { //Debug.Log(point + "inside " + area); bool isInsideArea = false; if (!area.Equals(defaultArea)) { isInsideArea = DistanceBetweenPoints(point, area.centre) <= area.radius; } // Un punto está dentro de un círculo si la distancia desde él hasta el centro es menor o igual que r (radio) return(isInsideArea); }
public float DistanceBetweenPoints(GeoLocCoordinates pointA, GeoLocCoordinates pointB) { var d1 = pointA.latitude * (Math.PI / 180.0); var num1 = pointA.longitude * (Math.PI / 180.0); var d2 = pointB.latitude * (Math.PI / 180.0); var num2 = pointB.longitude * (Math.PI / 180.0) - num1; var d3 = Math.Pow(Math.Sin((d2 - d1) / 2.0), 2.0) + Math.Cos(d1) * Math.Cos(d2) * Math.Pow(Math.Sin(num2 / 2.0), 2.0); double doubleDistance = 6376500.0 * (2.0 * Math.Atan2(Math.Sqrt(d3), Math.Sqrt(1.0 - d3))); float distance = (float)doubleDistance; //Debug.Log("La distancia entre el punto " + pointA + " y el punto " + pointB + " es: " + distance); return(distance); }