Package sk.fiit.jim.math

Examples of sk.fiit.jim.math.Vector3D


    List<Vector3D> flagsZYX = new ArrayList<Vector3D>(fixedObjects.size());
    List<Vector3D> flagsZXY = new ArrayList<Vector3D>(fixedObjects.size());


    for(Entry<FixedObject, Vector3D> flag : fixedObjects.entrySet()){
      Vector3D absolute = flag.getKey().getAbsolutePosition();
      Vector3D seen = flag.getValue();

      flagsXYZ.add(seen.rotateOverX(agent.rotationX).rotateOverY(agent.rotationY).rotateOverZ(agent.rotationZ).negate().add(absolute));
      flagsXZY.add(seen.rotateOverX(agent.rotationX).rotateOverZ(agent.rotationZ).rotateOverY(agent.rotationY).negate().add(absolute));
      flagsYXZ.add(seen.rotateOverY(agent.rotationY).rotateOverX(agent.rotationX).rotateOverZ(agent.rotationZ).negate().add(absolute));
      flagsYZX.add(seen.rotateOverY(agent.rotationY).rotateOverZ(agent.rotationZ).rotateOverX(agent.rotationX).negate().add(absolute));
      flagsZXY.add(seen.rotateOverZ(agent.rotationZ).rotateOverX(agent.rotationX).rotateOverY(agent.rotationY).negate().add(absolute));
      flagsZYX.add(seen.rotateOverZ(agent.rotationZ).rotateOverY(agent.rotationY).rotateOverX(agent.rotationX).negate().add(absolute));
    }

    Vector3D ourPositionXYZ = average(flagsXYZ);
    Vector3D ourPositionXZY = average(flagsXZY);
    Vector3D ourPositionYXZ = average(flagsYXZ);
    Vector3D ourPositionYZX = average(flagsYZX);
    Vector3D ourPositionZXY = average(flagsZXY);
    Vector3D ourPositionZYX = average(flagsZYX);

    return chooseTheNearestToMe(
        ourPositionXYZ, ourPositionXZY,
        ourPositionYXZ, ourPositionYZX,
        ourPositionZXY, ourPositionZYX
View Full Code Here


        ourPositionZXY, ourPositionZYX
    );
  }

  private Vector3D average(final List<Vector3D> flags) {
    Vector3D accumulator = Vector3D.cartesian(0, 0, 0);
    for (Vector3D flag : flags)
      accumulator = accumulator.add(flag);

    return accumulator.divide(flags.size());
  }
View Full Code Here

    return accumulator.divide(flags.size());
  }

  private Vector3D chooseTheNearestToMe(Vector3D... possibilities) {
    Vector3D best = possibilities[0];
    double bestDistance = Double.MAX_VALUE;

    for (Vector3D possibility : possibilities) {
      double distance = agent.position.subtract(possibility).getR();
      if (distance < bestDistance){
View Full Code Here

    for(Integer playedId : parts.keySet()){
      //that's us :)
      if (playedId.intValue() == AgentInfo.playerId && isOurTeam)
        continue;
      //naive implementation so far - only take the head into consideration
      Vector3D head = parts.get(playedId).get("head");
      Vector3D foot = parts.get(playedId).get("lfoot");
      //we don't see him clearly enough - don't record this sight
      if (head == null || foot == null)
        continue;

      boolean isOnGround =  (head.getZ() - foot.getZ()) < 0.15;
      if (head == null) continue;
      Player player = playerSource.get(playedId);
      if (player == null)
        player = new Player(isOurTeam, playedId);
      player.setOnGround(isOnGround);
View Full Code Here

    reportBallRelativePosition(data.ballRelativePosition, data.SIMULATION_TIME);
  }

  public void reportBallRelativePosition(Vector3D ballRelativePosition, double simulationTime){
    ball.setRelativePosition(ballRelativePosition, simulationTime);
    Vector3D absolutePosition = agentModel.globalize(ballRelativePosition);
    ball.setPosition(absolutePosition, simulationTime);
  }
View Full Code Here

    }
    return grid;
  }

  public Vector3D kickTarget(){
    Vector3D ballPos = WorldModel.getInstance().getBall().getPosition();
    double angleFromBallToCenter = Math.toDegrees(FixedObject.theirPostMiddle().subtract(ballPos).getPhi());
    double rangeAllowance = FixedObject.theirPostMiddle().subtract(ballPos).getR() / 18.97 * 90 + 30;


    Vector3D bestPoint = FixedObject.theirPostMiddle();
    double bestScore = Double.MIN_VALUE;

    List<Player> opponentsNear = opponentsNearBall();

    for (Map.Entry<Vector3D, Double> entry : basicEvaluatedGrid.entrySet()){
      Vector3D point = entry.getKey();
      double distanceToBall = sqrt(
          (ballPos.getX() - point.getX()) * (ballPos.getX() - point.getX()) +
          (ballPos.getY() - point.getY()) * (ballPos.getY() - point.getY()));
      if (distanceToBall > 6.0)
        continue;
      double x = point.getX() - ballPos.getX();
      double y = point.getY() - ballPos.getY();
      double angleToBall = Angles.normalize(atan2(y, x) - PI / 2.0d);

      double angleToCenter = angleToBall;
      if (Angles.angleDiff(angleToCenter, angleFromBallToCenter) > rangeAllowance)
        continue;

      boolean close = false;

      for (Player player : opponentsNear) {
        if (close)
          break;
        Vector3D toBall = player.getPosition().subtract(ballPos);
        double opponentRange = (9.0 - toBall.getR()) / 9.0 * 37.0 + 3.0;
        close = toRadians(abs(toBall.getPhi() - angleToCenter)) > opponentRange;
      }
      if (close)
        continue;

      double value = entry.getValue();
View Full Code Here


  protected List<Player> opponentsNearBall() {
    List<Player> opponents = new ArrayList<Player>(WorldModel.getInstance().getOpponents());
    ListIterator<Player> iterator = opponents.listIterator();
    Vector3D ballPosition = WorldModel.getInstance().getBall().getPosition();

    while (iterator.hasNext()) {
      Player player = iterator.next();
      if (player.getPosition().subtract(ballPosition).getR() > 6.0)
        iterator.remove();
View Full Code Here

TOP

Related Classes of sk.fiit.jim.math.Vector3D

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.