{\r
// protected System.Collections.Generic.Queue<Internal.PrimitiveFigure> stack;\r
internal Internal.PrimitiveFigure[] stack;\r
- internal int stackN;\r
+ internal int stackN = 0;\r
internal Line[] lineStack;\r
- internal int lineStackN;\r
+ internal int lineStackN = 0;\r
internal Rectangle[] rectStack;\r
- internal int rectStackN;\r
+ internal int rectStackN = 0;\r
internal Ellipse[] ellipseStack;\r
- internal int ellipseStackN;\r
+ internal int ellipseStackN = 0;\r
internal Polygon[] polygonStack;\r
- internal int polygonStackN;\r
+ internal int polygonStackN = 0;\r
internal Letters[] lettersStack;\r
- internal int lettersStackN;\r
+ internal int lettersStackN = 0;\r
internal Image[] imageStack;\r
- internal int imageStackN;\r
+ internal int imageStackN = 0;\r
internal Group[] groupStack;\r
- internal int groupStackN;\r
+ internal int groupStackN = 0;\r
\r
\r
public StackableDrawable()\r
api_canvas = default_api_canvas;\r
initialize(500, 500);\r
}\r
- public Canvas(Mode mod)\r
+ public Canvas(Mode mod) : base()\r
{\r
panel = default_panel;\r
api_canvas = default_api_canvas;\r
public enum OPERATOR { CLOSE, OPEN };\r
public const OPERATOR CLOSE = OPERATOR.CLOSE, OPEN = OPERATOR.OPEN;\r
public struct VAL {\r
- public double val;\r
+ public double value;\r
public OPERATOR op;\r
/*public VAL()\r
{\r
}*/\r
public VAL(double v, OPERATOR o)\r
{\r
- val = v;\r
+ value = v;\r
op = o;\r
}\r
public bool bounded()\r
{\r
- return !Double.IsNaN(val) && (!Double.IsInfinity(val) || op == OPERATOR.OPEN);\r
+ return !Double.IsNaN(value) && (!Double.IsInfinity(value) || op == OPERATOR.OPEN);\r
}\r
}\r
public VAL begin, end;\r
}*/\r
public Interval(double floor_val, double ceil_val)\r
{\r
- begin.val = floor_val;\r
+ begin.value = floor_val;\r
begin.op = OPERATOR.CLOSE;\r
- end.val = ceil_val;\r
+ end.value = ceil_val;\r
end.op = OPERATOR.CLOSE;\r
}\r
public Interval(double floor_val, OPERATOR floor_op, double ceil_val, OPERATOR ceil_op)\r
{\r
- begin.val = floor_val;\r
+ begin.value = floor_val;\r
begin.op = floor_op;\r
- end.val = ceil_val;\r
+ end.value = ceil_val;\r
end.op = ceil_op;\r
}\r
\r
- /*\r
- public int int_floor();\r
- public int int_floor(int minval);\r
- public int int_ceil();\r
- public int int_ceil(int maxval);\r
- */\r
+\r
+ public int int_floor()\r
+ {\r
+ double v = Math.ceil(begin.value);\r
+ if (begin.op == OPEN && v == begin.value) { return (int)v + 1; }\r
+ else return (int)v;\r
+ }\r
+ public int int_floor(int minval)\r
+ {\r
+ if(begin.value<minval) return minval;\r
+ double v = Math.ceil(begin.value);\r
+ if (begin.op == OPEN && v == begin.value) { return (int)v + 1; }\r
+ else return (int)v;\r
+ }\r
+ public int int_ceil()\r
+ {\r
+ double v = Math.floor(end.value);\r
+ if (end.op == OPEN && v == end.value) { return (int)v - 1; }\r
+ else return (int)v;\r
+ }\r
+ public int int_ceil(int maxval)\r
+ {\r
+ if(end.value>maxval) return maxval;\r
+ double v = Math.floor(end.value);\r
+ if (end.op == OPEN && v == end.value) { return (int)v - 1; }\r
+ else return (int)v;\r
+ }\r
+ \r
bool includes(double val)\r
{\r
bool result = false;\r
switch(begin.op) {\r
case OPERATOR.CLOSE:\r
- result = begin.val<=val ? true : false;\r
- break;\r
+ result = begin.value <= val ? true : false;\r
+ break;\r
case OPERATOR.OPEN:\r
- result = begin.val<val ? true : false;\r
- break;\r
+ result = begin.value < val ? true : false;\r
+ break;\r
}\r
switch(end.op) {\r
case OPERATOR.CLOSE:\r
- result = result && ( end.val>=val ? true : false );\r
- break;\r
+ result = result && (end.value >= val ? true : false);\r
+ break;\r
case OPERATOR.OPEN:\r
- result = result && ( end.val>val ? true : false );\r
- break;\r
+ result = result && (end.value > val ? true : false);\r
+ break;\r
}\r
return result;\r
}\r
// return new IntervalIEnumerable(this, steps);\r
Interval it = this;\r
long front_step = (it.begin.op == Interval.OPERATOR.CLOSE ? -1 : 0);\r
- long back_step = (long)System.Math.Floor((it.end.val - it.begin.val) / steps);\r
- if (it.end.op == Interval.OPERATOR.OPEN && 0 == System.Math.IEEERemainder(it.end.val - it.begin.val, steps))\r
+ long back_step = (long)System.Math.Floor((it.end.value - it.begin.value) / steps);\r
+ if (it.end.op == Interval.OPERATOR.OPEN && 0 == System.Math.IEEERemainder(it.end.value - it.begin.value, steps))\r
{\r
back_step -= 1;\r
}\r
while (front_step <= back_step)\r
- yield return steps * front_step + it.begin.val;\r
+ yield return steps * front_step + it.begin.value;\r
}\r
\r
\r
\r
public static IntervalAcc operator <(double val, IntervalAcc rng)\r
{\r
- return new IntervalAcc { instance = new Interval(val, Interval.OPERATOR.OPEN, rng.instance.end.val, rng.instance.end.op) };\r
+ return new IntervalAcc { instance = new Interval(val, Interval.OPERATOR.OPEN, rng.instance.end.value, rng.instance.end.op) };\r
}\r
public static IntervalAcc operator <=(double val, IntervalAcc rng)\r
{\r
- return new IntervalAcc { instance = new Interval(val, Interval.OPERATOR.CLOSE, rng.instance.end.val, rng.instance.end.op) };\r
+ return new IntervalAcc { instance = new Interval(val, Interval.OPERATOR.CLOSE, rng.instance.end.value, rng.instance.end.op) };\r
}\r
public static IntervalAcc operator >(double val, IntervalAcc rng)\r
{\r
- return new IntervalAcc { instance = new Interval(rng.instance.begin.val, rng.instance.begin.op, val, Interval.OPERATOR.OPEN) };\r
+ return new IntervalAcc { instance = new Interval(rng.instance.begin.value, rng.instance.begin.op, val, Interval.OPERATOR.OPEN) };\r
}\r
public static IntervalAcc operator >=(double val, IntervalAcc rng)\r
{\r
- return new IntervalAcc { instance = new Interval(rng.instance.begin.val, rng.instance.begin.op, val, Interval.OPERATOR.CLOSE) };\r
+ return new IntervalAcc { instance = new Interval(rng.instance.begin.value, rng.instance.begin.op, val, Interval.OPERATOR.CLOSE) };\r
}\r
public static IntervalAcc operator <(IntervalAcc rng, double val)\r
{\r
- return new IntervalAcc { instance = new Interval(rng.instance.begin.val, rng.instance.begin.op, val, Interval.OPERATOR.OPEN) };\r
+ return new IntervalAcc { instance = new Interval(rng.instance.begin.value, rng.instance.begin.op, val, Interval.OPERATOR.OPEN) };\r
}\r
public static IntervalAcc operator <=(IntervalAcc rng, double val)\r
{\r
- return new IntervalAcc { instance = new Interval(rng.instance.begin.val, rng.instance.begin.op, val, Interval.OPERATOR.CLOSE) };\r
+ return new IntervalAcc { instance = new Interval(rng.instance.begin.value, rng.instance.begin.op, val, Interval.OPERATOR.CLOSE) };\r
}\r
public static IntervalAcc operator >(IntervalAcc rng, double val)\r
{\r
- return new IntervalAcc { instance = new Interval(val, Interval.OPERATOR.OPEN, rng.instance.end.val, rng.instance.end.op) };\r
+ return new IntervalAcc { instance = new Interval(val, Interval.OPERATOR.OPEN, rng.instance.end.value, rng.instance.end.op) };\r
}\r
public static IntervalAcc operator >=(IntervalAcc rng, double val)\r
{\r
- return new IntervalAcc { instance = new Interval(val, Interval.OPERATOR.CLOSE, rng.instance.end.val, rng.instance.end.op) };\r
+ return new IntervalAcc { instance = new Interval(val, Interval.OPERATOR.CLOSE, rng.instance.end.value, rng.instance.end.op) };\r
}\r
\r
public static implicit operator Interval(IntervalAcc rhs)\r
}\r
\r
/*\r
+ public abstract Internal.MatrixExpression this[Interval row, Interval col]\r
+ {\r
+ get;\r
+ set;\r
+ }\r
+\r
+\r
+ /*\r
public static Matrix operator +(Matrix m, double d)\r
{\r
return new Internal.MatrixExpression();\r
}\r
*/\r
+\r
+ public abstract int rows { get; }\r
+ public abstract int cols { get; }\r
+ public int getRows() { return rows; }\r
+ public int getCols() { return cols; }\r
+\r
}\r
\r
\r
\r
public class MatrixImplementation : Matrix\r
{\r
- internal double[] elements;\r
- readonly int nrow, ncol;\r
+ internal double[,] elements;\r
\r
public MatrixImplementation(int dnrow, int dncol)\r
{\r
- nrow = dnrow;\r
- ncol = dncol;\r
- elements = new double[nrow * ncol];\r
+ elements = new double[dnrow, dncol];\r
}\r
\r
public override double this[int row, int col]\r
{\r
get\r
{\r
- return elements[(row - 1) * ncol + (col - 1)];\r
+ return elements[row - 1, col - 1];\r
}\r
set\r
{\r
- elements[(row - 1) * ncol + (col - 1)] = value;\r
+ elements[row - 1, col - 1] = value;\r
}\r
}\r
+ /*\r
+ public override MatrixExpression this[Interval row, Interval col]\r
+ {\r
+ get\r
+ {\r
+ return new MatrixExpression(this, row.int_floor(), col.int_floor(), row.int_ceil(), col.int_ceil());\r
+ }\r
+ set\r
+ {\r
+ for(int r = 0, r<)\r
+ elements[row - 1, col - 1] = value;\r
+ }\r
+ }\r
+ * */\r
+\r
+ public override int rows { get { return elements.GetLength(0); } }\r
+ public override int cols { get { return elements.GetLength(1); } }\r
+\r
}\r
\r
public class MatrixExpression : Matrix\r
{\r
MatrixImplementation imp;\r
- readonly int nrow, ncol;\r
- readonly int drow, dcol;\r
- \r
- public MatrixExpression(MatrixImplementation target, int ddrow, int ddcol, int dnrow, int dncol)\r
+ readonly int brow, bcol;\r
+ readonly int erow, ecol;\r
+\r
+ internal MatrixExpression(MatrixImplementation target, int dbrow, int dbcol, int derow, int decol)\r
{\r
- nrow = dnrow;\r
- ncol = dncol;\r
- drow = ddrow;\r
- dcol = ddcol;\r
+ brow = dbrow;\r
+ bcol = dbcol;\r
+ erow = derow;\r
+ ecol = decol;\r
imp = target;\r
}\r
\r
{\r
get\r
{\r
- return imp.elements[(row - drow) * ncol + (col - dcol)];\r
+ return imp.elements[(row - 1 - brow), (col - 1 - bcol)];\r
}\r
set\r
{\r
- imp.elements[(row - drow) * ncol + (col - dcol)] = value;\r
+ imp.elements[(row - 1 - brow), (col - 1 - bcol)] = value;\r
}\r
}\r
+\r
+ public override int rows { get { return erow - brow + 1; } }\r
+ public override int cols { get { return ecol - bcol + 1; } }\r
}\r
}\r
\r
\r
public static class Math\r
{\r
- public static readonly double PI = 3.14159265, E = 2.718281828459045, LOG2E = 1.44269504088896340736;\r
+ public const double PI = 3.14159265, E = 2.718281828459045, LOG2E = 1.44269504088896340736;\r
public static Random random_generator;\r
static Math()\r
{\r
random_generator = new Random();\r
}\r
\r
- public static double max(double val1, double val2)\r
+ public static T max<T>(T val1, T val2) where T : IComparable\r
{\r
- return val1 > val2 ? val1 : val2;\r
+ return val1.CompareTo(val2) > 0 ? val1 : val2;\r
}\r
- public static double min(double val1, double val2)\r
+ public static T min<T>(T val1, T val2) where T : IComparable\r
{\r
- return val1 < val2 ? val1 : val2;\r
+ return val1.CompareTo(val2) < 0 ? val1 : val2;\r
}\r
public static void shuffle<X>(X[] array, int n)\r
{\r
{\r
return System.Math.Abs(x);\r
}\r
+ public static double floor(double x)\r
+ {\r
+ return System.Math.Floor(x);\r
+ }\r
+ public static double ceil(double x)\r
+ {\r
+ return System.Math.Ceiling(x);\r
+ }\r
public static double sin(double x)\r
{\r
return System.Math.Sin(x);\r
{\r
return System.Math.Tan(x);\r
}\r
+ public static double asin(double x)\r
+ {\r
+ return System.Math.Asin(x);\r
+ }\r
+ public static double acos(double x)\r
+ {\r
+ return System.Math.Acos(x);\r
+ }\r
+ public static double atan(double x)\r
+ {\r
+ return System.Math.Atan(x);\r
+ }\r
+ public static double atan(double y, double x)\r
+ {\r
+ return System.Math.Atan2(y, x);\r
+ }\r
+ public static double atan2(double y, double x)\r
+ {\r
+ return System.Math.Atan2(y, x);\r
+ }\r
public static double sqrt(double x)\r
{\r
return System.Math.Sqrt(x);\r
{\r
return log(val) * LOG2E;\r
}\r
- /*public static int round(double val)\r
+ public static double round(double val)\r
{\r
- double integer_part, particle = modf(val, &integer_part);\r
- return ((particle < 0.5 | (particle == 0.5 && (int)integer_part % 2 == 0)) ? (int)integer_part : (int)integer_part + 1);\r
- }*/\r
+ return System.Math.Round(val);\r
+ }\r
\r
public static double radius(double x, double y)\r
{\r
--- /dev/null
+\r
+\r
+\r
+namespace Psychlops\r
+{\r
+\r
+ public static class Display\r
+ {\r
+ public static void pix(int x, int y, Color col) { Main.canvas.pix(x, y, col); }\r
+ public static void line(Line drawee) { Main.canvas.line(drawee); }\r
+ public static void rect(Rectangle drawee) { Main.canvas.rect(drawee); }\r
+ public static void ellipse(Ellipse drawee) { Main.canvas.ellipse(drawee); }\r
+ public static void polygon(Polygon drawee) { Main.canvas.polygon(drawee); }\r
+ public static void letters(Letters drawee) { Main.canvas.letters(drawee); }\r
+ public static void image(Image drawee) { Main.canvas.image(drawee); }\r
+ public static void group(Group drawee) { Main.canvas.group(drawee); }\r
+\r
+\r
+ public static void msg(string str, double x, double y) { Main.canvas.msg(str, x, y, Color.white); }\r
+ public static void msg(string dstr, double x, double y, Color col) { Main.canvas.msg(dstr, x, y, col); }\r
+ public static void var<Type>(Type val, double x, double y) { Main.canvas.var(val, x, y, Color.white); }\r
+ public static void var<Type>(Type val, double x, double y, Color col) { Main.canvas.var(val, x, y, col); }\r
+\r
+\r
+\r
+ public static void clear(double lum) { Main.canvas.clear(lum); }\r
+ public static void clear(Color col) { Main.canvas.clear(col); }\r
+ public static void flip(int n = 1) { Main.canvas.flip(n); }\r
+\r
+ public static double width { get { return Main.canvas.width; } }\r
+ public static double height { get { return Main.canvas.height; } }\r
+ public static Point center { get { return Main.canvas.center; } }\r
+ public static double getWidth() { return width; }\r
+ public static double getHeight() { return height; }\r
+ public static Point getCenter() { return center; }\r
+ public static double getHCenter() { return Main.canvas.getHCenter(); }\r
+ public static double getVCenter() { return Main.canvas.getVCenter(); }\r
+ public static double getRefreshRate() { return Main.canvas.getRefreshRate(); }\r
+ }\r
+\r
+}\r
double like = 1.0;\r
champ_like=0.0;\r
int L = data.length;\r
- for (double a = itvl[0].begin.val; a < itvl[0].end.val; a += step[0])\r
+ for (double a = itvl[0].begin.value; a < itvl[0].end.value; a += step[0])\r
{\r
like = 1.0;\r
for(int i=0; i<L; i++) {\r
double like = 1.0;\r
champ_like = 0.0;\r
int L = data.length;\r
- for (double a = itvl[0].begin.val; a < itvl[0].end.val; a += step[0])\r
+ for (double a = itvl[0].begin.value; a < itvl[0].end.value; a += step[0])\r
{\r
- for (double b = itvl[1].begin.val; b < itvl[1].end.val; b += step[1])\r
+ for (double b = itvl[1].begin.value; b < itvl[1].end.value; b += step[1])\r
{\r
like = 1.0;\r
for (int i = 0; i < L; i++)\r
double like = 1.0;\r
champ_like = 0.0;\r
int L = data.length;\r
- for (double a = itvl[0].begin.val; a < itvl[0].end.val; a += step[0])\r
+ for (double a = itvl[0].begin.value; a < itvl[0].end.value; a += step[0])\r
{\r
- for (double b = itvl[1].begin.val; b < itvl[1].end.val; b += step[1])\r
+ for (double b = itvl[1].begin.value; b < itvl[1].end.value; b += step[1])\r
{\r
- for (double c = itvl[2].begin.val; c < itvl[2].end.val; c += step[2])\r
+ for (double c = itvl[2].begin.value; c < itvl[2].end.value; c += step[2])\r
{\r
like = 1.0;\r
for (int i = 0; i < L; i++)\r
data.elems[i].comb = (int)Binomial.combination(data.elems[i].pos + data.elems[i].neg, data.elems[i].pos);\r
}\r
\r
- for (int j = 0; j < Constants.LIMIT; j++) { step[j] = (itvl[j].end.val - itvl[j].begin.val) / 256.0; }\r
+ for (int j = 0; j < Constants.LIMIT; j++) { step[j] = (itvl[j].end.value - itvl[j].begin.value) / 256.0; }\r
for (int i = 0; i < 4; i++)\r
{\r
- l[i].itvl[0] = new Interval((itvl[0].begin.val) + (i * step[0] * 64), (itvl[0].begin.val) + ((i + 1) * step[0] * 64));\r
+ l[i].itvl[0] = new Interval((itvl[0].begin.value) + (i * step[0] * 64), (itvl[0].begin.value) + ((i + 1) * step[0] * 64));\r
l[i].step[0] = step[0];\r
for (int j = 1; j < Constants.LIMIT; j++)\r
{\r
double r, low, high;\r
for (int j = 0; j < Constants.LIMIT; j++)\r
{\r
- r = itvl[j].end.val - itvl[j].begin.val;\r
- low = champ[j] - r / 8.0 < itvl[j].begin.val ? itvl[j].begin.val : champ[j] - r / 8.0;\r
- high = champ[j] + r / 8.0 > itvl[j].end.val ? itvl[j].end.val : champ[j] + r / 8.0;\r
+ r = itvl[j].end.value - itvl[j].begin.value;\r
+ low = champ[j] - r / 8.0 < itvl[j].begin.value ? itvl[j].begin.value : champ[j] - r / 8.0;\r
+ high = champ[j] + r / 8.0 > itvl[j].end.value ? itvl[j].end.value : champ[j] + r / 8.0;\r
itvl[j] = new Interval(low, high);\r
}\r
\r
var val = new System.Windows.Controls.TextBox { Width = 100 };\r
System.Windows.Controls.Canvas.SetLeft(val, 100);\r
var slide = new System.Windows.Controls.Slider {\r
- Minimum = ss.range.begin.val, Maximum = ss.range.end.val,\r
+ Minimum = ss.range.begin.value, Maximum = ss.range.end.value,\r
Name = ss.label,\r
Value = ss.retval,\r
Tag = ss, Width = 200,\r