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