我以前在2d項目中使用過類似的東西,它總是有效的。我現在正在使用它,它給了我一些輸出的正確角度和錯誤的角度。我認爲我的錯誤只是出現了一些錯誤。儘管我已經檢查了大約一百萬次。 Prolly只是自動糾正了我腦海中的錯誤。這是一些輸出示例,以及邪惡代碼。2d中的Java運動
this(x,y): (500.0, 250.0)
dest(x,y): (400.0, 300.0)
DeltX: 100.0
DeltY: -50.0
Angle: 0.46364760900080615 //about 26.56°, should be 206.56° (26.56+pi) i think
XVELOC: 0.08944272
YVELOC: 0.04472136
public void Update(long deltaTime){
if(this.destination == null){
return;
}
this.x += this.x_velocity * deltaTime;
this.y += this.y_velocity * deltaTime;
if(Math.abs(this.x-destination.x) < 1 && Math.abs(this.y-destination.y) < 1){
destination.arrive(this);
}
}
public void setPath(){
if(this.destination == null){
return;
}
double delta_x = (double) (this.x-this.destination.x);
double delta_y = (double) (this.y-this.destination.y);
int sign_x = (int)Math.signum(delta_x);
int sign_y = (int)Math.signum(delta_y);
double radian_angle = Math.atan((delta_x/delta_y));
if(sign_x > 0 && sign_y > 0)
radian_angle += Math.PI;
else if(sign_x > 0 && sign_y < 0)
radian_angle += Math.PI/2;
else if(sign_x < 0 && sign_y > 0)
radian_angle += 3*Math.PI/2;
System.out.println("DeltX: "+delta_x);
System.out.println("DeltY: "+delta_y);
System.out.println("Angle: "+radian_angle);
this.x_velocity = this.max_velocity*(float)Math.cos(radian_angle);
this.y_velocity = this.max_velocity*(float)Math.sin(radian_angle);
System.out.println("XVELOC: "+x_velocity);
System.out.println("YVELOC: "+y_velocity);
}
爲了更好地幫助越早,張貼[SSCCE(http://pscode.org/sscce。 HTML)。 – 2011-04-18 15:53:06