2015-06-23 45 views
-2

我想用Java編寫代碼,用兩個角度移動船:一個在xy平面上,另一個在xz平面上。我要的是代碼,將做到以下幾點:3D運動編程

  • 如果XY和XZ角度爲0,沿正移動x軸
  • 如果XY角爲90°,在XZ角度爲0,移動沿y軸正
  • 如果XY角度爲0,XZ角爲90°,沿正z軸

搬到這裏就是我:

xyAngle = Math.toRadians(xyCourse); 
xzAngle = Math.toRadians(xzCourse); 
double deltaX = Math.cos(xyAngle) * Math.sin(xzAngle); 
double deltaY = Math.sin(xyAngle) * Math.cos(xzAngle); 
double deltaZ = Math.cos(xzAngle); 

System.out.println(String.format("xyAngle = %.4f, xzAngle = %.4f", xyAngle, xzAngle)); 
System.out.println("xyAngle info: sin = " + Math.sin(xyAngle) + ", cos = " + Math.cos(xyAngle)); 
System.out.println("xzAngle info: sin = " + Math.sin(xzAngle) + ", cos = " + Math.cos(xzAngle)); 
System.out.println(String.format("deltaX = %.2f, deltaY = %.2f, deltaZ = %.2f", deltaX, deltaY, deltaZ)); 
for (int i = 0; i <= distance; i++) { 
    System.out.println("Coordinates: " + String.format("(%.2f, %.2f, %.2f)", xCoordinate, yCoordinate, zCoordinate)); 
    xCoordinate += deltaX; 
    yCoordinate += deltaY; 
    zCoordinate += deltaZ; 
} 

我似乎無法得到這個工作。任何人有任何提示?

+2

什麼具體不起作用?請添加更多詳細信息。 – tnw

+0

這樣我得到的結果: 輸入XY角度:0 輸入XZ角度:0 DELTAX = 0.00,移動deltaY = 0.00,deltaZ = 1.00 輸入XY角度:90 輸入XZ角度:0 DELTAX = 0.00, deltaY = 1.00,deltaZ = 1.00 輸入xy角度:0 輸入xz角度:90 deltaX = 1.00,deltaY = 0.00,deltaZ = 0.00, –

回答

1

通過使用Math.cosMath.sin,我覺得你想要的東西可以輕鬆完成嗎?

代碼:

public class QuickTester { 

    public static void main(String[] args) { 

     double [] xyAngles = {0.0, 90.0, 0.0, 45.0}; 
     double [] xzAngles = {0.0, 0.0, 90.0, 45.0}; 

     for(int i = 0; i < xyAngles.length; i++) 
     { 
      double xyAngleRad = Math.toRadians(xyAngles[i]); 
      double xzAngleRad = Math.toRadians(xzAngles[i]); 

      // To fulfill the 3 conditions mentioned 
      double deltaX = Math.cos(xyAngleRad) * Math.cos(xzAngleRad); 
      double deltaY = Math.sin(xyAngleRad) * Math.cos(xzAngleRad); 
      double deltaZ = Math.cos(xyAngleRad) * Math.sin(xzAngleRad); 

      System.out.printf("XY Angle: %4.2f, XZ Angle: %4.2f%n", 
        xyAngles[i], xzAngles[i]); 
      System.out.printf("dX: %4.2f, dY: %4.2f, dZ: %4.2f%n%n", 
        deltaX, deltaY, deltaZ); 
     } 
    } 
} 

做了一些測試與你提到的值,以及附加的情況下XY和XZ角度均爲45度。
輸出:

XY Angle: 0.00, XZ Angle: 0.00 
dX: 1.00, dY: 0.00, dZ: 0.00 

XY Angle: 90.00, XZ Angle: 0.00 
dX: 0.00, dY: 1.00, dZ: 0.00 

XY Angle: 0.00, XZ Angle: 90.00 
dX: 0.00, dY: 0.00, dZ: 1.00 

XY Angle: 45.00, XZ Angle: 45.00 
dX: 0.50, dY: 0.50, dZ: 0.50 

如從輸出所示,

  • 如果在xy和XZ角度是0,dx是1(移動沿霧化+ ve x軸)
  • 如果xy角爲90,xz角爲0,dY爲1(沿+ vey軸移動)
  • 如果xy角爲0且xz角爲90,則dZ爲1(沿+ ve z軸移動)
  • 如果xy和xz角度是45,dX dY dZ都是0.5(沿所有3軸移動?)
+1

Sheesh,所有這些時間和我正在使用不正確的計算。感謝你的回答! –