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); }
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); } }
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] }))); } }
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); }
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); }
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)); } }