2011-04-18 76 views
2

我以前在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); 
    } 
+0

爲了更好地幫助越早,張貼[SSCCE(http://pscode.org/sscce。 HTML)。 – 2011-04-18 15:53:06

回答

1

嘗試使用atan2 - 它是由以幫助您處理該

double delta_x = (double) (this.x-this.destination.x); 
double delta_y = (double) (this.y-this.destination.y); 
double radian_angle = Math.atan2(delta_y,delta_x); // arguements are y,x not x,y 

http://download.oracle.com/javase/6/docs/api/java/lang/Math.html#atan2%28double,%20double%29

+0

@ glowcoder - 黨,打我。 ;-) – 2011-04-18 16:01:19

+0

@Bob我坐在這裏想:「我希望Java有atan2,我希望Java已經成功了。」 :-) – corsiKa 2011-04-18 16:02:41

+0

@glowcoder,將atan2的javadoc作爲塊引用幾乎是值得的。由單一線路處理的特殊情況的數量是主要動力。 – 2011-04-18 16:05:54