/// <summary> /// /// </summary> /// <param name="a"></param> /// <param name="b"></param> /// <returns></returns> public static Interval3d Union(Interval3d a, Interval3d b) { a.X = Interval1d.Union(a.X, b.X); a.Y = Interval1d.Union(a.Y, b.Y); a.Z = Interval1d.Union(a.Z, b.Z); return(a); }
/// <summary> /// Returns a random vector which has components within the given interval. /// </summary> /// <param name="random"></param> /// <param name="interval"></param> /// <returns></returns> public static Vec3d NextVec3d(this Random random, Interval1d interval) { return(new Vec3d( interval.Evaluate(random.NextDouble()), interval.Evaluate(random.NextDouble()), interval.Evaluate(random.NextDouble()))); }
/// <summary> /// /// </summary> /// <param name="point"></param> /// <param name="from"></param> /// <param name="to"></param> /// <returns></returns> public static Vec3d Remap(Vec3d point, Interval3d from, Interval3d to) { point.X = Interval1d.Remap(point.X, from.X, to.X); point.Y = Interval1d.Remap(point.Y, from.Y, to.Y); point.Y = Interval1d.Remap(point.Z, from.Z, to.Z); return(point); }
/// <summary> /// /// </summary> /// <param name="d0"></param> /// <param name="d1"></param> /// <returns></returns> public static Interval3d Intersect(Interval3d d0, Interval3d d1) { d0.X = Interval1d.Intersect(d0.X, d1.X); d0.Y = Interval1d.Intersect(d0.Y, d1.Y); d0.Z = Interval1d.Intersect(d0.Z, d1.Z); return(d0); }
/// <summary> /// /// </summary> /// <param name="t"></param> /// <param name="from"></param> /// <param name="to"></param> /// <returns></returns> public static double Remap(double t, Interval1d from, Interval1d to) { if (!from.IsValid) { throw new InvalidOperationException("Can't remap from an invalid interval"); } return(SlurMath.Remap(t, from.A, from.B, to.A, to.B)); }
/// <summary> /// /// </summary> /// <param name="points"></param> public Interval2d(IEnumerable <Vec2d> points) : this() { var p = points.First(); X = new Interval1d(p.X); Y = new Interval1d(p.Y); Include(points.Skip(1)); }
/// <summary> /// Returns the region of a that is also in b. /// </summary> /// <param name="a"></param> /// <param name="b"></param> /// <returns></returns> public static Interval1d Intersect(Interval1d a, Interval1d b) { throw new NotImplementedException(); }
/// <summary> /// Returns the union of a and b. /// </summary> /// <param name="a"></param> /// <param name="b"></param> /// <returns></returns> public static Interval1d Union(Interval1d a, Interval1d b) { a.Include(b.A); a.Include(b.B); return(a); }
/// <summary> /// /// </summary> /// <param name="x0"></param> /// <param name="x1"></param> /// <param name="y0"></param> /// <param name="y1"></param> /// <param name="z0"></param> /// <param name="z1"></param> public Interval3d(double x0, double x1, double y0, double y1, double z0, double z1) { X = new Interval1d(x0, x1); Y = new Interval1d(y0, y1); Z = new Interval1d(z0, z1); }
/// <summary> /// /// </summary> /// <param name="center"></param> /// <param name="offsetX"></param> /// <param name="offsetY"></param> /// <param name="offsetZ"></param> public Interval3d(Vec3d center, double offsetX, double offsetY, double offsetZ) { X = new Interval1d(center.X - offsetX, center.X + offsetX); Y = new Interval1d(center.Y - offsetY, center.Y + offsetY); Z = new Interval1d(center.Z - offsetZ, center.Z + offsetZ); }
/// <summary> /// /// </summary> /// <param name="a"></param> /// <param name="b"></param> public Interval3d(Vec3d a, Vec3d b) { X = new Interval1d(a.X, b.X); Y = new Interval1d(a.Y, b.Y); Z = new Interval1d(a.Z, b.Z); }
/// <summary> /// /// </summary> /// <param name="ab"></param> public Interval3d(Vec3d ab) { X = new Interval1d(ab.X); Y = new Interval1d(ab.Y); Z = new Interval1d(ab.Z); }
/// <summary> /// /// </summary> /// <param name="ab"></param> public Interval2d(Vec2d ab) { X = new Interval1d(ab.X); Y = new Interval1d(ab.Y); }
/// <summary> /// Expands this interval to include another /// </summary> /// <param name="other"></param> public void Include(Interval1d other) { Include(other.A); Include(other.B); }
/// <summary> /// Returns the region of a that is not in b. /// </summary> /// <param name="a"></param> /// <param name="b"></param> /// <returns></returns> public static Interval1d Difference(Interval1d a, Interval1d b) { throw new NotImplementedException(); }
/// <summary> /// /// </summary> /// <param name="a"></param> /// <param name="b"></param> public Interval2d(Vec2d a, Vec2d b) { X = new Interval1d(a.X, b.X); Y = new Interval1d(a.Y, b.Y); }
/// <summary> /// /// </summary> /// <param name="point"></param> /// <param name="from"></param> /// <param name="to"></param> /// <returns></returns> public static Vec2d Remap(Vec2d point, Interval2d from, Interval2d to) { point.X = Interval1d.Remap(point.X, from.X, to.X); point.Y = Interval1d.Remap(point.Y, from.Y, to.Y); return(point); }
/// <summary> /// /// </summary> /// <param name="x0"></param> /// <param name="x1"></param> /// <param name="y0"></param> /// <param name="y1"></param> public Interval2d(double x0, double x1, double y0, double y1) { X = new Interval1d(x0, x1); Y = new Interval1d(y0, y1); }
/// <summary> /// /// </summary> /// <param name="center"></param> /// <param name="offsetX"></param> /// <param name="offsetY"></param> public Interval2d(Vec2d center, double offsetX, double offsetY) { X = new Interval1d(center.X - offsetX, center.X + offsetX); Y = new Interval1d(center.Y - offsetY, center.Y + offsetY); }
/// <summary> /// /// </summary> /// <param name="other"></param> /// <param name="tolerance"></param> /// <returns></returns> public bool ApproxEquals(Interval1d other, double tolerance = SlurMath.ZeroTolerance) { return(Math.Abs(other.A - A) < tolerance && Math.Abs(other.B - B) < tolerance); }
/// <summary> /// /// </summary> /// <param name="a"></param> /// <param name="b"></param> /// <returns></returns> public static Interval2d Union(Interval2d a, Interval2d b) { a.X = Interval1d.Union(a.X, b.X); a.Y = Interval1d.Union(a.Y, b.Y); return(a); }
/// <summary> /// /// </summary> /// <param name="x"></param> /// <param name="y"></param> /// <param name="z"></param> public Interval3d(Interval1d x, Interval1d y, Interval1d z) { this.X = x; this.Y = y; this.Z = z; }
/// <summary> /// /// </summary> /// <param name="x"></param> /// <param name="y"></param> public Interval2d(Interval1d x, Interval1d y) { this.X = x; this.Y = y; }