public SpObject( Double m = default(Double), SpVector p = default(SpVector), SpVector s = default(SpVector), SpVector a = default(SpVector), IEnumerable<SpVector> fs = null) { Forces = new List<SpVector>(fs ?? new List<SpVector>()); M = m; P = p ?? new SpVector(); S = s ?? new SpVector(); A = a ?? new SpVector(); }
public void TestAlmostEquals() { Double x = 5; Assert.IsTrue(x.AlmostEquals(4, 1.5)); Assert.IsTrue(x.AlmostEquals(6, 1.5)); Assert.IsFalse(x.AlmostEquals(3, 1.5)); Assert.IsFalse(x.AlmostEquals(7, 1.5)); SpVector v = new SpVector(100, 200, 300); Assert.IsTrue(v.AlmostEquals(new SpVector(110, 220, 330), v * 0.1)); Assert.IsTrue(v.AlmostEquals(new SpVector(90, 180, 270), v * 0.1)); Assert.IsFalse(v.AlmostEquals(new SpVector(110, 220, 330), v * 0.05)); Assert.IsFalse(v.AlmostEquals(new SpVector(90, 180, 270), v * 0.05)); v = new SpVector(100, 0, 0); Assert.IsTrue(v.AlmostEquals(new SpVector(100, 10, 0), v * 0.1)); Assert.IsTrue(v.AlmostEquals(new SpVector(105, 5, 0), v * 0.1)); Assert.IsFalse(v.AlmostEquals(new SpVector(100, 10, 0), v * 0.05)); Assert.IsFalse(v.AlmostEquals(new SpVector(105, 5, 0), v * 0.05)); }
public SpVector(SpVector copy) : this(copy != null ? copy.X : default(Double), copy != null ? copy.Y : default(Double), copy != null ? copy.Z : default(Double)) { }
protected bool Equals(SpVector obj) { if (obj == null) return false; else return this.X.Equals(obj.X) && this.Y.Equals(obj.Y) && this.Z.Equals(obj.Z); }
public virtual void CalulateAcceleration() { // On calcule l'accelerations du tour selon la loi "somme des forces = M * a" SpVector sumF = new SpVector(); foreach (var f in Forces) sumF += f; this.A = sumF / M; }
public virtual void Move() { // On calcule l'accelerations du tour selon la loi "somme des forces = M * a" CalulateAcceleration(); // On applique le mouvement this.S += this.A; this.P += this.S; }
public static Double AlmostRatio(this SpVector v, SpVector v2) { return (v2 - v).Length2 / v.Length2; }
public static bool AlmostEquals(this SpVector v, SpVector v2, SpVector approx) { return (v2 - v).Length2 <= approx.Length2; }