Esempio n. 1
0
 public void Constructors()
 {
     {
         var v = new decvec3(2m);
         Assert.AreEqual(2m, v.x);
         Assert.AreEqual(2m, v.y);
         Assert.AreEqual(2m, v.z);
     }
     {
         var v = new decvec3(-0.5m, 5m, 0m);
         Assert.AreEqual(-0.5m, v.x);
         Assert.AreEqual(5m, v.y);
         Assert.AreEqual(0m, v.z);
     }
     {
         var v = new decvec3(new decvec2(7m, 6m));
         Assert.AreEqual(7m, v.x);
         Assert.AreEqual(6m, v.y);
         Assert.AreEqual(0m, v.z);
     }
     {
         var v = new decvec3(new decvec3(2.5m, 7.5m, -8m));
         Assert.AreEqual(2.5m, v.x);
         Assert.AreEqual(7.5m, v.y);
         Assert.AreEqual(-8m, v.z);
     }
     {
         var v = new decvec3(new decvec4(-6.5m, 0m, -7.5m, -2.5m));
         Assert.AreEqual(-6.5m, v.x);
         Assert.AreEqual(0m, v.y);
         Assert.AreEqual(-7.5m, v.z);
     }
 }
Esempio n. 2
0
 /// <summary>
 /// vector-and-scalar constructor (CAUTION: not angle-axis, use FromAngleAxis instead)
 /// </summary>
 public decquat(decvec3 v, decimal s)
 {
     this.x = v.x;
     this.y = v.y;
     this.z = v.z;
     this.w = s;
 }
Esempio n. 3
0
        /// <summary>
        /// Creates a quaternion from an axis and an angle (in radians).
        /// </summary>
        public static decquat FromAxisAngle(decimal angle, decvec3 v)
        {
            var s = Math.Sin((double)angle * 0.5);
            var c = Math.Cos((double)angle * 0.5);

            return(new decquat((decimal)((double)v.x * s), (decimal)((double)v.y * s), (decimal)((double)v.z * s), (decimal)c));
        }
Esempio n. 4
0
        /// <summary>
        /// Returns a vector rotated by the quaternion.
        /// </summary>
        public static decvec3 operator*(decquat q, decvec3 v)
        {
            var qv  = new decvec3(q.x, q.y, q.z);
            var uv  = decvec3.Cross(qv, v);
            var uuv = decvec3.Cross(qv, uv);

            return(v + ((uv * q.w) + uuv) * 2);
        }
Esempio n. 5
0
 /// <summary>
 /// Constructs this matrix from a series of column vectors. Non-overwritten fields are from an Identity matrix.
 /// </summary>
 public decmat2x3(decvec3 c0, decvec3 c1)
 {
     this.m00 = c0.x;
     this.m01 = c0.y;
     this.m02 = c0.z;
     this.m10 = c1.x;
     this.m11 = c1.y;
     this.m12 = c1.z;
 }
Esempio n. 6
0
        /// <summary>
        /// Create a quaternion from two normalized axis (http://lolengine.net/blog/2013/09/18/beautiful-maths-quaternion-from-vectors)
        /// </summary>
        public decquat(decvec3 eulerAngle)
        {
            var c = decvec3.Cos(eulerAngle / 2);
            var s = decvec3.Sin(eulerAngle / 2);

            this.x = s.x * c.y * c.z - c.x * s.y * s.z;
            this.y = c.x * s.y * c.z + s.x * c.y * s.z;
            this.z = c.x * c.y * s.z - s.x * s.y * c.z;
            this.w = c.x * c.y * c.z + s.x * s.y * s.z;
        }
Esempio n. 7
0
        public void PropertyValues()
        {
            var v    = new decvec3(-7m, 7m, 0.5m);
            var vals = v.Values;

            Assert.AreEqual(-7m, vals[0]);
            Assert.AreEqual(7m, vals[1]);
            Assert.AreEqual(0.5m, vals[2]);
            Assert.That(vals.SequenceEqual(v.ToArray()));
        }
Esempio n. 8
0
        public void SerializationJson()
        {
            var v0 = new decvec3(-7m, 0m, -1m);
            var s0 = JsonConvert.SerializeObject(v0);

            var v1 = JsonConvert.DeserializeObject <decvec3>(s0);
            var s1 = JsonConvert.SerializeObject(v1);

            Assert.AreEqual(v0, v1);
            Assert.AreEqual(s0, s1);
        }
Esempio n. 9
0
        /// <summary>
        /// Create a quaternion from two normalized axis (http://lolengine.net/blog/2013/09/18/beautiful-maths-quaternion-from-vectors)
        /// </summary>
        public decquat(decvec3 u, decvec3 v)
        {
            var localW = decvec3.Cross(u, v);
            var dot    = decvec3.Dot(u, v);
            var q      = new decquat(localW.x, localW.y, localW.z, 1m + dot).Normalized;

            this.x = q.x;
            this.y = q.y;
            this.z = q.z;
            this.w = q.w;
        }
Esempio n. 10
0
 /// <summary>
 /// Constructs this matrix from a series of column vectors. Non-overwritten fields are from an Identity matrix.
 /// </summary>
 public decmat3(decvec3 c0, decvec3 c1, decvec3 c2)
 {
     this.m00 = c0.x;
     this.m01 = c0.y;
     this.m02 = c0.z;
     this.m10 = c1.x;
     this.m11 = c1.y;
     this.m12 = c1.z;
     this.m20 = c2.x;
     this.m21 = c2.y;
     this.m22 = c2.z;
 }
Esempio n. 11
0
 /// <summary>
 /// Constructs this matrix from a series of column vectors. Non-overwritten fields are from an Identity matrix.
 /// </summary>
 public decmat3(decvec3 c0, decvec3 c1)
 {
     this.m00 = c0.x;
     this.m01 = c0.y;
     this.m02 = c0.z;
     this.m10 = c1.x;
     this.m11 = c1.y;
     this.m12 = c1.z;
     this.m20 = 0m;
     this.m21 = 0m;
     this.m22 = 1m;
 }
Esempio n. 12
0
 public void InvariantCrossDot()
 {
     {
         var v0 = new decvec3(7m, -1m, -4m);
         var v1 = new decvec3(-0.5m, 1m, 6m);
         Assert.Less(glm.Abs(glm.Dot(v0, glm.Cross(v0, v1))), 0.1);
     }
     {
         var v0 = new decvec3(2.5m, -4m, 1.5m);
         var v1 = new decvec3(3m, 5.5m, 4m);
         Assert.Less(glm.Abs(glm.Dot(v0, glm.Cross(v0, v1))), 0.1);
     }
     {
         var v0 = new decvec3(-7.5m, -8m, -1.5m);
         var v1 = new decvec3(9m, 5.5m, 1.5m);
         Assert.Less(glm.Abs(glm.Dot(v0, glm.Cross(v0, v1))), 0.1);
     }
     {
         var v0 = new decvec3(9m, 4m, 8m);
         var v1 = new decvec3(8m, -0.5m, 9m);
         Assert.Less(glm.Abs(glm.Dot(v0, glm.Cross(v0, v1))), 0.1);
     }
     {
         var v0 = new decvec3(4.5m, 1.5m, -2m);
         var v1 = new decvec3(1.5m, -5m, 4m);
         Assert.Less(glm.Abs(glm.Dot(v0, glm.Cross(v0, v1))), 0.1);
     }
     {
         var v0 = new decvec3(-7m, -2m, -3m);
         var v1 = new decvec3(-7m, -3m, -5m);
         Assert.Less(glm.Abs(glm.Dot(v0, glm.Cross(v0, v1))), 0.1);
     }
     {
         var v0 = new decvec3(-9.5m, -9m, -3m);
         var v1 = new decvec3(-4.5m, 8m, 2m);
         Assert.Less(glm.Abs(glm.Dot(v0, glm.Cross(v0, v1))), 0.1);
     }
     {
         var v0 = new decvec3(5m, -6.5m, 5.5m);
         var v1 = new decvec3(-4m, 1m, 3.5m);
         Assert.Less(glm.Abs(glm.Dot(v0, glm.Cross(v0, v1))), 0.1);
     }
     {
         var v0 = new decvec3(-6.5m, -5.5m, -5m);
         var v1 = new decvec3(-4m, -6.5m, 2m);
         Assert.Less(glm.Abs(glm.Dot(v0, glm.Cross(v0, v1))), 0.1);
     }
     {
         var v0 = new decvec3(-9.5m, 8.5m, -8.5m);
         var v1 = new decvec3(4m, 4.5m, 9m);
         Assert.Less(glm.Abs(glm.Dot(v0, glm.Cross(v0, v1))), 0.1);
     }
 }
Esempio n. 13
0
 public void InvariantCommutative()
 {
     {
         var v0 = new decvec3(-3.5m, -3m, -7m);
         var v1 = new decvec3(5.5m, -9m, -3m);
         Assert.AreEqual(v0 * v1, v1 * v0);
     }
     {
         var v0 = new decvec3(1.5m, -8m, -3m);
         var v1 = new decvec3(1m, 7.5m, 2m);
         Assert.AreEqual(v0 * v1, v1 * v0);
     }
     {
         var v0 = new decvec3(-5m, 1.5m, 5m);
         var v1 = new decvec3(-4m, 1m, 7m);
         Assert.AreEqual(v0 * v1, v1 * v0);
     }
     {
         var v0 = new decvec3(-9.5m, -3.5m, -2m);
         var v1 = new decvec3(8.5m, 0.5m, -1m);
         Assert.AreEqual(v0 * v1, v1 * v0);
     }
     {
         var v0 = new decvec3(4m, -3m, -9m);
         var v1 = new decvec3(-2m, -8m, 9.5m);
         Assert.AreEqual(v0 * v1, v1 * v0);
     }
     {
         var v0 = new decvec3(-1m, 0m, -1.5m);
         var v1 = new decvec3(8.5m, -9.5m, -4.5m);
         Assert.AreEqual(v0 * v1, v1 * v0);
     }
     {
         var v0 = new decvec3(-3m, 9m, -3m);
         var v1 = new decvec3(8m, -7m, -7m);
         Assert.AreEqual(v0 * v1, v1 * v0);
     }
     {
         var v0 = new decvec3(-6m, 4.5m, -5m);
         var v1 = new decvec3(-9.5m, 4m, -5m);
         Assert.AreEqual(v0 * v1, v1 * v0);
     }
     {
         var v0 = new decvec3(-2m, 0m, 8m);
         var v1 = new decvec3(-1.5m, -3m, 1m);
         Assert.AreEqual(v0 * v1, v1 * v0);
     }
     {
         var v0 = new decvec3(9.5m, -2.5m, -7.5m);
         var v1 = new decvec3(6m, 1.5m, 5m);
         Assert.AreEqual(v0 * v1, v1 * v0);
     }
 }
Esempio n. 14
0
 public void InvariantCommutativeNeg()
 {
     {
         var v0 = new decvec3(-1.5m, -1m, 8m);
         var v1 = new decvec3(4m, -6m, 3m);
         Assert.AreEqual(v0 - v1, -(v1 - v0));
     }
     {
         var v0 = new decvec3(-1.5m, -7m, -1.5m);
         var v1 = new decvec3(-5.5m, -5.5m, -4m);
         Assert.AreEqual(v0 - v1, -(v1 - v0));
     }
     {
         var v0 = new decvec3(8.5m, 2.5m, -6.5m);
         var v1 = new decvec3(-8.5m, -2.5m, -3m);
         Assert.AreEqual(v0 - v1, -(v1 - v0));
     }
     {
         var v0 = new decvec3(-2m, -5m, 5m);
         var v1 = new decvec3(0m, 4.5m, -6m);
         Assert.AreEqual(v0 - v1, -(v1 - v0));
     }
     {
         var v0 = new decvec3(-7m, -9m, -4m);
         var v1 = new decvec3(-8.5m, 0.5m, -5.5m);
         Assert.AreEqual(v0 - v1, -(v1 - v0));
     }
     {
         var v0 = new decvec3(-0.5m, 2m, 2.5m);
         var v1 = new decvec3(0.5m, 0.5m, -1m);
         Assert.AreEqual(v0 - v1, -(v1 - v0));
     }
     {
         var v0 = new decvec3(7.5m, -8m, -6m);
         var v1 = new decvec3(-0.5m, -8m, 7m);
         Assert.AreEqual(v0 - v1, -(v1 - v0));
     }
     {
         var v0 = new decvec3(2.5m, -3.5m, -9.5m);
         var v1 = new decvec3(-3m, -0.5m, -7m);
         Assert.AreEqual(v0 - v1, -(v1 - v0));
     }
     {
         var v0 = new decvec3(9.5m, -7.5m, -0.5m);
         var v1 = new decvec3(0m, -5m, 3m);
         Assert.AreEqual(v0 - v1, -(v1 - v0));
     }
     {
         var v0 = new decvec3(-1.5m, -1.5m, -7m);
         var v1 = new decvec3(2.5m, -1.5m, 7.5m);
         Assert.AreEqual(v0 - v1, -(v1 - v0));
     }
 }
Esempio n. 15
0
 public void TriangleInequality()
 {
     {
         var v0 = new decvec3(-4m, -7m, -4.5m);
         var v1 = new decvec3(3.5m, -8.5m, -7.5m);
         Assert.GreaterOrEqual(v0.NormMax + v1.NormMax, (v0 + v1).NormMax);
     }
     {
         var v0 = new decvec3(5.5m, -4m, -1m);
         var v1 = new decvec3(1m, -9m, -1m);
         Assert.GreaterOrEqual(v0.NormMax + v1.NormMax, (v0 + v1).NormMax);
     }
     {
         var v0 = new decvec3(-3m, -8m, 6.5m);
         var v1 = new decvec3(-1m, -4.5m, 2m);
         Assert.GreaterOrEqual(v0.NormMax + v1.NormMax, (v0 + v1).NormMax);
     }
     {
         var v0 = new decvec3(2.5m, 2.5m, -7m);
         var v1 = new decvec3(8.5m, -3.5m, -8m);
         Assert.GreaterOrEqual(v0.NormMax + v1.NormMax, (v0 + v1).NormMax);
     }
     {
         var v0 = new decvec3(6.5m, -6.5m, -8m);
         var v1 = new decvec3(-4m, 4m, -1.5m);
         Assert.GreaterOrEqual(v0.NormMax + v1.NormMax, (v0 + v1).NormMax);
     }
     {
         var v0 = new decvec3(-2.5m, -8m, 5m);
         var v1 = new decvec3(0.5m, -9m, 1.5m);
         Assert.GreaterOrEqual(v0.NormMax + v1.NormMax, (v0 + v1).NormMax);
     }
     {
         var v0 = new decvec3(3.5m, -8m, 5m);
         var v1 = new decvec3(-4m, -2m, 9.5m);
         Assert.GreaterOrEqual(v0.NormMax + v1.NormMax, (v0 + v1).NormMax);
     }
     {
         var v0 = new decvec3(0.5m, -4m, 1m);
         var v1 = new decvec3(9.5m, -8m, 1.5m);
         Assert.GreaterOrEqual(v0.NormMax + v1.NormMax, (v0 + v1).NormMax);
     }
     {
         var v0 = new decvec3(0m, 6.5m, 5m);
         var v1 = new decvec3(-1m, 9.5m, 0m);
         Assert.GreaterOrEqual(v0.NormMax + v1.NormMax, (v0 + v1).NormMax);
     }
     {
         var v0 = new decvec3(9.5m, -6m, 0.5m);
         var v1 = new decvec3(6m, 6.5m, 7.5m);
         Assert.GreaterOrEqual(v0.NormMax + v1.NormMax, (v0 + v1).NormMax);
     }
 }
Esempio n. 16
0
        public void Operators()
        {
            var v1 = new decvec3(-4.5m, 4.5m, 6m);
            var v2 = new decvec3(-4.5m, 4.5m, 6m);
            var v3 = new decvec3(6m, 4.5m, -4.5m);

            Assert.That(v1 == new decvec3(v1));
            Assert.That(v2 == new decvec3(v2));
            Assert.That(v3 == new decvec3(v3));
            Assert.That(v1 == v2);
            Assert.That(v1 != v3);
            Assert.That(v2 != v3);
        }
Esempio n. 17
0
        public void StringInterop()
        {
            var v = new decvec3(-8.5m, 1m, -1m);

            var s0 = v.ToString();
            var s1 = v.ToString("#");

            var v0 = decvec3.Parse(s0);
            var v1 = decvec3.Parse(s1, "#");

            Assert.AreEqual(v, v0);
            Assert.AreEqual(v, v1);

            var b0 = decvec3.TryParse(s0, out v0);
            var b1 = decvec3.TryParse(s1, "#", out v1);

            Assert.That(b0);
            Assert.That(b1);
            Assert.AreEqual(v, v0);
            Assert.AreEqual(v, v1);

            b0 = decvec3.TryParse(null, out v0);
            Assert.False(b0);
            b0 = decvec3.TryParse("", out v0);
            Assert.False(b0);
            b0 = decvec3.TryParse(s0 + ", 0", out v0);
            Assert.False(b0);

            Assert.Throws <NullReferenceException>(() => { decvec3.Parse(null); });
            Assert.Throws <FormatException>(() => { decvec3.Parse(""); });
            Assert.Throws <FormatException>(() => { decvec3.Parse(s0 + ", 0"); });

            var s2 = v.ToString(";", CultureInfo.InvariantCulture);

            Assert.That(s2.Length > 0);

            var s3 = v.ToString("; ", "G");
            var s4 = v.ToString("; ", "G", CultureInfo.InvariantCulture);
            var v3 = decvec3.Parse(s3, "; ", NumberStyles.Number);
            var v4 = decvec3.Parse(s4, "; ", NumberStyles.Number, CultureInfo.InvariantCulture);

            Assert.AreEqual(v, v3);
            Assert.AreEqual(v, v4);

            var b4 = decvec3.TryParse(s4, "; ", NumberStyles.Number, CultureInfo.InvariantCulture, out v4);

            Assert.That(b4);
            Assert.AreEqual(v, v4);
        }
Esempio n. 18
0
 /// <summary>
 /// Constructs this matrix from a series of column vectors. Non-overwritten fields are from an Identity matrix.
 /// </summary>
 public decmat4x3(decvec3 c0, decvec3 c1, decvec3 c2, decvec3 c3)
 {
     this.m00 = c0.x;
     this.m01 = c0.y;
     this.m02 = c0.z;
     this.m10 = c1.x;
     this.m11 = c1.y;
     this.m12 = c1.z;
     this.m20 = c2.x;
     this.m21 = c2.y;
     this.m22 = c2.z;
     this.m30 = c3.x;
     this.m31 = c3.y;
     this.m32 = c3.z;
 }
Esempio n. 19
0
 public void InvariantTriple()
 {
     {
         var v0 = new decvec3(1.5m, -5m, 3m);
         Assert.AreEqual(v0 + v0 + v0, 3 * v0);
     }
     {
         var v0 = new decvec3(-3.5m, -9.5m, -7.5m);
         Assert.AreEqual(v0 + v0 + v0, 3 * v0);
     }
     {
         var v0 = new decvec3(-8.5m, -1.5m, -6.5m);
         Assert.AreEqual(v0 + v0 + v0, 3 * v0);
     }
     {
         var v0 = new decvec3(-1m, -8m, 3.5m);
         Assert.AreEqual(v0 + v0 + v0, 3 * v0);
     }
     {
         var v0 = new decvec3(-2.5m, -2.5m, -1.5m);
         Assert.AreEqual(v0 + v0 + v0, 3 * v0);
     }
     {
         var v0 = new decvec3(-2m, -4.5m, -9.5m);
         Assert.AreEqual(v0 + v0 + v0, 3 * v0);
     }
     {
         var v0 = new decvec3(6m, -3m, 0m);
         Assert.AreEqual(v0 + v0 + v0, 3 * v0);
     }
     {
         var v0 = new decvec3(7m, -2m, 0.5m);
         Assert.AreEqual(v0 + v0 + v0, 3 * v0);
     }
     {
         var v0 = new decvec3(0.5m, 7.5m, -4m);
         Assert.AreEqual(v0 + v0 + v0, 3 * v0);
     }
     {
         var v0 = new decvec3(-9.5m, -3m, 3.5m);
         Assert.AreEqual(v0 + v0 + v0, 3 * v0);
     }
 }
Esempio n. 20
0
 public void InvariantNorm()
 {
     {
         var v0 = new decvec3(-1.5m, 3m, -2.5m);
         Assert.LessOrEqual(v0.NormMax, v0.Norm);
     }
     {
         var v0 = new decvec3(-2.5m, 9.5m, 9.5m);
         Assert.LessOrEqual(v0.NormMax, v0.Norm);
     }
     {
         var v0 = new decvec3(7.5m, 2.5m, 0.5m);
         Assert.LessOrEqual(v0.NormMax, v0.Norm);
     }
     {
         var v0 = new decvec3(7m, 3m, 4m);
         Assert.LessOrEqual(v0.NormMax, v0.Norm);
     }
     {
         var v0 = new decvec3(-8m, 2m, -7.5m);
         Assert.LessOrEqual(v0.NormMax, v0.Norm);
     }
     {
         var v0 = new decvec3(-6.5m, -8.5m, 8m);
         Assert.LessOrEqual(v0.NormMax, v0.Norm);
     }
     {
         var v0 = new decvec3(2.5m, 5.5m, -0.5m);
         Assert.LessOrEqual(v0.NormMax, v0.Norm);
     }
     {
         var v0 = new decvec3(8.5m, -5.5m, 3m);
         Assert.LessOrEqual(v0.NormMax, v0.Norm);
     }
     {
         var v0 = new decvec3(-6m, 3.5m, -4.5m);
         Assert.LessOrEqual(v0.NormMax, v0.Norm);
     }
     {
         var v0 = new decvec3(3m, 7m, -3m);
         Assert.LessOrEqual(v0.NormMax, v0.Norm);
     }
 }
Esempio n. 21
0
 public void InvariantIdNeg()
 {
     {
         var v0 = new decvec3(4.5m, 4.5m, -5.5m);
         Assert.AreEqual(v0, -(-v0));
     }
     {
         var v0 = new decvec3(9m, 3.5m, 6m);
         Assert.AreEqual(v0, -(-v0));
     }
     {
         var v0 = new decvec3(-7.5m, -3.5m, -6m);
         Assert.AreEqual(v0, -(-v0));
     }
     {
         var v0 = new decvec3(7m, -2m, -2m);
         Assert.AreEqual(v0, -(-v0));
     }
     {
         var v0 = new decvec3(-6m, 7.5m, 2m);
         Assert.AreEqual(v0, -(-v0));
     }
     {
         var v0 = new decvec3(6.5m, 6.5m, -1.5m);
         Assert.AreEqual(v0, -(-v0));
     }
     {
         var v0 = new decvec3(-1.5m, -5.5m, 5m);
         Assert.AreEqual(v0, -(-v0));
     }
     {
         var v0 = new decvec3(-9.5m, -3.5m, 1.5m);
         Assert.AreEqual(v0, -(-v0));
     }
     {
         var v0 = new decvec3(4.5m, -5.5m, -5m);
         Assert.AreEqual(v0, -(-v0));
     }
     {
         var v0 = new decvec3(-8.5m, -3m, -5.5m);
         Assert.AreEqual(v0, -(-v0));
     }
 }
Esempio n. 22
0
 public void InvariantDouble()
 {
     {
         var v0 = new decvec3(3m, 4.5m, -5m);
         Assert.AreEqual(v0 + v0, 2 * v0);
     }
     {
         var v0 = new decvec3(-5m, -7m, -2m);
         Assert.AreEqual(v0 + v0, 2 * v0);
     }
     {
         var v0 = new decvec3(-6m, -2.5m, 8.5m);
         Assert.AreEqual(v0 + v0, 2 * v0);
     }
     {
         var v0 = new decvec3(-9.5m, -7.5m, -9.5m);
         Assert.AreEqual(v0 + v0, 2 * v0);
     }
     {
         var v0 = new decvec3(7m, -3.5m, -6.5m);
         Assert.AreEqual(v0 + v0, 2 * v0);
     }
     {
         var v0 = new decvec3(6m, 9.5m, -4.5m);
         Assert.AreEqual(v0 + v0, 2 * v0);
     }
     {
         var v0 = new decvec3(-2m, -2.5m, -5m);
         Assert.AreEqual(v0 + v0, 2 * v0);
     }
     {
         var v0 = new decvec3(-9m, 5m, 4.5m);
         Assert.AreEqual(v0 + v0, 2 * v0);
     }
     {
         var v0 = new decvec3(5.5m, -5m, -9.5m);
         Assert.AreEqual(v0 + v0, 2 * v0);
     }
     {
         var v0 = new decvec3(-8.5m, -7m, 7.5m);
         Assert.AreEqual(v0 + v0, 2 * v0);
     }
 }
Esempio n. 23
0
 public void InvariantId()
 {
     {
         var v0 = new decvec3(0m, -1m, 3m);
         Assert.AreEqual(v0, +v0);
     }
     {
         var v0 = new decvec3(-0.5m, -0.5m, 0.5m);
         Assert.AreEqual(v0, +v0);
     }
     {
         var v0 = new decvec3(4.5m, 2m, 4.5m);
         Assert.AreEqual(v0, +v0);
     }
     {
         var v0 = new decvec3(-5m, 9m, 0m);
         Assert.AreEqual(v0, +v0);
     }
     {
         var v0 = new decvec3(0m, 8.5m, 6m);
         Assert.AreEqual(v0, +v0);
     }
     {
         var v0 = new decvec3(-7m, -6.5m, 4m);
         Assert.AreEqual(v0, +v0);
     }
     {
         var v0 = new decvec3(3m, -4m, 7.5m);
         Assert.AreEqual(v0, +v0);
     }
     {
         var v0 = new decvec3(-2.5m, 1.5m, -6.5m);
         Assert.AreEqual(v0, +v0);
     }
     {
         var v0 = new decvec3(-5m, 6m, -9m);
         Assert.AreEqual(v0, +v0);
     }
     {
         var v0 = new decvec3(-6.5m, -5.5m, 3m);
         Assert.AreEqual(v0, +v0);
     }
 }
Esempio n. 24
0
 public void InvariantAssociativeNeg()
 {
     {
         var v0 = new decvec3(-6.5m, 6m, -5m);
         var v1 = new decvec3(8.5m, 5m, -5.5m);
         var v2 = new decvec3(-0.5m, -1m, -5.5m);
         Assert.AreEqual(v0 * (v1 - v2), v0 * v1 - v0 * v2);
     }
     {
         var v0 = new decvec3(-1.5m, 5.5m, 0m);
         var v1 = new decvec3(-8.5m, -6.5m, 6m);
         var v2 = new decvec3(-3m, 1.5m, 2m);
         Assert.AreEqual(v0 * (v1 - v2), v0 * v1 - v0 * v2);
     }
     {
         var v0 = new decvec3(-2m, -8.5m, -8m);
         var v1 = new decvec3(7m, -6.5m, -8m);
         var v2 = new decvec3(-8.5m, 5.5m, -9.5m);
         Assert.AreEqual(v0 * (v1 - v2), v0 * v1 - v0 * v2);
     }
     {
         var v0 = new decvec3(1m, 1m, 9.5m);
         var v1 = new decvec3(0m, 1m, -1.5m);
         var v2 = new decvec3(5.5m, -4m, 8.5m);
         Assert.AreEqual(v0 * (v1 - v2), v0 * v1 - v0 * v2);
     }
     {
         var v0 = new decvec3(-8.5m, 0.5m, -2m);
         var v1 = new decvec3(2m, -0.5m, -4m);
         var v2 = new decvec3(3m, 4m, -9m);
         Assert.AreEqual(v0 * (v1 - v2), v0 * v1 - v0 * v2);
     }
     {
         var v0 = new decvec3(7.5m, -8.5m, -4m);
         var v1 = new decvec3(-3m, 6m, -9.5m);
         var v2 = new decvec3(-0.5m, -2m, -2m);
         Assert.AreEqual(v0 * (v1 - v2), v0 * v1 - v0 * v2);
     }
     {
         var v0 = new decvec3(7m, -6m, -6.5m);
         var v1 = new decvec3(7.5m, -7m, 9m);
         var v2 = new decvec3(3m, -1.5m, 8m);
         Assert.AreEqual(v0 * (v1 - v2), v0 * v1 - v0 * v2);
     }
     {
         var v0 = new decvec3(-5.5m, -1.5m, 3.5m);
         var v1 = new decvec3(-2m, -4.5m, 9m);
         var v2 = new decvec3(8m, 1.5m, 1m);
         Assert.AreEqual(v0 * (v1 - v2), v0 * v1 - v0 * v2);
     }
     {
         var v0 = new decvec3(0.5m, 9m, 1.5m);
         var v1 = new decvec3(3m, 4m, -9m);
         var v2 = new decvec3(8.5m, -5.5m, -5m);
         Assert.AreEqual(v0 * (v1 - v2), v0 * v1 - v0 * v2);
     }
     {
         var v0 = new decvec3(6m, -1.5m, 5.5m);
         var v1 = new decvec3(-9.5m, -1m, 0.5m);
         var v2 = new decvec3(-7m, -1.5m, 8.5m);
         Assert.AreEqual(v0 * (v1 - v2), v0 * v1 - v0 * v2);
     }
 }
Esempio n. 25
0
        public void Indexer()
        {
            var v = new decvec3(-8m, 6.5m, -6m);

            Assert.AreEqual(-8m, v[0]);
            Assert.AreEqual(6.5m, v[1]);
            Assert.AreEqual(-6m, v[2]);

            Assert.Throws <ArgumentOutOfRangeException>(() => { var s = v[-2147483648]; });
            Assert.Throws <ArgumentOutOfRangeException>(() => { v[-2147483648] = 0m; });
            Assert.Throws <ArgumentOutOfRangeException>(() => { var s = v[-1]; });
            Assert.Throws <ArgumentOutOfRangeException>(() => { v[-1] = 0m; });
            Assert.Throws <ArgumentOutOfRangeException>(() => { var s = v[3]; });
            Assert.Throws <ArgumentOutOfRangeException>(() => { v[3] = 0m; });
            Assert.Throws <ArgumentOutOfRangeException>(() => { var s = v[2147483647]; });
            Assert.Throws <ArgumentOutOfRangeException>(() => { v[2147483647] = 0m; });
            Assert.Throws <ArgumentOutOfRangeException>(() => { var s = v[5]; });
            Assert.Throws <ArgumentOutOfRangeException>(() => { v[5] = 0m; });

            v[2] = 0m;
            Assert.AreEqual(0m, v[2]);
            v[0] = 1m;
            Assert.AreEqual(1m, v[0]);
            v[0] = 2m;
            Assert.AreEqual(2m, v[0]);
            v[0] = 3m;
            Assert.AreEqual(3m, v[0]);
            v[2] = 4m;
            Assert.AreEqual(4m, v[2]);
            v[0] = 5m;
            Assert.AreEqual(5m, v[0]);
            v[2] = 6m;
            Assert.AreEqual(6m, v[2]);
            v[1] = 7m;
            Assert.AreEqual(7m, v[1]);
            v[0] = 8m;
            Assert.AreEqual(8m, v[0]);
            v[2] = 9m;
            Assert.AreEqual(9m, v[2]);
            v[1] = -1m;
            Assert.AreEqual(-1m, v[1]);
            v[0] = -2m;
            Assert.AreEqual(-2m, v[0]);
            v[0] = -3m;
            Assert.AreEqual(-3m, v[0]);
            v[1] = -4m;
            Assert.AreEqual(-4m, v[1]);
            v[2] = -5m;
            Assert.AreEqual(-5m, v[2]);
            v[1] = -6m;
            Assert.AreEqual(-6m, v[1]);
            v[0] = -7m;
            Assert.AreEqual(-7m, v[0]);
            v[1] = -8m;
            Assert.AreEqual(-8m, v[1]);
            v[1] = -9m;
            Assert.AreEqual(-9m, v[1]);
            v[2] = -9.5m;
            Assert.AreEqual(-9.5m, v[2]);
            v[1] = -8.5m;
            Assert.AreEqual(-8.5m, v[1]);
            v[2] = -7.5m;
            Assert.AreEqual(-7.5m, v[2]);
            v[1] = -6.5m;
            Assert.AreEqual(-6.5m, v[1]);
            v[1] = -5.5m;
            Assert.AreEqual(-5.5m, v[1]);
            v[1] = -4.5m;
            Assert.AreEqual(-4.5m, v[1]);
            v[0] = -3.5m;
            Assert.AreEqual(-3.5m, v[0]);
            v[1] = -2.5m;
            Assert.AreEqual(-2.5m, v[1]);
            v[0] = -1.5m;
            Assert.AreEqual(-1.5m, v[0]);
            v[2] = -0.5m;
            Assert.AreEqual(-0.5m, v[2]);
            v[1] = 0.5m;
            Assert.AreEqual(0.5m, v[1]);
            v[1] = 1.5m;
            Assert.AreEqual(1.5m, v[1]);
            v[0] = 2.5m;
            Assert.AreEqual(2.5m, v[0]);
            v[0] = 3.5m;
            Assert.AreEqual(3.5m, v[0]);
            v[1] = 4.5m;
            Assert.AreEqual(4.5m, v[1]);
            v[1] = 5.5m;
            Assert.AreEqual(5.5m, v[1]);
            v[2] = 6.5m;
            Assert.AreEqual(6.5m, v[2]);
            v[2] = 7.5m;
            Assert.AreEqual(7.5m, v[2]);
            v[1] = 8.5m;
            Assert.AreEqual(8.5m, v[1]);
            v[0] = 9.5m;
            Assert.AreEqual(9.5m, v[0]);
        }
Esempio n. 26
0
 public void InvariantAssociative()
 {
     {
         var v0 = new decvec3(5.5m, -8.5m, -9.5m);
         var v1 = new decvec3(6m, 4m, 5.5m);
         var v2 = new decvec3(8.5m, -6m, -5.5m);
         Assert.AreEqual(v0 * (v1 + v2), v0 * v1 + v0 * v2);
     }
     {
         var v0 = new decvec3(7.5m, 5m, 1.5m);
         var v1 = new decvec3(4m, -4.5m, -7m);
         var v2 = new decvec3(-0.5m, 2.5m, -3.5m);
         Assert.AreEqual(v0 * (v1 + v2), v0 * v1 + v0 * v2);
     }
     {
         var v0 = new decvec3(-3m, 4m, -6m);
         var v1 = new decvec3(2.5m, 6.5m, 2m);
         var v2 = new decvec3(-6.5m, -4.5m, -6.5m);
         Assert.AreEqual(v0 * (v1 + v2), v0 * v1 + v0 * v2);
     }
     {
         var v0 = new decvec3(3.5m, -0.5m, 9m);
         var v1 = new decvec3(-8.5m, -4.5m, 6.5m);
         var v2 = new decvec3(-1.5m, -4.5m, 6.5m);
         Assert.AreEqual(v0 * (v1 + v2), v0 * v1 + v0 * v2);
     }
     {
         var v0 = new decvec3(3.5m, 4.5m, -9.5m);
         var v1 = new decvec3(-8.5m, 4m, 5m);
         var v2 = new decvec3(3m, -8.5m, 2m);
         Assert.AreEqual(v0 * (v1 + v2), v0 * v1 + v0 * v2);
     }
     {
         var v0 = new decvec3(-4.5m, 1.5m, 4.5m);
         var v1 = new decvec3(-6m, -5.5m, -3.5m);
         var v2 = new decvec3(-2m, -1.5m, -6.5m);
         Assert.AreEqual(v0 * (v1 + v2), v0 * v1 + v0 * v2);
     }
     {
         var v0 = new decvec3(-4m, 3m, -4.5m);
         var v1 = new decvec3(-7m, -5.5m, -9.5m);
         var v2 = new decvec3(-3m, 4m, -2.5m);
         Assert.AreEqual(v0 * (v1 + v2), v0 * v1 + v0 * v2);
     }
     {
         var v0 = new decvec3(-4m, -6m, -8.5m);
         var v1 = new decvec3(4.5m, -7m, 9.5m);
         var v2 = new decvec3(-8.5m, 6.5m, 7.5m);
         Assert.AreEqual(v0 * (v1 + v2), v0 * v1 + v0 * v2);
     }
     {
         var v0 = new decvec3(5m, 2.5m, 9.5m);
         var v1 = new decvec3(-1m, -1.5m, -5m);
         var v2 = new decvec3(0m, 7.5m, 4.5m);
         Assert.AreEqual(v0 * (v1 + v2), v0 * v1 + v0 * v2);
     }
     {
         var v0 = new decvec3(-0.5m, -8m, 4m);
         var v1 = new decvec3(-5.5m, 9m, 6.5m);
         var v2 = new decvec3(-3m, -4m, -7.5m);
         Assert.AreEqual(v0 * (v1 + v2), v0 * v1 + v0 * v2);
     }
 }
Esempio n. 27
0
 /// <summary>
 /// OuterProduct treats the first parameter c as a column vector (matrix with one column) and the second parameter r as a row vector (matrix with one row) and does a linear algebraic matrix multiply c * r, yielding a matrix whose number of rows is the number of components in c and whose number of columns is the number of components in r.
 /// </summary>
 public static decmat3x2 OuterProduct(decvec2 c, decvec3 r) => decvec2.OuterProduct(c, r);
Esempio n. 28
0
 /// <summary>
 /// Rotates this quaternion from an axis and an angle (in radians).
 /// </summary>
 public static decquat Rotated(decquat q, decimal angle, decvec3 v) => q.Rotated(angle, v);
Esempio n. 29
0
 /// <summary>
 /// Returns a bvec3 from component-wise application of NotEqual (lhs != rhs).
 /// </summary>
 public static bvec3 NotEqual(decvec3 lhs, decvec3 rhs) => decvec3.NotEqual(lhs, rhs);
Esempio n. 30
0
 /// <summary>
 /// Rotates this quaternion from an axis and an angle (in radians).
 /// </summary>
 public decquat Rotated(decimal angle, decvec3 v) => this * FromAxisAngle(angle, v);