public override bool AreEqual(FloatWithSize a, FloatWithSize b) { //if (a == null && b == null) // return true; //if (a == null || b == null) // return false; //if ((a.MinVal <= b.MaxVal && b.MaxVal <= a.MaxVal) || // (a.MinVal <= b.MinVal && b.MinVal <= a.MaxVal)) // return true; //else if ((b.MinVal <= a.MaxVal && a.MaxVal <= b.MaxVal) || // (b.MinVal <= a.MinVal && a.MinVal <= b.MaxVal)) // return true; //return false; //if ((b.MinVal <= a.MinVal + floatEpsilon && b.MaxVal <= a.MinVal + floatEpsilon) ||//b on left side // (a.MinVal <= b.MinVal + floatEpsilon && a.MaxVal <= b.MinVal + floatEpsilon))// a on left side // return false; if ((b.MinVal.CompareTo(a.MinVal, floatEpsilon) <= 0 && b.MaxVal.CompareTo(a.MinVal, floatEpsilon) <= 0) || //b on left side (b.MinVal.CompareTo(a.MaxVal, floatEpsilon) >= 0 && b.MaxVal.CompareTo(a.MaxVal, floatEpsilon) >= 0)) // b on right side { return(false); } return(true); //return a.MaxVal.CompareTo(b.MinVal,floatEpsilon) >= 0 && b.MaxVal.CompareTo(a.MinVal,floatEpsilon) >= 0; //return (a.MinVal <= b.MinVal && a.MaxVal > b.MinVal) || (b.MinVal <= a.MinVal && b.MaxVal > a.MinVal); }
public override FloatWithSize DistanceBetweenPoints(FloatWithSize a, FloatWithSize b) { if (IsIntersects(a, b) || IsIntersects(b, a)) { return(Zero); } if (a.MaxVal.CompareTo(b.MinVal, floatEpsilon) < 0) { return(new FloatWithSize(b.MinVal - a.MaxVal, b.MinVal - a.MaxVal).Abs()); } if (b.MaxVal.CompareTo(a.MinVal, floatEpsilon) < 0) { return(new FloatWithSize(a.MinVal - b.MaxVal, a.MinVal - b.MaxVal).Abs()); } return(Subtract(a, b).Abs()); //if (a.MinVal < b.MinVal) //{ // return new FloatWithSize(System.Math.Min(0, b.MinVal - a.MaxVal)); //} //else //{ // return new FloatWithSize(System.Math.Min(0, a.MaxVal - b.MaxVal)); //} }
public override FloatWithSize DistanceBetweenPoints(FloatWithSize[] a, FloatWithSize[] b) { FloatWithSize distance = Zero; int dimensions = a.Length; // Return the absolute distance bewteen 2 hyper points for (var dimension = 0; dimension < dimensions; dimension++) { FloatWithSize distOnThisAxis = Subtract(a[dimension], b[dimension]); FloatWithSize distOnThisAxisSquared = Multiply(distOnThisAxis, distOnThisAxis); distance = Add(distance, distOnThisAxisSquared); } return(distance); }
public override int Compare(FloatWithSize a, FloatWithSize b) { //if (a == null) // if (b == null) // return 0; // else // return -1; //else if (b == null) // return 1; if (AreEqual(a, b)) { return(0); } //if (a.MaxVal < b.MinVal) // return -1; //return 1; //return a.MidVal.CompareTo(b.MidVal); //if (System.Math.Abs(a.MidVal - b.MidVal) < floatEpsilon) // return 0; //return a.MidVal.CompareTo(b.MidVal); return(a.MidVal.CompareTo(b.MidVal, floatEpsilon)); }
public override FloatWithSize Subtract(FloatWithSize a, FloatWithSize b) { return(new FloatWithSize(a.MinVal - b.MinVal, a.MaxVal - b.MaxVal)); }
public override FloatWithSize Multiply(FloatWithSize a, FloatWithSize b) { return(new FloatWithSize(a.MinVal * b.MinVal, a.MaxVal * b.MaxVal)); //var delta = b.MaxVal - b.MinVal; //return new FloatWithSize(a.MinVal * delta, a.MaxVal * delta); }
public override FloatWithSize Add(FloatWithSize a, FloatWithSize b) { return(a + b); }
private bool IsIntersects(FloatWithSize a, FloatWithSize b) { return(AreEqual(a, b)); }