Exemplo n.º 1
0
        public void WorldToLocalTest()
        {
            var o   = new Orient3D();
            var two = Math.Sqrt(2.0) * 0.5;

            o.Q = QuaternionD.FromAxisAngle(new Vector3D(1, 1, 1), 77 * Math.PI / 180.0);

            var tstVec1 = new Vector3D(4, 4, 4);
            var answ1   = tstVec1 - o.M_1 * tstVec1;

            Assert.AreEqual(0d, answ1.GetLength(), 0.000001);

            o.Q = QuaternionD.FromAxisAngle(Vector3D.XAxis, -45 * Math.PI / 180.0);

            var tstVec2 = Vector3D.YAxis;
            var answ2   = new Vector3D(0, two, two) - o.M_1 * tstVec2;

            Assert.AreEqual(0d, answ2.GetLength(), 0.000001);

            var tstVec3 = Vector3D.ZAxis;
            var answ3   = new Vector3D(0, -two, two) - o.M_1 * tstVec3;

            Assert.AreEqual(0d, answ3.GetLength(), 0.000001);

            o.Q = QuaternionD.FromAxisAngle(Vector3D.ZAxis, 45 * Math.PI / 180.0);

            tstVec2 = Vector3D.XAxis;
            answ2   = new Vector3D(two, -two, 0) - o.M_1 * tstVec2;
            Assert.AreEqual(0d, answ2.GetLength(), 0.000001);

            tstVec3 = Vector3D.YAxis;
            answ3   = new Vector3D(two, two, 0) - o.M_1 * tstVec3;
            Assert.AreEqual(0d, answ3.GetLength(), 0.000001);
        }
Exemplo n.º 2
0
        public void RotateOZtoVecTest()
        {
            var    o   = new Orient3D();
            var    rnd = new Random();
            double min = -33d;
            double max = 33d;

            for (int i = 0; i < 333; i++)
            {
                var v = new Vector3D(min + (max - min) * rnd.NextDouble(), min + (max - min) * rnd.NextDouble(), min + (max - min) * rnd.NextDouble());
                //v.Normalize();
                o.RotateOZtoVec(v);
                v.Normalize();
                Assert.AreEqual(0d, (v - o.ZAxis).GetLength(), 0.0000001);
            }
        }
Exemplo n.º 3
0
        public void Robust_FromFile_Pscico_ShouldSucceed()
        {
            double[] points =
                File.ReadAllLines("test_data/pscico_data/orient3d.txt")
                .Select(n => n.Split()).SelectMany(x => x)
                .Select(s => double.Parse(s)).ToArray();

            for (int i = 0; i < NPscicoData; i += 14)
            {
                Assert.Equal(Math.Sign(points[i + 13]), Math.Sign(Orient3D.Robust(
                                                                      new double[] { points[i + 1], points[i + 2], points[i + 3] },
                                                                      new double[] { points[i + 4], points[i + 5], points[i + 6] },
                                                                      new double[] { points[i + 7], points[i + 8], points[i + 9] },
                                                                      new double[] { points[i + 10], points[i + 11], points[i + 12] })));
            }
        }
Exemplo n.º 4
0
        public void LocalToWorldTest()
        {
            var o = new Orient3D();

            o.Q = QuaternionD.FromAxisAngle(Vector3D.XAxis, 45 * Math.PI / 180.0);
            var tstVec1 = Vector3D.XAxis;
            var answ1   = tstVec1 - o.M * tstVec1;

            Assert.AreEqual(0d, answ1.GetLength(), 0.000001);

            var tstVec2 = Vector3D.YAxis;
            var answ2   = new Vector3D(0, Math.Sqrt(2.0), Math.Sqrt(2.0)) / 2 - o.M * tstVec2;

            Assert.AreEqual(0d, answ2.GetLength(), 0.000001);

            var tstVec3 = Vector3D.ZAxis;
            var answ3   = new Vector3D(0, -Math.Sqrt(2.0), Math.Sqrt(2.0)) / 2 - o.M * tstVec3;

            Assert.AreEqual(0d, answ3.GetLength(), 0.000001);


            o.Q     = QuaternionD.FromAxisAngle(Vector3D.YAxis, 45 * Math.PI / 180.0);
            tstVec1 = Vector3D.YAxis;
            answ1   = tstVec1 - o.M * tstVec1;
            Assert.AreEqual(0d, answ1.GetLength(), 0.000001);

            tstVec2 = Vector3D.XAxis;
            answ2   = new Vector3D(Math.Sqrt(2.0), 0, -Math.Sqrt(2.0)) / 2 - o.M * tstVec2;
            Assert.AreEqual(0d, answ2.GetLength(), 0.000001);

            tstVec3 = Vector3D.ZAxis;
            answ3   = new Vector3D(Math.Sqrt(2.0), 0, Math.Sqrt(2.0)) / 2 - o.M * tstVec3;
            Assert.AreEqual(0d, answ3.GetLength(), 0.000001);

            o.Q     = QuaternionD.FromAxisAngle(Vector3D.ZAxis, 45 * Math.PI / 180.0);
            tstVec1 = Vector3D.ZAxis;
            answ1   = tstVec1 - o.M * tstVec1;
            Assert.AreEqual(0d, answ1.GetLength(), 0.000001);

            tstVec2 = Vector3D.XAxis;
            answ2   = new Vector3D(Math.Sqrt(2.0), Math.Sqrt(2.0), 0) / 2 - o.M * tstVec2;
            Assert.AreEqual(0d, answ2.GetLength(), 0.000001);

            tstVec3 = Vector3D.YAxis;
            answ3   = new Vector3D(-Math.Sqrt(2.0), Math.Sqrt(2.0), 0) / 2 - o.M * tstVec3;
            Assert.AreEqual(0d, answ3.GetLength(), 0.000001);
        }
Exemplo n.º 5
0
 public void Fast_ShouldSucceed()
 {
     Assert.True(Orient3D.Fast(
                     new double[] { 0, 0, 0 },
                     new double[] { 1, 0, 0 },
                     new double[] { 0, 1, 1 },
                     new double[] { 0, 0, 1 }) < 0);
     Assert.True(Orient3D.Fast(
                     new double[] { 0, 0, 0 },
                     new double[] { 0, 1, 0 },
                     new double[] { 1, 0, 0 },
                     new double[] { 0, 0, 1 }) > 0);
     Assert.True(Orient3D.Fast(
                     new double[] { 0, 0, 0 },
                     new double[] { 1, 1, 0 },
                     new double[] { 0, 1, 1 },
                     new double[] { 0, 1, 1 }) == 0);
 }
Exemplo n.º 6
0
        public void Fast_FromFile_ShouldSucceed()
        {
            double[] numbers =
                File.ReadAllLines("test_data/simple_data/orient3d-points3d.txt")
                .Select(n => n.Split()).SelectMany(x => x)
                .Select(s => double.Parse(s)).ToArray();
            double[] results =
                File.ReadAllLines("test_data/simple_data/results-orient3d.txt")
                .Select(n => n.Split()).SelectMany(x => x)
                .Select(s => double.Parse(s)).ToArray();

            int count = 0;

            for (int i = 0; i < NSimpleData; i += 12)
            {
                var orient3DResult = Orient3D.Fast(
                    new double[] { numbers[i], numbers[i + 1], numbers[i + 2] },
                    new double[] { numbers[i + 3], numbers[i + 4], numbers[i + 5] },
                    new double[] { numbers[i + 6], numbers[i + 7], numbers[i + 8] },
                    new double[] { numbers[i + 9], numbers[i + 10], numbers[i + 11] });
                Assert.Equal(Math.Sign(results[count++]), Math.Sign(orient3DResult));
            }
        }