示例#1
0
        public void RecreateTest()
        {
            int         rows = 8;
            int         cols = 10;
            TerrainInfo info = new TerrainInfo()
            {
                SouthWestLatLong         = new Vector2(-37, 174),
                NorthEastLatLong         = new Vector2(-36.999f, 174.001f),
                DegreesLatitudePerPixel  = 0.001 / (double)rows,
                DegreesLongitudePerPixel = 0.001 / (double)cols
            };

            float[,] altInMetres = info.CreateFlatAltitudes(rows, cols);
            Terrain terrain = new Terrain();

            terrain.Recreate(info, altInMetres);

            SquareGrid grid = new SquareGrid(rows, cols, 1, 1);

            Assert.AreEqual(rows, terrain.LatRows);
            Assert.AreEqual(cols, terrain.LongColumns);
            Vector3 centreVertex = terrain.Vertices[terrain.Vertices.Length / 2];

            VectorAssertions.AreEqual(new Vector3(), centreVertex, 0.1, "Centre vertex does not match");
        }
示例#2
0
        public void LatToECEFAtNZTest()
        {
            Vector3 p1 = new Vector3(-37, 174, 0);
            Vector3 p2 = new Vector3(-36, 173, 0);
            Vector3 e1 = EarthConverter.LatLongAltToECEF(p1);
            Vector3 e2 = EarthConverter.LatLongAltToECEF(p2);
            Vector3 d  = e2 - e1;

            VectorAssertions.AreEqual(new Vector3(-55518, 96492, 89143), d, 100);
        }
示例#3
0
        public void LatToECEFAt0Test()
        {
            Vector3 p1 = new Vector3(0, 0, 0);
            Vector3 p2 = new Vector3(1, 0, 0);
            Vector3 e1 = EarthConverter.LatLongAltToECEF(p1);
            Vector3 e2 = EarthConverter.LatLongAltToECEF(p2);
            Vector3 d  = e2 - e1;

            VectorAssertions.AreEqual(new Vector3(0, 0, 111000), d, 1000);
        }
示例#4
0
        public void RotateECEFRightAt0Test()
        {
            Vector3 p1 = new Vector3(0, 0, 0);
            Vector3 p2 = new Vector3(0, 1, 0);
            Vector3 e1 = EarthConverter.LatLongAltToECEF(p1);
            Vector3 e2 = EarthConverter.LatLongAltToECEF(p2);
            Vector3 de = e2 - e1;
            Vector3 dr = EarthConverter.RotateECEF(de, 0, 0);

            VectorAssertions.AreEqual(new Vector3(0, 0, 110000), dr, 1400);
        }
示例#5
0
        public void RotateECEFUpAtNZTest()
        {
            Vector3 p1 = new Vector3(-37, 174, 0);
            Vector3 p2 = new Vector3(-36, 173, 100);
            Vector3 e1 = EarthConverter.LatLongAltToECEF(p1);
            Vector3 e2 = EarthConverter.LatLongAltToECEF(p2);
            Vector3 de = e2 - e1;
            Vector3 dr = EarthConverter.RotateECEF(de, p1.X, p1.Y);

            VectorAssertions.AreEqual(new Vector3(110490, -1496, -90160), dr, 100);
        }
示例#6
0
        public void IncreaseAzimuth()
        {
            AzElCamera cam = new AzElCamera();
            Vector3    eye = new Vector3(-1, 0, 0);

            cam.LookAt(eye, new Vector3(0, 0, 0));
            Assert.AreEqual(0, cam.Azimuth, 0.01);

            cam.Azimuth += Math.PI / 2;
            VectorAssertions.AreEqual(new Vector3(-1, 0, 1), cam.Target, 0.01);
            Assert.AreEqual(Math.PI / 2, cam.Azimuth, 0.01);
        }
示例#7
0
        public void MoveEast()
        {
            // start facing north, then move east.
            AzElCamera cam = new AzElCamera();
            Vector3    eye = new Vector3(0, 0, -4);

            cam.LookAt(eye, new Vector3(4, 0, -4));
            Assert.AreEqual(0, cam.Azimuth);
            cam.MoveSideways(4);
            VectorAssertions.AreEqual(new Vector3(0, 0, 0), cam.Eye, 0.01);
            Assert.AreEqual(0, cam.Azimuth, 0.01);
        }
示例#8
0
        public void MoveNorth()
        {
            // start facing north, then move forwards.
            AzElCamera cam = new AzElCamera();
            Vector3    eye = new Vector3(-4, 0, 0);

            cam.LookAt(eye, new Vector3());
            Assert.AreEqual(0, cam.Azimuth);
            cam.MoveForwards(4);
            VectorAssertions.AreEqual(new Vector3(0, 0, 0), cam.Eye, 0.01);
            Assert.AreEqual(0, cam.Azimuth, 0.01);
        }
示例#9
0
        public void LookDiagonal()
        {
            AzElCamera cam = new AzElCamera();
            float      d   = (float)(1 / Math.Sqrt(3));
            Vector3    eye = new Vector3(-d, d, -d);

            cam.LookAt(eye, new Vector3());
            double v = cam.Azimuth;
            double t = Math.PI / 4;

            Assert.AreEqual(t, v, 0.01, "Looking diagonally: " + v + " != " + t);
            VectorAssertions.AreEqual(new Vector3(0, 0, 0), cam.Target, 0.01);
        }
示例#10
0
        public void CalculateNormalsCubeTest()
        {
            Model cube = new ColouredCube();

            Vector3[] normals = NormalModel.CalculateNormals(cube);
            Vector3   sum     = new Vector3();

            foreach (Vector3 v in normals)
            {
                sum += v;
            }

            VectorAssertions.AreEqual(new Vector3(), sum, 0.0001);
        }
示例#11
0
        public void LookEastTest()
        {
            AzElCamera cam = new AzElCamera();
            Vector3    eye = new Vector3(0, 0, -1);

            cam.LookAt(eye, new Vector3());
            double v = cam.Azimuth;
            double t = Math.PI / 2;

            Assert.AreEqual(t, v, 0.01, "Azimuth wrong");
            v = cam.Elevation;
            t = 0;
            Assert.AreEqual(t, v, 0.01, "Elevation wrong");
            VectorAssertions.AreEqual(new Vector3(0, 0, 0), cam.Target, 0.01);
        }
示例#12
0
        public void MoveDiagonal()
        {
            // start facing northeast.
            AzElCamera cam = new AzElCamera();
            Vector3    eye = new Vector3(-4, 0, -4);

            cam.LookAt(eye, new Vector3(0, 0, 0));
            Assert.AreEqual(Math.PI / 4, cam.Azimuth, 0.01);
            // Move forwards
            cam.MoveForwards(Math.Sqrt(32));
            VectorAssertions.AreEqual(new Vector3(0, 0, 0), cam.Eye, 0.01, "Move Forwards failed");
            Assert.AreEqual(Math.PI / 4, cam.Azimuth, 0.01);
            // Move sidways, left
            cam.MoveSideways(-Math.Sqrt(32));
            VectorAssertions.AreEqual(new Vector3(4, 0, -4), cam.Eye, 0.01, "Move Sideways failed");
            Assert.AreEqual(Math.PI / 4, cam.Azimuth, 0.01);
        }
示例#13
0
        public void CalculateNormalsGridTest()
        {
            Model grid = new SquareGrid(2, 2, 1, 1);

            Vector3[] normals = NormalModel.CalculateNormals(grid);
            foreach (Vector3 v in normals)
            {
                if (float.IsNaN(v.X))
                {
                    Assert.IsTrue(float.IsNaN(v.Y));
                    Assert.IsTrue(float.IsNaN(v.Z));
                }
                else
                {
                    VectorAssertions.AreEqual(Vector3.UnitY, v, 0.0001);
                }
            }
        }
示例#14
0
        public void LookSouthTest()
        {
            AzElCamera cam = new AzElCamera();
            Vector3    eye = new Vector3(1, 0, 0);

            cam.LookAt(eye, new Vector3());
            double v = cam.Azimuth;

            if (v < 0)
            {
                v = v + 2 * Math.PI;
            }
            double t = Math.PI;

            Assert.AreEqual(t, v, 0.01, "Azimuth wrong");
            v = cam.Elevation;
            t = 0;
            Assert.AreEqual(t, v, 0.01, "Elevation wrong");
            VectorAssertions.AreEqual(new Vector3(0, 0, 0), cam.Target, 0.01);
        }