private static void GetTiltHeadingAndDistanceFromCameraAndTargetPosition(LatLong interestPoint, LatLongAltitude cameraPosition, out double tiltDegrees, out double headingDegrees, out double distance) { double distanceAlongGround = LatLong.EstimateGreatCircleDistance(interestPoint, cameraPosition.GetLatLong()); double cameraAltitude = cameraPosition.GetAltitude(); distance = Math.Sqrt(distanceAlongGround * distanceAlongGround + cameraAltitude * cameraAltitude); headingDegrees = cameraPosition.BearingTo(interestPoint); tiltDegrees = MathsHelpers.Rad2Deg(Math.PI * 0.5 - Math.Atan2(cameraAltitude, distanceAlongGround)); }
void Update() { if (active.Count > 0) { t.text = active[0].name + ' ' + LatLong.EstimateGreatCircleDistance(active[0].GetPosition(), GPS.Instance.latLong); } else { t.text = "empty list."; } }
private Landmark findClosest() { double minDistance = double.MaxValue; Landmark closest = null; foreach (Landmark l in GameController.Instance.originalLandmarks) { double distance = LatLong.EstimateGreatCircleDistance(GetPosition(), l.getPosition()); if (distance < minDistance) { minDistance = distance; closest = l; } } return(closest); }
// Use this for initialization void Start() { List <LatLong> list = new List <LatLong>(); list.Add(new LatLong(Translation.Instance.getStartLat(), Translation.Instance.getStartLon())); foreach (GameLocation l in GameController.Instance.assets) { list.Add(l.getClosest().getPosition()); } double distance = LatLong.EstimateGreatCircleDistance(list[0], list[1]); Debug.Log("Start - " + GameController.Instance.assets[0].getClosest().getName() + ": " + LatLong.EstimateGreatCircleDistance(list[0], list[1])); for (int i = 1; i < list.Count - 1; i++) { distance += LatLong.EstimateGreatCircleDistance(list[i], list[i + 1]); Debug.Log(GameController.Instance.assets[i - 1].getClosest().getName() + " - " + GameController.Instance.assets[i].getClosest().getName() + ": " + LatLong.EstimateGreatCircleDistance(list[i], list[i + 1])); } Debug.Log("Total Distance: " + distance); }
public List <Landmark> translateLandmark() { int numLocations = GameController.Instance.originalLandmarks.Count; List <Landmark> results = new List <Landmark>(); //Results starts as originals foreach (Landmark l in GameController.Instance.originalLandmarks) { results.Add(l); } List <List <Landmark> > candidates = new List <List <Landmark> >(); float[] costs = new float[numLocations]; for (int i = 0; i < numLocations; i++) { costs[i] = float.MaxValue; } for (int i = 0; i < numLocations; i++) { //Assign 10 similar landmarks for each original candidates.Add(GoogleAPI.Instance.getSimilar(GameController.Instance.originalLandmarks[i])); //Algorithm C - Average Distance between original landmark and previous landmark double prevDistanceOriginal; if (i == 0) { prevDistanceOriginal = LatLong.EstimateGreatCircleDistance(OriginalLocations.Instance.getOriginalStart(), GameController.Instance.originalLandmarks[i].getPosition()); } else { prevDistanceOriginal = LatLong.EstimateGreatCircleDistance(GameController.Instance.originalLandmarks[i].getPosition(), GameController.Instance.originalLandmarks[i - 1].getPosition()); } //Algorithm A - Determine average distance between original landmark and all other original landmarks //double avDistanceOriginal = 0.0; //for (int j = 0; j < numLocations; j++) //{ // avDistanceOriginal += LatLong.EstimateGreatCircleDistance(GameController.Instance.originalLandmarks[i].getPosition(), GameController.Instance.originalLandmarks[j].getPosition()); //} //avDistanceOriginal /= numLocations; for (int j = 0; j < candidates[i].Count; j++) { //Algorithm B -Distance between candidate and starting position compared with distance between original landmark and original starting position //double costB = LatLong.EstimateGreatCircleDistance(candidates[i][j].getPosition(), startPosition) - // LatLong.EstimateGreatCircleDistance(GameController.Instance.originalLandmarks[i].getPosition(), OriginalLocations.Instance.getOriginalStart()); //double avDistanceTranslate = 0.0; //Algorithm A -Determine average distance between candidate and the other locations that have already been set //for (int l = 0; l < i; l++) //{ // avDistanceTranslate += LatLong.EstimateGreatCircleDistance(candidates[i][j].getPosition(), results[l].getPosition()); //} //if (i > 0) // avDistanceTranslate /= i; //Algorithm C - Distance between candidate and previous set location double prevDistanceTranslate; if (i == 0) { prevDistanceTranslate = LatLong.EstimateGreatCircleDistance(startPosition, candidates[i][j].getPosition()); } else { prevDistanceTranslate = LatLong.EstimateGreatCircleDistance(candidates[i][j].getPosition(), results[i - 1].getPosition()); } double costC = prevDistanceTranslate - prevDistanceOriginal; //double costA = avDistanceTranslate - avDistanceOriginal; float cost = Mathf.Abs((float)costC); if (cost < costs[i] && gameSpace.inSpace(candidates[i][j].getPosition()) && !duplicateChecker(candidates[i][j], results)) { results.RemoveAt(i); results.Insert(i, candidates[i][j]); costs[i] = Mathf.Abs((float)cost); } } } return(results); }