Robocode高手的诀窍 - 因数避墙法(factored wall avoidance)[Java编程]
本文“Robocode高手的诀窍 - 因数避墙法(factored wall avoidance)[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
我们只要对在 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;
}
}
以上是“Robocode高手的诀窍 - 因数避墙法(factored wall avoidance)[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |