package nbtool.gui.field; public class FieldConstants { public final static float FIELD_WHITE_WIDTH = 900.f; public final static float FIELD_WHITE_HEIGHT = 600.f; public final static float GREEN_PAD_X = 69.5f; public final static float GREEN_PAD_Y = 69.5f; public final static float LINE_WIDTH = 5.0f; public final static float FIELD_GREEN_WIDTH = FIELD_WHITE_WIDTH + 2.0f * GREEN_PAD_X; public final static float FIELD_GREEN_HEIGHT = FIELD_WHITE_HEIGHT + 2.0f * GREEN_PAD_Y; public final static float FIELD_WIDTH = FIELD_GREEN_WIDTH; public final static float FIELD_HEIGHT = FIELD_GREEN_HEIGHT; public final static float CENTER_FIELD_X = FIELD_GREEN_WIDTH * .5f; public final static float CENTER_FIELD_Y = FIELD_GREEN_HEIGHT * .5f; public final float FIELD_GREEN_LEFT_SIDELINE_X = 0; public final float FIELD_GREEN_RIGHT_SIDELINE_X = FIELD_GREEN_WIDTH; public final float FIELD_GREEN_BOTTOM_SIDELINE_Y = 0; public final float FIELD_GREEN_TOP_SIDELINE_Y = FIELD_GREEN_HEIGHT; public final static float FIELD_WHITE_BOTTOM_SIDELINE_Y = GREEN_PAD_Y; public final static float FIELD_WHITE_TOP_SIDELINE_Y = (FIELD_WHITE_HEIGHT + GREEN_PAD_Y); public final static float FIELD_WHITE_LEFT_SIDELINE_X = GREEN_PAD_X; public final static float FIELD_WHITE_RIGHT_SIDELINE_X = (FIELD_WHITE_WIDTH + GREEN_PAD_X); public final static float MIDFIELD_X = FIELD_GREEN_WIDTH * .5f; public final static float MIDFIELD_Y = FIELD_GREEN_HEIGHT * .5f; // Other Field object dimensions public final float GOAL_POST_CM_HEIGHT = 90.0f; // 80cm to the bottom // of the crossbar. public final float GOAL_POST_CM_WIDTH = 10.0f; public final static float CROSSBAR_CM_WIDTH = 150.f; public final float CROSSBAR_CM_HEIGHT = 10.0f; public final float GOAL_DEPTH = 50.0f; public final float GOAL_POST_RADIUS = GOAL_POST_CM_WIDTH / 2.0f; //Penalty Marks public final static int PENALTY_MARK_WIDTH = 5; public final static int PENALTY_MARK_HEIGHT = 15; public final static int PENALTY_MARK_DISTANCE_FROM_WHITE_LINE = 130; //left penalty mark X public final static int LEFT_PENALTY_MARK_X = (int)GREEN_PAD_X+PENALTY_MARK_DISTANCE_FROM_WHITE_LINE; //right penalty mark x public final static int RIGHT_PENALTY_MARK_X = (int)GREEN_PAD_X+(int)FIELD_WHITE_WIDTH-PENALTY_MARK_DISTANCE_FROM_WHITE_LINE; // GOAL CONSTANTS public final float LANDMARK_MY_GOAL_BOTTOM_POST_X = FIELD_WHITE_LEFT_SIDELINE_X + GOAL_POST_RADIUS; public final float LANDMARK_MY_GOAL_TOP_POST_X = FIELD_WHITE_LEFT_SIDELINE_X + GOAL_POST_RADIUS; public final float LANDMARK_OPP_GOAL_BOTTOM_POST_X = FIELD_WHITE_RIGHT_SIDELINE_X - GOAL_POST_RADIUS; public final float LANDMARK_OPP_GOAL_TOP_POST_X = FIELD_WHITE_RIGHT_SIDELINE_X - GOAL_POST_RADIUS; public final static float LANDMARK_MY_GOAL_BOTTOM_POST_Y = CENTER_FIELD_Y - CROSSBAR_CM_WIDTH / 2.0f; public final float LANDMARK_MY_GOAL_TOP_POST_Y = CENTER_FIELD_Y + CROSSBAR_CM_WIDTH / 2.0f; public final float LANDMARK_OPP_GOAL_BOTTOM_POST_Y = CENTER_FIELD_Y - CROSSBAR_CM_WIDTH / 2.0f; public final float LANDMARK_OPP_GOAL_TOP_POST_Y = CENTER_FIELD_Y + CROSSBAR_CM_WIDTH / 2.0f; public final static float CENTER_CIRCLE_RADIUS = 150.0f; // Not scaled public final static float GOALBOX_DEPTH = 60.0f; public final static float GOALBOX_WIDTH = 220.0f; // These are used by the vision system // The distance the goalie box extends out past each goal post public final float GOALBOX_OVERAGE = (GOALBOX_WIDTH - (CROSSBAR_CM_WIDTH + 2.0f * GOAL_POST_RADIUS)) / 2.0f; // The distance from any goal post to the goalie box corner nearest it public final float POST_CORNER = (float)Math.sqrt(GOALBOX_DEPTH * GOALBOX_DEPTH + GOALBOX_OVERAGE * GOALBOX_OVERAGE); // Headings to goal from center public final float OPP_GOAL_HEADING = 0.0f; public final float MY_GOAL_HEADING = 180.0f; // my goal box constants relative to (0,0) on my team public final static float MY_GOALBOX_TOP_Y = MIDFIELD_Y + GOALBOX_WIDTH * .5f; public final static float MY_GOALBOX_BOTTOM_Y = MIDFIELD_Y - GOALBOX_WIDTH * .5f; // bottom as in closest to (0,0) public final static float MY_GOALBOX_LEFT_X = GREEN_PAD_X; public final static float MY_GOALBOX_RIGHT_X = GREEN_PAD_X + GOALBOX_DEPTH; // opp goal box constants relative to (0,0) on my team public final static float OPP_GOALBOX_BOTTOM_Y = MIDFIELD_Y - GOALBOX_WIDTH * .5f; public final static float OPP_GOALBOX_TOP_Y = MIDFIELD_Y + GOALBOX_WIDTH * .5f; public final static float OPP_GOALBOX_LEFT_X = FIELD_WHITE_RIGHT_SIDELINE_X - GOALBOX_DEPTH; public final static float OPP_GOALBOX_RIGHT_X = FIELD_WHITE_RIGHT_SIDELINE_X; public final float LINE_CROSS_OFFSET = 130.0f; public final float LANDMARK_MY_GOAL_CROSS_X = FIELD_WHITE_LEFT_SIDELINE_X + LINE_CROSS_OFFSET; public final float LANDMARK_MY_GOAL_CROSS_Y = MIDFIELD_Y; public final float LANDMARK_OPP_GOAL_CROSS_X = FIELD_WHITE_RIGHT_SIDELINE_X - LINE_CROSS_OFFSET; public final float LANDMARK_OPP_GOAL_CROSS_Y = MIDFIELD_Y; public final float CC_LINE_CROSS_X = MIDFIELD_X; public final float CC_LINE_CROSS_Y = MIDFIELD_Y; public final float TOP_CC_Y = CENTER_FIELD_Y + CENTER_CIRCLE_RADIUS; public final float TOP_CC_X = CENTER_FIELD_X; public final float BOTTOM_CC_Y = CENTER_FIELD_Y - CENTER_CIRCLE_RADIUS; public final float BOTTOM_CC_X = CENTER_FIELD_X; public final float LINE_CROSS_LENGTH = 10.0f; // length of each cross in cm // Useful constants for initial localization public final float MY_CC_NEAREST_POINT_X = CENTER_FIELD_X - CENTER_CIRCLE_RADIUS; public final float MY_CROSS_CIRCLE_MIDPOINT_X = LANDMARK_MY_GOAL_CROSS_X + ((MY_CC_NEAREST_POINT_X-LANDMARK_MY_GOAL_CROSS_X)/2.0f); public final float MY_GOALBOX_MIDPOINT_X = FIELD_WHITE_LEFT_SIDELINE_X + (GOALBOX_DEPTH / 2); public final float MY_GOALBOX_CROSS_MIDPOINT_X = FIELD_WHITE_LEFT_SIDELINE_X + GOALBOX_DEPTH + ((LINE_CROSS_OFFSET - GOALBOX_DEPTH) / 2); // Constants for heading // Right is towards opponents' goal. // Left is towards own goal. public final float HEADING_RIGHT = 0.0f; public final float HEADING_UP = 90.0f; public final float HEADING_LEFT = 180.0f; public final float HEADING_DOWN = -90.0f; // kick off positions /* public final Location ODD_DEFENDER_KICKOFF = new Location(MY_GOALBOX_RIGHT_X + 50, MY_GOALBOX_BOTTOM_Y); public final Location EVEN_DEFENDER_KICKOFF = new Location(MY_GOALBOX_RIGHT_X + 100, MY_GOALBOX_TOP_Y); public final Location ODD_CHASER_KICKOFF = new Location(CENTER_FIELD_X - 45, OPP_GOALBOX_BOTTOM_Y - 100); public final Location EVEN_CHASER_KICKOFF = new Location(CENTER_FIELD_X - 45, CENTER_FIELD_Y); */ }