Ejemplo n.º 1
0
        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));
                }
            }
        }
Ejemplo n.º 2
0
        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));
                }
            });
        }