public void Constructors() { { var v = new hvec2(new Half(7.5)); Assert.AreEqual(new Half(7.5), v.x); Assert.AreEqual(new Half(7.5), v.y); } { var v = new hvec2(new Half(-8), new Half(6.5)); Assert.AreEqual(new Half(-8), v.x); Assert.AreEqual(new Half(6.5), v.y); } { var v = new hvec2(new hvec2(new Half(-3.5), new Half(-2.5))); Assert.AreEqual(new Half(-3.5), v.x); Assert.AreEqual(new Half(-2.5), v.y); } { var v = new hvec2(new hvec3(new Half(8.5), new Half(-0.5), new Half(7.5))); Assert.AreEqual(new Half(8.5), v.x); Assert.AreEqual(new Half(-0.5), v.y); } { var v = new hvec2(new hvec4(new Half(3), new Half(4), new Half(4), new Half(-0.5))); Assert.AreEqual(new Half(3), v.x); Assert.AreEqual(new Half(4), v.y); } }
/// <summary> /// Constructs this matrix from a series of column vectors. Non-overwritten fields are from an Identity matrix. /// </summary> public hmat2(hvec2 c0, hvec2 c1) { this.m00 = c0.x; this.m01 = c0.y; this.m10 = c1.x; this.m11 = c1.y; }
/// <summary> /// Constructs this matrix from a series of column vectors. Non-overwritten fields are from an Identity matrix. /// </summary> public hmat3x2(hvec2 c0, hvec2 c1) { this.m00 = c0.x; this.m01 = c0.y; this.m10 = c1.x; this.m11 = c1.y; this.m20 = Half.Zero; this.m21 = Half.Zero; }
/// <summary> /// Constructs this matrix from a series of column vectors. Non-overwritten fields are from an Identity matrix. /// </summary> public hmat3x2(hvec2 c0, hvec2 c1, hvec2 c2) { this.m00 = c0.x; this.m01 = c0.y; this.m10 = c1.x; this.m11 = c1.y; this.m20 = c2.x; this.m21 = c2.y; }
public void PropertyValues() { var v = new hvec2(new Half(-6.5), Half.Zero); var vals = v.Values; Assert.AreEqual(new Half(-6.5), vals[0]); Assert.AreEqual(Half.Zero, vals[1]); Assert.That(vals.SequenceEqual(v.ToArray())); }
/// <summary> /// Constructs this matrix from a series of column vectors. Non-overwritten fields are from an Identity matrix. /// </summary> public hmat2x3(hvec2 c0, hvec2 c1) { this.m00 = c0.x; this.m01 = c0.y; this.m02 = Half.Zero; this.m10 = c1.x; this.m11 = c1.y; this.m12 = Half.Zero; }
public void SerializationJson() { var v0 = new hvec2(new Half(-6.5), new Half(6)); var s0 = JsonConvert.SerializeObject(v0); var v1 = JsonConvert.DeserializeObject <hvec2>(s0); var s1 = JsonConvert.SerializeObject(v1); Assert.AreEqual(v0, v1); Assert.AreEqual(s0, s1); }
/// <summary> /// Constructs this matrix from a series of column vectors. Non-overwritten fields are from an Identity matrix. /// </summary> public hmat4x2(hvec2 c0, hvec2 c1, hvec2 c2) { this.m00 = c0.x; this.m01 = c0.y; this.m10 = c1.x; this.m11 = c1.y; this.m20 = c2.x; this.m21 = c2.y; this.m30 = Half.Zero; this.m31 = Half.Zero; }
/// <summary> /// Constructs this matrix from a series of column vectors. Non-overwritten fields are from an Identity matrix. /// </summary> public hmat4x2(hvec2 c0, hvec2 c1, hvec2 c2, hvec2 c3) { this.m00 = c0.x; this.m01 = c0.y; this.m10 = c1.x; this.m11 = c1.y; this.m20 = c2.x; this.m21 = c2.y; this.m30 = c3.x; this.m31 = c3.y; }
/// <summary> /// Constructs this matrix from a series of column vectors. Non-overwritten fields are from an Identity matrix. /// </summary> public hmat3(hvec2 c0, hvec2 c1, hvec2 c2) { this.m00 = c0.x; this.m01 = c0.y; this.m02 = Half.Zero; this.m10 = c1.x; this.m11 = c1.y; this.m12 = Half.Zero; this.m20 = c2.x; this.m21 = c2.y; this.m22 = Half.One; }
public void InvariantCommutativeNeg() { { var v0 = new hvec2(new Half(-1), new Half(7.5)); var v1 = new hvec2(new Half(2.5), new Half(-7.5)); Assert.AreEqual(v0 - v1, -(v1 - v0)); } { var v0 = new hvec2(new Half(-9), Half.One); var v1 = new hvec2(new Half(3.5), new Half(-9)); Assert.AreEqual(v0 - v1, -(v1 - v0)); } { var v0 = new hvec2(new Half(3.5), new Half(3)); var v1 = new hvec2(new Half(-8.5), new Half(7.5)); Assert.AreEqual(v0 - v1, -(v1 - v0)); } { var v0 = new hvec2(new Half(-1.5), new Half(-7)); var v1 = new hvec2(new Half(7.5), new Half(5)); Assert.AreEqual(v0 - v1, -(v1 - v0)); } { var v0 = new hvec2(new Half(8.5), new Half(-1)); var v1 = new hvec2(new Half(9), new Half(7.5)); Assert.AreEqual(v0 - v1, -(v1 - v0)); } { var v0 = new hvec2(new Half(2.5), new Half(-4.5)); var v1 = new hvec2(new Half(-5), new Half(7)); Assert.AreEqual(v0 - v1, -(v1 - v0)); } { var v0 = new hvec2(new Half(6), new Half(-2.5)); var v1 = new hvec2(Half.Zero, new Half(-3.5)); Assert.AreEqual(v0 - v1, -(v1 - v0)); } { var v0 = new hvec2(new Half(-0.5), new Half(-1.5)); var v1 = new hvec2(new Half(-5.5), new Half(2)); Assert.AreEqual(v0 - v1, -(v1 - v0)); } { var v0 = new hvec2(new Half(2), new Half(-9)); var v1 = new hvec2(new Half(2.5), new Half(7.5)); Assert.AreEqual(v0 - v1, -(v1 - v0)); } { var v0 = new hvec2(new Half(2.5), new Half(9.5)); var v1 = new hvec2(new Half(3), new Half(6)); Assert.AreEqual(v0 - v1, -(v1 - v0)); } }
public void TriangleInequality() { { var v0 = new hvec2(new Half(-7), new Half(3)); var v1 = new hvec2(new Half(-8), new Half(2)); Assert.GreaterOrEqual(v0.NormMax + v1.NormMax, (v0 + v1).NormMax); } { var v0 = new hvec2(new Half(-6), new Half(9.5)); var v1 = new hvec2(new Half(-1.5), new Half(-4.5)); Assert.GreaterOrEqual(v0.NormMax + v1.NormMax, (v0 + v1).NormMax); } { var v0 = new hvec2(new Half(-6.5), new Half(-6)); var v1 = new hvec2(new Half(-6), new Half(7)); Assert.GreaterOrEqual(v0.NormMax + v1.NormMax, (v0 + v1).NormMax); } { var v0 = new hvec2(new Half(0.5), new Half(4.5)); var v1 = new hvec2(new Half(9), new Half(7.5)); Assert.GreaterOrEqual(v0.NormMax + v1.NormMax, (v0 + v1).NormMax); } { var v0 = new hvec2(new Half(0.5), new Half(-8.5)); var v1 = new hvec2(new Half(5), new Half(8)); Assert.GreaterOrEqual(v0.NormMax + v1.NormMax, (v0 + v1).NormMax); } { var v0 = new hvec2(new Half(-2.5), new Half(-7)); var v1 = new hvec2(new Half(3.5), new Half(-5)); Assert.GreaterOrEqual(v0.NormMax + v1.NormMax, (v0 + v1).NormMax); } { var v0 = new hvec2(new Half(-9.5), new Half(-5.5)); var v1 = new hvec2(new Half(-7), new Half(7.5)); Assert.GreaterOrEqual(v0.NormMax + v1.NormMax, (v0 + v1).NormMax); } { var v0 = new hvec2(new Half(-0.5), Half.Zero); var v1 = new hvec2(new Half(8.5), new Half(-3)); Assert.GreaterOrEqual(v0.NormMax + v1.NormMax, (v0 + v1).NormMax); } { var v0 = new hvec2(new Half(4.5), new Half(-2.5)); var v1 = new hvec2(new Half(6.5), new Half(-1)); Assert.GreaterOrEqual(v0.NormMax + v1.NormMax, (v0 + v1).NormMax); } { var v0 = new hvec2(new Half(-2), new Half(-4)); var v1 = new hvec2(new Half(9.5), Half.Zero); Assert.GreaterOrEqual(v0.NormMax + v1.NormMax, (v0 + v1).NormMax); } }
public void InvariantCommutative() { { var v0 = new hvec2(new Half(-6), new Half(-7)); var v1 = new hvec2(new Half(9.5), new Half(-5)); Assert.AreEqual(v0 * v1, v1 * v0); } { var v0 = new hvec2(new Half(-3), new Half(9.5)); var v1 = new hvec2(new Half(5.5), new Half(-1)); Assert.AreEqual(v0 * v1, v1 * v0); } { var v0 = new hvec2(new Half(-7), new Half(5.5)); var v1 = new hvec2(new Half(-2), new Half(8.5)); Assert.AreEqual(v0 * v1, v1 * v0); } { var v0 = new hvec2(new Half(2.5), new Half(8)); var v1 = new hvec2(new Half(-7), new Half(-8)); Assert.AreEqual(v0 * v1, v1 * v0); } { var v0 = new hvec2(new Half(-2.5), new Half(-5)); var v1 = new hvec2(new Half(5.5), new Half(-4)); Assert.AreEqual(v0 * v1, v1 * v0); } { var v0 = new hvec2(new Half(4), new Half(4.5)); var v1 = new hvec2(new Half(9), new Half(3)); Assert.AreEqual(v0 * v1, v1 * v0); } { var v0 = new hvec2(new Half(-9.5), Half.Zero); var v1 = new hvec2(new Half(-1), Half.Zero); Assert.AreEqual(v0 * v1, v1 * v0); } { var v0 = new hvec2(new Half(-2.5), new Half(4.5)); var v1 = new hvec2(new Half(-0.5), new Half(4)); Assert.AreEqual(v0 * v1, v1 * v0); } { var v0 = new hvec2(Half.One, new Half(-5)); var v1 = new hvec2(new Half(9), new Half(3)); Assert.AreEqual(v0 * v1, v1 * v0); } { var v0 = new hvec2(Half.One, new Half(-0.5)); var v1 = new hvec2(new Half(4.5), new Half(-6.5)); Assert.AreEqual(v0 * v1, v1 * v0); } }
public void Operators() { var v1 = new hvec2(new Half(-4), new Half(2.5)); var v2 = new hvec2(new Half(-4), new Half(2.5)); var v3 = new hvec2(new Half(2.5), new Half(-4)); Assert.That(v1 == new hvec2(v1)); Assert.That(v2 == new hvec2(v2)); Assert.That(v3 == new hvec2(v3)); Assert.That(v1 == v2); Assert.That(v1 != v3); Assert.That(v2 != v3); }
public void StringInterop() { var v = new hvec2(new Half(-9), new Half(5)); var s0 = v.ToString(); var s1 = v.ToString("#"); var v0 = hvec2.Parse(s0); var v1 = hvec2.Parse(s1, "#"); Assert.AreEqual(v, v0); Assert.AreEqual(v, v1); var b0 = hvec2.TryParse(s0, out v0); var b1 = hvec2.TryParse(s1, "#", out v1); Assert.That(b0); Assert.That(b1); Assert.AreEqual(v, v0); Assert.AreEqual(v, v1); b0 = hvec2.TryParse(null, out v0); Assert.False(b0); b0 = hvec2.TryParse("", out v0); Assert.False(b0); b0 = hvec2.TryParse(s0 + ", 0", out v0); Assert.False(b0); Assert.Throws <NullReferenceException>(() => { hvec2.Parse(null); }); Assert.Throws <FormatException>(() => { hvec2.Parse(""); }); Assert.Throws <FormatException>(() => { hvec2.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 = hvec2.Parse(s3, "; ", NumberStyles.Number); var v4 = hvec2.Parse(s4, "; ", NumberStyles.Number, CultureInfo.InvariantCulture); Assert.AreEqual(v, v3); Assert.AreEqual(v, v4); var b4 = hvec2.TryParse(s4, "; ", NumberStyles.Number, CultureInfo.InvariantCulture, out v4); Assert.That(b4); Assert.AreEqual(v, v4); }
/// <summary> /// Constructs this matrix from a series of column vectors. Non-overwritten fields are from an Identity matrix. /// </summary> public hmat4x3(hvec2 c0, hvec2 c1, hvec2 c2, hvec2 c3) { this.m00 = c0.x; this.m01 = c0.y; this.m02 = Half.Zero; this.m10 = c1.x; this.m11 = c1.y; this.m12 = Half.Zero; this.m20 = c2.x; this.m21 = c2.y; this.m22 = Half.One; this.m30 = c3.x; this.m31 = c3.y; this.m32 = Half.Zero; }
/// <summary> /// Constructs this matrix from a series of column vectors. Non-overwritten fields are from an Identity matrix. /// </summary> public hmat3x4(hvec2 c0, hvec2 c1) { this.m00 = c0.x; this.m01 = c0.y; this.m02 = Half.Zero; this.m03 = Half.Zero; this.m10 = c1.x; this.m11 = c1.y; this.m12 = Half.Zero; this.m13 = Half.Zero; this.m20 = Half.Zero; this.m21 = Half.Zero; this.m22 = Half.One; this.m23 = Half.Zero; }
public void InlineRGBA() { { var v0 = new hvec2(new Half(6), new Half(6.5)); var v1 = new Half(new Half(-7)); var v2 = v0.r; v0.r = v1; var v3 = v0.r; Assert.AreEqual(v1, v3); Assert.AreEqual(new Half(-7), v0.x); Assert.AreEqual(new Half(6.5), v0.y); Assert.AreEqual(new Half(6), v2); } { var v0 = new hvec2(new Half(6), new Half(-0.5)); var v1 = new Half(new Half(-6)); var v2 = v0.g; v0.g = v1; var v3 = v0.g; Assert.AreEqual(v1, v3); Assert.AreEqual(new Half(6), v0.x); Assert.AreEqual(new Half(-6), v0.y); Assert.AreEqual(new Half(-0.5), v2); } { var v0 = new hvec2(new Half(1.5), Half.One); var v1 = new hvec2(new Half(6.5), new Half(-8)); var v2 = v0.rg; v0.rg = v1; var v3 = v0.rg; Assert.AreEqual(v1, v3); Assert.AreEqual(new Half(6.5), v0.x); Assert.AreEqual(new Half(-8), v0.y); Assert.AreEqual(new Half(1.5), v2.x); Assert.AreEqual(Half.One, v2.y); } }
public void InlineXYZW() { { var v0 = new hvec2(new Half(-4.5), new Half(-9.5)); var v1 = new hvec2(new Half(-6.5), new Half(9)); var v2 = v0.xy; v0.xy = v1; var v3 = v0.xy; Assert.AreEqual(v1, v3); Assert.AreEqual(new Half(-6.5), v0.x); Assert.AreEqual(new Half(9), v0.y); Assert.AreEqual(new Half(-4.5), v2.x); Assert.AreEqual(new Half(-9.5), v2.y); } }
public void InvariantNorm() { { var v0 = new hvec2(new Half(9), new Half(-6.5)); Assert.LessOrEqual(v0.NormMax, v0.Norm); } { var v0 = new hvec2(new Half(-0.5), new Half(-3)); Assert.LessOrEqual(v0.NormMax, v0.Norm); } { var v0 = new hvec2(new Half(5.5), new Half(4.5)); Assert.LessOrEqual(v0.NormMax, v0.Norm); } { var v0 = new hvec2(Half.One, new Half(3)); Assert.LessOrEqual(v0.NormMax, v0.Norm); } { var v0 = new hvec2(new Half(4.5), new Half(7.5)); Assert.LessOrEqual(v0.NormMax, v0.Norm); } { var v0 = new hvec2(new Half(-6), Half.One); Assert.LessOrEqual(v0.NormMax, v0.Norm); } { var v0 = new hvec2(new Half(1.5), new Half(-4.5)); Assert.LessOrEqual(v0.NormMax, v0.Norm); } { var v0 = new hvec2(new Half(-1), new Half(5)); Assert.LessOrEqual(v0.NormMax, v0.Norm); } { var v0 = new hvec2(new Half(4), new Half(-6)); Assert.LessOrEqual(v0.NormMax, v0.Norm); } { var v0 = new hvec2(new Half(-7), new Half(3.5)); Assert.LessOrEqual(v0.NormMax, v0.Norm); } }
public void InvariantIdNeg() { { var v0 = new hvec2(new Half(5), new Half(-3)); Assert.AreEqual(v0, -(-v0)); } { var v0 = new hvec2(new Half(-7), new Half(-7)); Assert.AreEqual(v0, -(-v0)); } { var v0 = new hvec2(Half.One, new Half(8.5)); Assert.AreEqual(v0, -(-v0)); } { var v0 = new hvec2(new Half(9.5), new Half(8)); Assert.AreEqual(v0, -(-v0)); } { var v0 = new hvec2(new Half(5), new Half(-9.5)); Assert.AreEqual(v0, -(-v0)); } { var v0 = new hvec2(new Half(3.5), new Half(9.5)); Assert.AreEqual(v0, -(-v0)); } { var v0 = new hvec2(new Half(-1), new Half(-1)); Assert.AreEqual(v0, -(-v0)); } { var v0 = new hvec2(new Half(-8), new Half(-0.5)); Assert.AreEqual(v0, -(-v0)); } { var v0 = new hvec2(new Half(-0.5), new Half(5.5)); Assert.AreEqual(v0, -(-v0)); } { var v0 = new hvec2(new Half(3.5), new Half(-1.5)); Assert.AreEqual(v0, -(-v0)); } }
public void InvariantTriple() { { var v0 = new hvec2(new Half(-2), new Half(-4)); Assert.AreEqual(v0 + v0 + v0, 3 * v0); } { var v0 = new hvec2(new Half(7), new Half(1.5)); Assert.AreEqual(v0 + v0 + v0, 3 * v0); } { var v0 = new hvec2(Half.One, new Half(2.5)); Assert.AreEqual(v0 + v0 + v0, 3 * v0); } { var v0 = new hvec2(new Half(-5), new Half(-1.5)); Assert.AreEqual(v0 + v0 + v0, 3 * v0); } { var v0 = new hvec2(new Half(6.5), new Half(-2.5)); Assert.AreEqual(v0 + v0 + v0, 3 * v0); } { var v0 = new hvec2(new Half(-8.5), new Half(-5.5)); Assert.AreEqual(v0 + v0 + v0, 3 * v0); } { var v0 = new hvec2(new Half(-1.5), new Half(6.5)); Assert.AreEqual(v0 + v0 + v0, 3 * v0); } { var v0 = new hvec2(new Half(4.5), new Half(-4.5)); Assert.AreEqual(v0 + v0 + v0, 3 * v0); } { var v0 = new hvec2(new Half(-1.5), new Half(4.5)); Assert.AreEqual(v0 + v0 + v0, 3 * v0); } { var v0 = new hvec2(new Half(-2), new Half(8)); Assert.AreEqual(v0 + v0 + v0, 3 * v0); } }
public void InvariantDouble() { { var v0 = new hvec2(new Half(5.5), new Half(-3)); Assert.AreEqual(v0 + v0, 2 * v0); } { var v0 = new hvec2(new Half(-2.5), new Half(-2)); Assert.AreEqual(v0 + v0, 2 * v0); } { var v0 = new hvec2(new Half(-8), new Half(4.5)); Assert.AreEqual(v0 + v0, 2 * v0); } { var v0 = new hvec2(new Half(5), new Half(8)); Assert.AreEqual(v0 + v0, 2 * v0); } { var v0 = new hvec2(new Half(-6.5), new Half(7)); Assert.AreEqual(v0 + v0, 2 * v0); } { var v0 = new hvec2(new Half(-6.5), new Half(1.5)); Assert.AreEqual(v0 + v0, 2 * v0); } { var v0 = new hvec2(new Half(-9), new Half(-7.5)); Assert.AreEqual(v0 + v0, 2 * v0); } { var v0 = new hvec2(new Half(7.5), new Half(-9.5)); Assert.AreEqual(v0 + v0, 2 * v0); } { var v0 = new hvec2(new Half(-2.5), new Half(8.5)); Assert.AreEqual(v0 + v0, 2 * v0); } { var v0 = new hvec2(new Half(9), new Half(-5.5)); Assert.AreEqual(v0 + v0, 2 * v0); } }
public void InvariantId() { { var v0 = new hvec2(new Half(7.5), new Half(-5)); Assert.AreEqual(v0, +v0); } { var v0 = new hvec2(new Half(-4), new Half(-1)); Assert.AreEqual(v0, +v0); } { var v0 = new hvec2(new Half(4), new Half(3)); Assert.AreEqual(v0, +v0); } { var v0 = new hvec2(new Half(4), new Half(3.5)); Assert.AreEqual(v0, +v0); } { var v0 = new hvec2(new Half(0.5), new Half(0.5)); Assert.AreEqual(v0, +v0); } { var v0 = new hvec2(new Half(-1), new Half(5)); Assert.AreEqual(v0, +v0); } { var v0 = new hvec2(new Half(8), new Half(-0.5)); Assert.AreEqual(v0, +v0); } { var v0 = new hvec2(new Half(-3.5), new Half(-2)); Assert.AreEqual(v0, +v0); } { var v0 = new hvec2(new Half(2), new Half(-8.5)); Assert.AreEqual(v0, +v0); } { var v0 = new hvec2(new Half(5), new Half(-6)); Assert.AreEqual(v0, +v0); } }
/// <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 hmat2x4 OuterProduct(hvec4 c, hvec2 r) => hvec4.OuterProduct(c, r);
/// <summary> /// Returns a bvec2 from component-wise application of NotEqual (lhs != rhs). /// </summary> public static bvec2 NotEqual(hvec2 lhs, hvec2 rhs) => hvec2.NotEqual(lhs, rhs);
public void InvariantAssociativeNeg() { { var v0 = new hvec2(new Half(-5), new Half(-9.5)); var v1 = new hvec2(new Half(2), Half.One); var v2 = new hvec2(new Half(-0.5), new Half(9)); Assert.AreEqual(v0 * (v1 - v2), v0 * v1 - v0 * v2); } { var v0 = new hvec2(new Half(9), new Half(-4.5)); var v1 = new hvec2(Half.Zero, new Half(-7)); var v2 = new hvec2(new Half(-4.5), new Half(5)); Assert.AreEqual(v0 * (v1 - v2), v0 * v1 - v0 * v2); } { var v0 = new hvec2(new Half(-1.5), new Half(4)); var v1 = new hvec2(new Half(-4.5), new Half(-6)); var v2 = new hvec2(new Half(4.5), new Half(-6.5)); Assert.AreEqual(v0 * (v1 - v2), v0 * v1 - v0 * v2); } { var v0 = new hvec2(new Half(7.5), new Half(8)); var v1 = new hvec2(new Half(6), Half.One); var v2 = new hvec2(new Half(-9.5), new Half(1.5)); Assert.AreEqual(v0 * (v1 - v2), v0 * v1 - v0 * v2); } { var v0 = new hvec2(new Half(5.5), new Half(-4)); var v1 = new hvec2(new Half(-6.5), new Half(0.5)); var v2 = new hvec2(new Half(7), new Half(-3.5)); Assert.AreEqual(v0 * (v1 - v2), v0 * v1 - v0 * v2); } { var v0 = new hvec2(new Half(5), new Half(5)); var v1 = new hvec2(new Half(-6), new Half(5.5)); var v2 = new hvec2(new Half(-4), new Half(8.5)); Assert.AreEqual(v0 * (v1 - v2), v0 * v1 - v0 * v2); } { var v0 = new hvec2(new Half(-8.5), new Half(-1.5)); var v1 = new hvec2(new Half(7.5), Half.One); var v2 = new hvec2(new Half(-4.5), new Half(2.5)); Assert.AreEqual(v0 * (v1 - v2), v0 * v1 - v0 * v2); } { var v0 = new hvec2(Half.One, new Half(2)); var v1 = new hvec2(new Half(-5), new Half(9)); var v2 = new hvec2(new Half(9), new Half(-4.5)); Assert.AreEqual(v0 * (v1 - v2), v0 * v1 - v0 * v2); } { var v0 = new hvec2(new Half(9.5), Half.Zero); var v1 = new hvec2(new Half(-4), new Half(-1.5)); var v2 = new hvec2(new Half(-2.5), new Half(-5)); Assert.AreEqual(v0 * (v1 - v2), v0 * v1 - v0 * v2); } { var v0 = new hvec2(new Half(-5.5), new Half(-4)); var v1 = new hvec2(new Half(9.5), new Half(-1)); var v2 = new hvec2(new Half(6), new Half(-5)); Assert.AreEqual(v0 * (v1 - v2), v0 * v1 - v0 * v2); } }
/// <summary> /// Returns a bvec2 from component-wise application of Equal (lhs == rhs). /// </summary> public static bvec2 Equal(hvec2 lhs, hvec2 rhs) => hvec2.Equal(lhs, rhs);
public void Indexer() { var v = new hvec2(new Half(8.5), new Half(5.5)); Assert.AreEqual(new Half(8.5), v[0]); Assert.AreEqual(new Half(5.5), v[1]); Assert.Throws <ArgumentOutOfRangeException>(() => { var s = v[-2147483648]; }); Assert.Throws <ArgumentOutOfRangeException>(() => { v[-2147483648] = Half.Zero; }); Assert.Throws <ArgumentOutOfRangeException>(() => { var s = v[-1]; }); Assert.Throws <ArgumentOutOfRangeException>(() => { v[-1] = Half.Zero; }); Assert.Throws <ArgumentOutOfRangeException>(() => { var s = v[2]; }); Assert.Throws <ArgumentOutOfRangeException>(() => { v[2] = Half.Zero; }); Assert.Throws <ArgumentOutOfRangeException>(() => { var s = v[2147483647]; }); Assert.Throws <ArgumentOutOfRangeException>(() => { v[2147483647] = Half.Zero; }); Assert.Throws <ArgumentOutOfRangeException>(() => { var s = v[5]; }); Assert.Throws <ArgumentOutOfRangeException>(() => { v[5] = Half.Zero; }); v[1] = Half.Zero; Assert.AreEqual(Half.Zero, v[1]); v[1] = Half.One; Assert.AreEqual(Half.One, v[1]); v[1] = new Half(2); Assert.AreEqual(new Half(2), v[1]); v[1] = new Half(3); Assert.AreEqual(new Half(3), v[1]); v[0] = new Half(4); Assert.AreEqual(new Half(4), v[0]); v[1] = new Half(5); Assert.AreEqual(new Half(5), v[1]); v[1] = new Half(6); Assert.AreEqual(new Half(6), v[1]); v[0] = new Half(7); Assert.AreEqual(new Half(7), v[0]); v[0] = new Half(8); Assert.AreEqual(new Half(8), v[0]); v[0] = new Half(9); Assert.AreEqual(new Half(9), v[0]); v[1] = new Half(-1); Assert.AreEqual(new Half(-1), v[1]); v[1] = new Half(-2); Assert.AreEqual(new Half(-2), v[1]); v[0] = new Half(-3); Assert.AreEqual(new Half(-3), v[0]); v[0] = new Half(-4); Assert.AreEqual(new Half(-4), v[0]); v[0] = new Half(-5); Assert.AreEqual(new Half(-5), v[0]); v[0] = new Half(-6); Assert.AreEqual(new Half(-6), v[0]); v[1] = new Half(-7); Assert.AreEqual(new Half(-7), v[1]); v[1] = new Half(-8); Assert.AreEqual(new Half(-8), v[1]); v[1] = new Half(-9); Assert.AreEqual(new Half(-9), v[1]); v[1] = new Half(-9.5); Assert.AreEqual(new Half(-9.5), v[1]); v[1] = new Half(-8.5); Assert.AreEqual(new Half(-8.5), v[1]); v[0] = new Half(-7.5); Assert.AreEqual(new Half(-7.5), v[0]); v[1] = new Half(-6.5); Assert.AreEqual(new Half(-6.5), v[1]); v[0] = new Half(-5.5); Assert.AreEqual(new Half(-5.5), v[0]); v[0] = new Half(-4.5); Assert.AreEqual(new Half(-4.5), v[0]); v[0] = new Half(-3.5); Assert.AreEqual(new Half(-3.5), v[0]); v[0] = new Half(-2.5); Assert.AreEqual(new Half(-2.5), v[0]); v[1] = new Half(-1.5); Assert.AreEqual(new Half(-1.5), v[1]); v[0] = new Half(-0.5); Assert.AreEqual(new Half(-0.5), v[0]); v[0] = new Half(0.5); Assert.AreEqual(new Half(0.5), v[0]); v[1] = new Half(1.5); Assert.AreEqual(new Half(1.5), v[1]); v[1] = new Half(2.5); Assert.AreEqual(new Half(2.5), v[1]); v[1] = new Half(3.5); Assert.AreEqual(new Half(3.5), v[1]); v[1] = new Half(4.5); Assert.AreEqual(new Half(4.5), v[1]); v[0] = new Half(5.5); Assert.AreEqual(new Half(5.5), v[0]); v[1] = new Half(6.5); Assert.AreEqual(new Half(6.5), v[1]); v[0] = new Half(7.5); Assert.AreEqual(new Half(7.5), v[0]); v[1] = new Half(8.5); Assert.AreEqual(new Half(8.5), v[1]); v[0] = new Half(9.5); Assert.AreEqual(new Half(9.5), v[0]); }
/// <summary> /// Returns a bvec2 from component-wise application of GreaterThan (lhs > rhs). /// </summary> public static bvec2 GreaterThan(hvec2 lhs, hvec2 rhs) => hvec2.GreaterThan(lhs, rhs);