gpt4 book ai didi

java - 斐波那契螺旋 - Robocode

转载 作者:太空宇宙 更新时间:2023-11-04 07:33:37 26 4
gpt4 key购买 nike

有谁知道如何在 Robocode 中围绕某个点按照斐波那契模式进行螺旋运动?我有 setTurnRight (double)、setAhead (double)、getX () 和 getY () 等方法。

我尝试制作一个简单的螺旋,没有所需的标准,那样,但它不起作用......它更像是一个圆圈。

this.setAhead(this.direction * Double.POSITIVE_INFINITY);
if (this.direction == 1) {
this.setTurnRight(Utils.normalRelativeAngleDegrees(this.enemy.getBearing() + 60));
} else {
this.setTurnRight(Utils.normalRelativeAngleDegrees(this.enemy.getBearing() + 120));
}

游戏的物理原理: http://robowiki.net/wiki/Robocode/Game_Physics

最佳答案

Robocode 对数螺旋

这是一种使机器人遵循对数螺旋的工作运行方法,我相信它是黄金螺旋的近似值(可以用斐波那契数来近似的螺旋)。

    public void run() {
double v = 5;
double c = Math.PI*2;
double a = .1;
double b = .0053468;

setMaxVelocity(v);
setAhead(100*999);
setTurnRight(360*999);
while(true)
{
double t = getTime();
double f = a*Math.pow(Math.E,b*t);
double w = v/(c*f);

setMaxTurnRate(w);
execute();
System.out.println(t+"\t"+w);
}
}

说明

要沿圆周移动(普通螺旋),您需要保持恒定的速度(机器人移动的速度)和恒定的旋转速度(机器人转动的速度)。有几种方法可以让这种琐碎的螺旋运动变得更有趣。 螺旋运动最简单的方法是保持恒定速度并改变旋转速度。 This游戏开发交流中的答案很好地介绍了如何获得转速的近似方程。

  • w = v/(2*pi*t)w = v/(2*pi*f(t)) 其中:
    • w = 转速
    • v = 速度
    • 圆周率 = 3.14...
    • t = 时间或f(t) = 半径随时间变化的函数

这个方程给出了一种沿着螺旋线移动的方法,我们可以通过指定f(t)来选择我们想要的任何螺旋线。要获得黄金螺旋的正确半径函数,请查看 this关于黄金螺旋的维基页面。它给出了这个方程:

  • r = a*e^(b*theta) 或者换句话说 f(t) = a*e^(b*t) 其中:
    • f(t) = 我们的半径函数
    • a = 用于缩放螺旋的任意常数
    • e = 欧拉常数
    • b = .0053468(如果使用弧度则为 .3063489)
    • t = 时间

结论

剩下的就是将此代码合并到您的机器人中,并为 av 选择您自己的值。 v 将决定机器人的速度,因此较大的 v 是个好主意(最大值为 10),并且由于 w 的最大值为 8,因此您应该相应地缩放 a,以便 w 尽可能长时间地保持在 0 到 8 之间(这就是我包含 println 的原因)。

[注意:我想不出一种简单的方法将黄金螺旋叠加在机器人的路径上以检查其准确性。因此,虽然它显然是一个对数螺旋,但我不确定它在多大程度上接近所需的黄金螺旋]

关于java - 斐波那契螺旋 - Robocode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17331019/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com