X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=dev4%2Fpsychlops%2Fcore%2Fmath%2Finterval.cs;h=843338f1f4df9cbd5b9f79f12072db19abd71ea2;hb=70d45b57ef59585bb8b82123d054014255d260ca;hp=0b9a22d35a84d05f90bec9c27a9d76456af0ec4d;hpb=c37e9a5c4af3c1917504ba88864ebcd6c536a0d5;p=psychlops%2Fsilverlight.git diff --git a/dev4/psychlops/core/math/interval.cs b/dev4/psychlops/core/math/interval.cs index 0b9a22d..843338f 100644 --- a/dev4/psychlops/core/math/interval.cs +++ b/dev4/psychlops/core/math/interval.cs @@ -9,7 +9,7 @@ namespace Psychlops public enum OPERATOR { CLOSE, OPEN }; public const OPERATOR CLOSE = OPERATOR.CLOSE, OPEN = OPERATOR.OPEN; public struct VAL { - public double val; + public double value; public OPERATOR op; /*public VAL() { @@ -18,12 +18,12 @@ namespace Psychlops }*/ public VAL(double v, OPERATOR o) { - val = v; + value = v; op = o; } public bool bounded() { - return !Double.IsNaN(val) && (!Double.IsInfinity(val) || op == OPERATOR.OPEN); + return !Double.IsNaN(value) && (!Double.IsInfinity(value) || op == OPERATOR.OPEN); } } public VAL begin, end; @@ -36,43 +36,65 @@ namespace Psychlops }*/ public Interval(double floor_val, double ceil_val) { - begin.val = floor_val; + begin.value = floor_val; begin.op = OPERATOR.CLOSE; - end.val = ceil_val; + end.value = ceil_val; end.op = OPERATOR.CLOSE; } public Interval(double floor_val, OPERATOR floor_op, double ceil_val, OPERATOR ceil_op) { - begin.val = floor_val; + begin.value = floor_val; begin.op = floor_op; - end.val = ceil_val; + end.value = ceil_val; end.op = ceil_op; } - /* - public int int_floor(); - public int int_floor(int minval); - public int int_ceil(); - public int int_ceil(int maxval); - */ + + public int int_floor() + { + double v = Math.ceil(begin.value); + if (begin.op == OPEN && v == begin.value) { return (int)v + 1; } + else return (int)v; + } + public int int_floor(int minval) + { + if(begin.valuemaxval) return maxval; + double v = Math.floor(end.value); + if (end.op == OPEN && v == end.value) { return (int)v - 1; } + else return (int)v; + } + bool includes(double val) { bool result = false; switch(begin.op) { case OPERATOR.CLOSE: - result = begin.val<=val ? true : false; - break; + result = begin.value <= val ? true : false; + break; case OPERATOR.OPEN: - result = begin.val=val ? true : false ); - break; + result = result && (end.value >= val ? true : false); + break; case OPERATOR.OPEN: - result = result && ( end.val>val ? true : false ); - break; + result = result && (end.value > val ? true : false); + break; } return result; } @@ -88,13 +110,13 @@ namespace Psychlops // return new IntervalIEnumerable(this, steps); Interval it = this; long front_step = (it.begin.op == Interval.OPERATOR.CLOSE ? -1 : 0); - long back_step = (long)System.Math.Floor((it.end.val - it.begin.val) / steps); - if (it.end.op == Interval.OPERATOR.OPEN && 0 == System.Math.IEEERemainder(it.end.val - it.begin.val, steps)) + long back_step = (long)System.Math.Floor((it.end.value - it.begin.value) / steps); + if (it.end.op == Interval.OPERATOR.OPEN && 0 == System.Math.IEEERemainder(it.end.value - it.begin.value, steps)) { back_step -= 1; } while (front_step <= back_step) - yield return steps * front_step + it.begin.val; + yield return steps * front_step + it.begin.value; } @@ -147,35 +169,35 @@ namespace Psychlops public static IntervalAcc operator <(double val, IntervalAcc rng) { - return new IntervalAcc { instance = new Interval(val, Interval.OPERATOR.OPEN, rng.instance.end.val, rng.instance.end.op) }; + return new IntervalAcc { instance = new Interval(val, Interval.OPERATOR.OPEN, rng.instance.end.value, rng.instance.end.op) }; } public static IntervalAcc operator <=(double val, IntervalAcc rng) { - return new IntervalAcc { instance = new Interval(val, Interval.OPERATOR.CLOSE, rng.instance.end.val, rng.instance.end.op) }; + return new IntervalAcc { instance = new Interval(val, Interval.OPERATOR.CLOSE, rng.instance.end.value, rng.instance.end.op) }; } public static IntervalAcc operator >(double val, IntervalAcc rng) { - return new IntervalAcc { instance = new Interval(rng.instance.begin.val, rng.instance.begin.op, val, Interval.OPERATOR.OPEN) }; + return new IntervalAcc { instance = new Interval(rng.instance.begin.value, rng.instance.begin.op, val, Interval.OPERATOR.OPEN) }; } public static IntervalAcc operator >=(double val, IntervalAcc rng) { - return new IntervalAcc { instance = new Interval(rng.instance.begin.val, rng.instance.begin.op, val, Interval.OPERATOR.CLOSE) }; + return new IntervalAcc { instance = new Interval(rng.instance.begin.value, rng.instance.begin.op, val, Interval.OPERATOR.CLOSE) }; } public static IntervalAcc operator <(IntervalAcc rng, double val) { - return new IntervalAcc { instance = new Interval(rng.instance.begin.val, rng.instance.begin.op, val, Interval.OPERATOR.OPEN) }; + return new IntervalAcc { instance = new Interval(rng.instance.begin.value, rng.instance.begin.op, val, Interval.OPERATOR.OPEN) }; } public static IntervalAcc operator <=(IntervalAcc rng, double val) { - return new IntervalAcc { instance = new Interval(rng.instance.begin.val, rng.instance.begin.op, val, Interval.OPERATOR.CLOSE) }; + return new IntervalAcc { instance = new Interval(rng.instance.begin.value, rng.instance.begin.op, val, Interval.OPERATOR.CLOSE) }; } public static IntervalAcc operator >(IntervalAcc rng, double val) { - return new IntervalAcc { instance = new Interval(val, Interval.OPERATOR.OPEN, rng.instance.end.val, rng.instance.end.op) }; + return new IntervalAcc { instance = new Interval(val, Interval.OPERATOR.OPEN, rng.instance.end.value, rng.instance.end.op) }; } public static IntervalAcc operator >=(IntervalAcc rng, double val) { - return new IntervalAcc { instance = new Interval(val, Interval.OPERATOR.CLOSE, rng.instance.end.val, rng.instance.end.op) }; + return new IntervalAcc { instance = new Interval(val, Interval.OPERATOR.CLOSE, rng.instance.end.value, rng.instance.end.op) }; } public static implicit operator Interval(IntervalAcc rhs)