* \r
* @author Florian Frankenberger\r
*/\r
+@LATTICE("DEV<C,C<SIZE,SIZE*,C*,DEV*")\r
+@METHODDEFAULT("OUT<THIS,THIS<IN,THISLOC=THIS,RETURNLOC=OUT")\r
public class DeviationScanner {\r
\r
- private EyePosition eyePositions[];\r
-\r
- // LEFT_UP(+1, -1), UP(0, -1), RIGHT_UP(-1, -1), LEFT(+1, 0), NONE(0, 0),\r
- // RIGHT(-1, 0), LEFT_DOWN(\r
- // +1, +1), DOWN(0, +1), RIGHT_DOWN(-1, +1);\r
-\r
- private static final Deviation LEFT_UP = new Deviation("LEFT_UP", +1, -1);\r
- private static final Deviation UP = new Deviation("UP", 0, -1);\r
- private static final Deviation RIGHT_UP = new Deviation("RIGHT_UP", -1, -1);\r
- private static final Deviation LEFT = new Deviation("LEFT", +1, 0);\r
- private static final Deviation NONE = new Deviation("NONE", 0, 0);\r
- private static final Deviation RIGHT = new Deviation("RIGHT", -1, 0);\r
- private static final Deviation LEFT_DOWN = new Deviation("LEFT_DOWN", +1, +1);\r
- private static final Deviation DOWN = new Deviation("DOWN", 0, +1);\r
- private static final Deviation RIGHT_DOWN = new Deviation("RIGHT_DOWN", -1, +1);\r
-\r
- private int size;\r
+ @LOC("DEV")\r
+ private int x[];\r
+ @LOC("DEV")\r
+ private int y[];\r
+\r
+ public static final int LEFT_UP = 0;\r
+ public static final int UP = 1;\r
+ public static final int RIGHT_UP = 2;\r
+ public static final int LEFT = 3;\r
+ public static final int NONE = 4;\r
+ public static final int RIGHT = 5;\r
+ public static final int LEFT_DOWN = 6;\r
+ public static final int DOWN = 7;\r
+ public static final int RIGHT_DOWN = 8;\r
\r
public DeviationScanner() {\r
- eyePositions = new EyePosition[3];\r
- size = 0;\r
+ x = new int[3];\r
+ y = new int[3];\r
+ SSJAVA.arrayinit(x, -1);\r
+ SSJAVA.arrayinit(y, -1);\r
}\r
\r
- public void addEyePosition(EyePosition eyePosition) {\r
+ @LATTICE("THIS<IN,THISLOC=THIS")\r
+ public void addEyePosition(@LOC("IN") int inx, @LOC("IN") int iny) {\r
+ SSJAVA.append(x, inx);\r
+ SSJAVA.append(y, iny);\r
+ }\r
\r
- for (int i = 1; i < eyePositions.length; i++) {\r
- eyePositions[i - 1] = eyePositions[i];\r
- }\r
- eyePositions[eyePositions.length - 1] = eyePosition;\r
+ @LATTICE("THIS<C,THIS<IN,THISLOC=THIS,C*")\r
+ @RETURNLOC("THIS,DeviationScanner.DEV")\r
+ public int scanForDeviation(@LOC("IN") Rectangle2D faceRect) {\r
+\r
+ @LOC("THIS,DeviationScanner.DEV") int deviation = NONE;\r
\r
- if (size < eyePositions.length) {\r
- size++;\r
+ for (@LOC("C") int i = 0; i < 3; i++) {\r
+ if (x[i] == -1) {\r
+ return deviation;\r
+ }\r
}\r
- }\r
\r
- public int getEyePositionsSize() {\r
- return size;\r
- }\r
+ @LOC("THIS,DeviationScanner.DEV") double deviationX = 0;\r
+ @LOC("THIS,DeviationScanner.DEV") double deviationY = 0;\r
\r
- public Deviation scanForDeviation(Rectangle2D faceRect) {\r
- Deviation deviation = NONE;\r
- if (getEyePositionsSize() >= 3) {\r
- double deviationX = 0;\r
- double deviationY = 0;\r
-\r
- EyePosition lastEyePosition = null;\r
- for (int i = 0; i < 3; ++i) {\r
- EyePosition eyePosition = this.eyePositions[i];\r
- if (lastEyePosition != null) {\r
- deviationX += (eyePosition.getX() - lastEyePosition.getX());\r
- deviationY += (eyePosition.getY() - lastEyePosition.getY());\r
- }\r
- lastEyePosition = eyePosition;\r
+ @LOC("THIS,DeviationScanner.DEV") int lastIdx = -1;\r
+ for (@LOC("THIS,DeviationScanner.DEV") int i = 0; i < 3; ++i) {\r
+ if (lastIdx != -1) {\r
+ deviationX += (x[i] - x[lastIdx]);\r
+ deviationY += (y[i] - y[lastIdx]);\r
}\r
+ lastIdx = i;\r
+ }\r
\r
- final double deviationPercentX = 0.04;\r
- final double deviationPercentY = 0.04;\r
+ @LOC("THIS,DeviationScanner.DEV") final double deviationPercentX = 0.04;\r
+ @LOC("THIS,DeviationScanner.DEV") final double deviationPercentY = 0.04;\r
\r
- deviationX /= faceRect.getWidth();\r
- deviationY /= faceRect.getWidth();\r
+ deviationX /= faceRect.getWidth();\r
+ deviationY /= faceRect.getWidth();\r
\r
- int deviationAbsoluteX = 0;\r
- int deviationAbsoluteY = 0;\r
- if (deviationX > deviationPercentX)\r
- deviationAbsoluteX = 1;\r
- if (deviationX < -deviationPercentX)\r
- deviationAbsoluteX = -1;\r
- if (deviationY > deviationPercentY)\r
- deviationAbsoluteY = 1;\r
- if (deviationY < -deviationPercentY)\r
- deviationAbsoluteY = -1;\r
+ @LOC("THIS,DeviationScanner.DEV") int deviationAbsoluteX = 0;\r
+ @LOC("THIS,DeviationScanner.DEV") int deviationAbsoluteY = 0;\r
+ if (deviationX > deviationPercentX)\r
+ deviationAbsoluteX = 1;\r
+ if (deviationX < -deviationPercentX)\r
+ deviationAbsoluteX = -1;\r
+ if (deviationY > deviationPercentY)\r
+ deviationAbsoluteY = 1;\r
+ if (deviationY < -deviationPercentY)\r
+ deviationAbsoluteY = -1;\r
\r
- deviation = getDirectionFor(deviationAbsoluteX, deviationAbsoluteY);\r
-\r
- if (deviation != NONE) {\r
- eyePositions = new EyePosition[3];\r
- size = 0;\r
- }\r
- // System.out.println(String.format("%.2f%% | %.2f%% => %d and %d >>> %s",\r
- // deviationX*100, deviationY*100, deviationAbsoluteX, deviationAbsoluteY,\r
- // deviation.toString()));\r
+ deviation = getDirectionFor(deviationAbsoluteX, deviationAbsoluteY);\r
\r
+ if (deviation != NONE) {\r
+ SSJAVA.arrayinit(x, -1);\r
+ SSJAVA.arrayinit(y, -1);\r
}\r
\r
return deviation;\r
}\r
\r
- public static Deviation getDirectionFor(int directionX, int directionY) {\r
+ @LATTICE("OUT<IN,OUT<THIS,THISLOC=THIS,RETURNLOC=OUT")\r
+ public int getDirectionFor(@LOC("IN") int directionX, @LOC("IN") int directionY) {\r
\r
- if (LEFT_UP.concurs(directionX, directionY)) {\r
+ if (directionX == +1 && directionY == -1) {\r
return LEFT_UP;\r
- } else if (UP.concurs(directionX, directionY)) {\r
+ } else if (directionX == 0 && directionY == -1) {\r
return UP;\r
- } else if (RIGHT_UP.concurs(directionX, directionY)) {\r
+ } else if (directionX == -1 && directionY == -1) {\r
return RIGHT_UP;\r
- } else if (LEFT.concurs(directionX, directionY)) {\r
+ } else if (directionX == +1 && directionY == 0) {\r
return LEFT;\r
- } else if (NONE.concurs(directionX, directionY)) {\r
+ } else if (directionX == 0 && directionY == 0) {\r
return NONE;\r
- } else if (RIGHT.concurs(directionX, directionY)) {\r
+ } else if (directionX == -1 && directionY == 0) {\r
return RIGHT;\r
- } else if (LEFT_DOWN.concurs(directionX, directionY)) {\r
+ } else if (directionX == +1 && directionY == +1) {\r
return LEFT_DOWN;\r
- } else if (DOWN.concurs(directionX, directionY)) {\r
+ } else if (directionX == 0 && directionY == +1) {\r
return DOWN;\r
- } else if (RIGHT_DOWN.concurs(directionX, directionY)) {\r
+ } else if (directionX == -1 && directionY == +1) {\r
return RIGHT_DOWN;\r
}\r
- return null;\r
+\r
+ return -1;\r
}\r
\r
- public void clear() {\r
- System.out.println("CLEAR");\r
- eyePositions = new EyePosition[3];\r
- size = 0;\r
+ public String toStringDeviation(@LOC("IN") int dev) {\r
+ if (dev == LEFT_UP) {\r
+ return "LEFT_UP";\r
+ } else if (dev == UP) {\r
+ return "UP";\r
+ } else if (dev == RIGHT_UP) {\r
+ return "RIGHT_UP";\r
+ } else if (dev == LEFT) {\r
+ return "LEFT";\r
+ } else if (dev == NONE) {\r
+ return "NONE";\r
+ } else if (dev == RIGHT) {\r
+ return "RIGHT";\r
+ } else if (dev == LEFT_DOWN) {\r
+ return "LEFT_DOWN";\r
+ } else if (dev == DOWN) {\r
+ return "DOWN";\r
+ } else if (dev == RIGHT_DOWN) {\r
+ return "RIGHT_DOWN";\r
+ }\r
+ return "ERROR";\r
}\r
\r
}\r