コード例 #1
0
ファイル: CameraApi.cs プロジェクト: huayyang/HackdayDemo
        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));
        }
コード例 #2
0
 void Update()
 {
     if (active.Count > 0)
     {
         t.text = active[0].name + ' ' + LatLong.EstimateGreatCircleDistance(active[0].GetPosition(), GPS.Instance.latLong);
     }
     else
     {
         t.text = "empty list.";
     }
 }
コード例 #3
0
    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);
    }
コード例 #4
0
ファイル: Tester.cs プロジェクト: liamsscreenname/MscProject
    // 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);
    }
コード例 #5
0
    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);
    }