public override bool TryGetMember(GetMemberBinder binder, out object result) { var array = binder.Name.Select(c => { double value; if (_members.TryGetValue(c, out value)) { return(value); } throw new Exception(String.Format("Member Does Not Exist: {0}", c)); }).ToArray(); switch (binder.Name.Length) { case 4: result = new Vect4(array); break; case 3: result = new Vect3(array); break; case 2: result = new Vect2(array); break; case 1: result = array[0]; break; default: throw new Exception("Invalid Length Swizzle"); } return(true); }
public Swizzle(Vect4 v) { _members.Add('X', v.X); _members.Add('Y', v.Y); _members.Add('Z', v.Z); _members.Add('W', v.W); }
public Vect4 ExteriorProduct(Vect4 v) { throw new NotImplementedException(); }
public double DotProduct(Vect4 v) { return(X * v.X + Y * v.Y + Z * v.Z + W * v.W); }
public Vect4 Lerp(Vect4 end, double t) { return((1 - t) * this + t * end); }
protected bool Equals(Vect4 other) { return(X.NearlyEquals(other.X) && Y.NearlyEquals(other.Y) && Z.NearlyEquals(other.Z) && W.NearlyEquals(other.W)); }