public void TrafoRotIntoTest() { var rnd = new Random(); for (int i = 0; i < 500000; i++) { var rx = new V3d(rnd.NextDouble() * 1e-17, 0, 0) * (rnd.Next(100) >= 50 ? 1: -1); var ry = new V3d(0, rnd.NextDouble() * 1e-17, 0) * (rnd.Next(100) >= 50 ? 1 : -1); var rz = new V3d(0, 0, rnd.NextDouble() * 1e-17) * (rnd.Next(100) >= 50 ? 1 : -1); // equal cases var req = new[] { Trafo3d.RotateInto(V3d.XAxis, V3d.XAxis + ry), Trafo3d.RotateInto(V3d.YAxis, V3d.YAxis + rz), Trafo3d.RotateInto(V3d.ZAxis, V3d.ZAxis + rx), }; foreach (var r in req) { Assert.True(CheckForwardBackwardConsistency(r)); } // 180° cases var r180 = new[] { Trafo3d.RotateInto(-V3d.XAxis, V3d.XAxis + ry), Trafo3d.RotateInto(V3d.XAxis, -V3d.XAxis + rz), Trafo3d.RotateInto(-V3d.YAxis, V3d.YAxis + rz), Trafo3d.RotateInto(V3d.YAxis, -V3d.YAxis + rx), Trafo3d.RotateInto(-V3d.ZAxis, V3d.ZAxis + rx), Trafo3d.RotateInto(V3d.ZAxis, -V3d.ZAxis + ry) }; foreach (var r in r180) { Assert.True(CheckForwardBackwardConsistency(r)); } // 90° cases var r90 = new[] { Trafo3d.RotateInto(-V3d.XAxis + rz, V3d.ZAxis), Trafo3d.RotateInto(V3d.XAxis + ry, V3d.ZAxis), Trafo3d.RotateInto(-V3d.YAxis + rx, V3d.ZAxis), Trafo3d.RotateInto(V3d.YAxis + rz, V3d.ZAxis), Trafo3d.RotateInto(-V3d.XAxis, -V3d.ZAxis + rx), Trafo3d.RotateInto(V3d.XAxis, -V3d.ZAxis + rx), Trafo3d.RotateInto(-V3d.YAxis, -V3d.ZAxis + ry), Trafo3d.RotateInto(V3d.YAxis, -V3d.ZAxis + ry), }; foreach (var r in r90) { Assert.True(CheckForwardBackwardConsistency(r)); } } }
public void TrafoRotIntoTest() { TrafoTesting.GenericTest((rnd, i) => { var rx = new V3d(rnd.UniformDouble() * 1e-17, 0, 0) * (rnd.UniformDouble() > 0.5 ? 1 : -1); var ry = new V3d(0, rnd.UniformDouble() * 1e-17, 0) * (rnd.UniformDouble() > 0.5 ? 1 : -1); var rz = new V3d(0, 0, rnd.UniformDouble() * 1e-17) * (rnd.UniformDouble() > 0.5 ? 1 : -1); // equal cases var req = new[] { Trafo3d.RotateInto(V3d.XAxis, (V3d.XAxis + ry).Normalized), Trafo3d.RotateInto(V3d.YAxis, (V3d.YAxis + rz).Normalized), Trafo3d.RotateInto(V3d.ZAxis, (V3d.ZAxis + rx).Normalized), }; foreach (var r in req) { Assert.True(CheckForwardBackwardConsistency(r)); } // 180° cases var r180 = new[] { Trafo3d.RotateInto(-V3d.XAxis, (V3d.XAxis + ry).Normalized), Trafo3d.RotateInto(V3d.XAxis, (-V3d.XAxis + rz).Normalized), Trafo3d.RotateInto(-V3d.YAxis, (V3d.YAxis + rz).Normalized), Trafo3d.RotateInto(V3d.YAxis, (-V3d.YAxis + rx).Normalized), Trafo3d.RotateInto(-V3d.ZAxis, (V3d.ZAxis + rx).Normalized), Trafo3d.RotateInto(V3d.ZAxis, (-V3d.ZAxis + ry).Normalized) }; foreach (var r in r180) { Assert.True(CheckForwardBackwardConsistency(r)); } // 90° cases var r90 = new[] { Trafo3d.RotateInto((-V3d.XAxis + rz).Normalized, V3d.ZAxis), Trafo3d.RotateInto((V3d.XAxis + ry).Normalized, V3d.ZAxis), Trafo3d.RotateInto((-V3d.YAxis + rx).Normalized, V3d.ZAxis), Trafo3d.RotateInto((V3d.YAxis + rz).Normalized, V3d.ZAxis), Trafo3d.RotateInto(-V3d.XAxis, (-V3d.ZAxis + rx).Normalized), Trafo3d.RotateInto(V3d.XAxis, (-V3d.ZAxis + rx).Normalized), Trafo3d.RotateInto(-V3d.YAxis, (-V3d.ZAxis + ry).Normalized), Trafo3d.RotateInto(V3d.YAxis, (-V3d.ZAxis + ry).Normalized), }; foreach (var r in r90) { Assert.True(CheckForwardBackwardConsistency(r)); } }); }