public Vector3Variable(string name, CSP p, Interval x, Interval y, Interval z) { Name = name; X = new FloatVariable(name + ".X", p, x); Y = new FloatVariable(name + ".Y", p, y); Z = new FloatVariable(name + ".Z", p, z); }
public void IntegerPowerIntervalTest() { var neg = new Interval(-2, -1); var pos = new Interval(1, 2); var cross = new Interval(-2, 2); Assert.AreEqual(new Interval(1, 1), neg ^ 0); Assert.AreEqual(neg, neg ^ 1); Assert.AreEqual(new Interval(1, 4), neg ^ 2); Assert.AreEqual(new Interval(1, 4), pos ^ 2); Assert.AreEqual(new Interval(0, 4), cross ^ 2); Assert.AreEqual(new Interval(-8, -1), neg ^ 3); Assert.AreEqual(new Interval(1, 8), pos ^ 3); }
public bool Contains(Interval i) { return this.Lower <= i.Lower && this.Upper >= i.Upper; }
public bool NearlyContains(Interval i, double epsilon) { return MathUtil.NearlyLE(this.Lower, i.Lower, epsilon) && MathUtil.NearlyGE(this.Upper, i.Upper, epsilon); }
public static Interval UnionOfIntersections(Interval intersector, Interval a, Interval b) { return UnionBound(Intersection(intersector, a), Intersection(intersector, b)); }
public static Interval UnionBound(Interval a, Interval b) { if (a.Empty) return b; if (b.Empty) return a; return new Interval(Math.Min(a.Lower, b.Lower), Math.Max(a.Upper, b.Upper)); }
public static Interval PositiveSqrt(Interval a) { Debug.Assert(a.Lower >= 0, "Attempt to take square root of a negative interval"); return new Interval(Math.Sqrt(a.Lower), Math.Sqrt(a.Upper)); }
public static Interval InvPower(Interval a, uint exponent) { if (exponent == 1) return a; var invExponent = 1.0 / exponent; if (exponent % 2 == 0) { // even exponent var lower = Math.Pow(Math.Max(0, a.Lower), invExponent); var upper = Math.Pow(Math.Max(0, a.Upper), invExponent); return new Interval(lower, upper); } // odd exponent return new Interval(NegativeTolerantPower(a.Lower, invExponent), NegativeTolerantPower(a.Upper, invExponent)); }
public static Interval Intersection(Interval a, Interval b) { return new Interval(Math.Max(a.Lower, b.Lower), Math.Min(a.Upper, b.Upper)); }