Java 斐波那契螺旋机器人码
有人知道我怎么能在机器人代码中,沿着斐波那契模式绕着一个点做螺旋运动吗?我有像setTurnRight(double)、setAhead(double)、getX()和getY()这样的方法 我试着做一个简单的螺旋,没有要求的标准,那样的话,但它不起作用。。。它更像一个圆圈Java 斐波那契螺旋机器人码,java,fibonacci,spiral,robocode,Java,Fibonacci,Spiral,Robocode,有人知道我怎么能在机器人代码中,沿着斐波那契模式绕着一个点做螺旋运动吗?我有像setTurnRight(double)、setAhead(double)、getX()和getY()这样的方法 我试着做一个简单的螺旋,没有要求的标准,那样的话,但它不起作用。。。它更像一个圆圈 this.setAhead(this.direction * Double.POSITIVE_INFINITY); if (this.direction == 1) { this.setTurnRight(Utils
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));
}
游戏物理:
机器人代码对数螺旋线
这里有一个使机器人沿着对数螺旋运行的工作运行方法,我相信它是黄金螺旋的近似值(这是可以用斐波那契数近似的螺旋)
解释
要在一个圆圈(普通螺旋)中移动,您需要保持恒定的速度(机器人移动的速度)和恒定的旋转速度(机器人转动的速度)。从这个琐碎的螺旋运动到更有趣的东西,有几种方法以螺旋形移动的最简单方法是保持恒定速度并改变旋转速度。游戏开发交换的答案很好地介绍了如何获得旋转速度的近似方程式
或w=v/(2*pi*t)
其中:w=v/(2*pi*f(t))
- w=转速
- v=速度
- pi=3.14
- t=时间或f(t)=半径随时间的函数
或者换句话说r=a*e^(b*theta)
其中:f(t)=a*e^(b*t)
- f(t)=我们的半径函数
- a=缩放螺旋的任意常数
- e=欧拉常数
- b=.0053468(如果使用弧度,则为.3063489)
- t=时间
或w=v/(2*pi*t)
其中:w=v/(2*pi*f(t))
- w=转速
- v=速度
- pi=3.14
- t=时间或f(t)=半径随时间的函数
或者换句话说r=a*e^(b*theta)
其中:f(t)=a*e^(b*t)
- f(t)=我们的半径函数
- a=缩放螺旋的任意常数
- e=欧拉常数
- b=.0053468(如果使用弧度,则为.3063489)
- t=时间
[注意:我想不出一种简单的方法来在机器人的路径上叠加黄金螺旋以检查其准确性。因此,虽然它显然是对数螺旋,但我不确定它在多大程度上接近所需的黄金螺旋]要绘制螺旋,必须逐渐增加半径。但是加多少呢?多久一次?阅读我链接的帖子。我认为
x=sin(t)
,y=cos(t)
,和z=t
会形成一个螺旋。要绘制螺旋,你必须逐渐增加半径。但是加多少呢?多久一次?阅读我链接的帖子。我认为x=sin(t)
,y=cos(t)
,和z=t
会形成一个螺旋。
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);
}
}