WEB开发网
开发学院软件开发Java Robocode 高手的秘诀: 因数避墙法(factored wall... 阅读

Robocode 高手的秘诀: 因数避墙法(factored wall avoidance)

 2009-12-21 00:00:00 来源:WEB开发网   
核心提示:我们只要对在 Tracking your opponents' movement中做的机器人加以补充,就能将因数避墙法添加到现有的或讨厌的移动算法中,Robocode 高手的秘诀: 因数避墙法(factored wall avoidance),这种方法将预想的方向和根据机器人和墙之间距离远近确定的安全方向作为因

我们只要对在 Tracking your opponents' movement中做的机器人加以补充,就能将因数避墙法添加到现有的或讨厌的移动算法中。这种方法将预想的方向和根据机器人和墙之间距离远近确定的安全方向作为因数试图找到最可能的方向。

添加做常见数学计算的辅助方法

我们先要给机器人添加常见数学算法使用的一些辅助方法。

calculateBearingToXYRadians() 方法使用 java.lang.Math 中的 atan2() 方法来计算从 sourceX,sourceY 到 targetX,targetY 的绝对方位,然后再把这个值转化为相对于 sourceHeading 的相对方位。

我们还需要 normalizeAbsoluteAngleRadians() 方法和 normalizeRelativeAngleRadians() 方法。


清单 1. 数学辅助方法

private static final double DOUBLE_PI = (Math.PI * 2); 
private static final double HALF_PI = (Math.PI / 2); 
public double calculateBearingToXYRadians(double sourceX, double sourceY, 
  double sourceHeading, double targetX, double targetY) { 
    return normalizeRelativeAngleRadians( 
      Math.atan2((targetX - sourceX), (targetY - sourceY)) - 
        sourceHeading); 
  } 
public double normalizeAbsoluteAngleRadians(double angle) { 
  if (angle < 0) { 
    return (DOUBLE_PI + (angle % DOUBLE_PI)); 
  } else { 
    return (angle % DOUBLE_PI); 
  } 
} 
public static double normalizeRelativeAngleRadians(double angle) { 
  double trimmedAngle = (angle % DOUBLE_PI); 
  if (trimmedAngle > Math.PI) { 
    return -(Math.PI - (trimmedAngle % Math.PI)); 
  } else if (trimmedAngle < -Math.PI) { 
    return (Math.PI + (trimmedAngle % Math.PI)); 
  } else { 
    return trimmedAngle; 
  } 
} 

1 2 3  下一页

Tags:Robocode 高手 秘诀

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接