Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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));
            //}
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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));
        }
Ejemplo n.º 5
0
 public override FloatWithSize Subtract(FloatWithSize a, FloatWithSize b)
 {
     return(new FloatWithSize(a.MinVal - b.MinVal, a.MaxVal - b.MaxVal));
 }
Ejemplo n.º 6
0
 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);
 }
Ejemplo n.º 7
0
 public override FloatWithSize Add(FloatWithSize a, FloatWithSize b)
 {
     return(a + b);
 }
Ejemplo n.º 8
0
 private bool IsIntersects(FloatWithSize a, FloatWithSize b)
 {
     return(AreEqual(a, b));
 }