2014-05-21 26 views
-3

我想計算一些角度取決於使用一些奇數軸的一些3d座標(有時下來是+ ve,有時右是-ve等),並拿出了以下開關殼體結構使用開關的情況下或如果else語句

private double RobOrientX(double robY, double robZ) 
    { 
     double AngleX; 

     switch (robY) 
     { 
      case robY>0: 
       switch (robZ) 
       { 
        case robZ>0: 
         AngleX = Math.Atan2(robZ,robY); 
         break; 

        case robZ<0: 
         AngleX = 360 + Math.Atan2(robZ, robY); 
         break; 

        case robZ=0: 
         AngleX = 0; 
         break; 
       } 
       break; 

      case robY<0: 
       switch (robZ) 
       { 
        case robZ>0: 
         AngleX = 180 + Math.Atan2(robZ, robY); 
         break; 

        case robZ<0: 
         AngleX = 180 + Math.Atan2(robZ, robY); 
         break; 

        case robZ=0: 
         AngleX = 180; 
         break; 
       } 
       break; 

      case robY=0: 
       switch (robZ) 
       { 
        case robZ>0: 
         AngleX = 90; 
         break; 

        case robZ<0: 
         AngleX = 270; 
         break; 

        case robZ=0: 
         AngleX = 0; 
         break; 

       } 
       break; 
     } 

     return AngleX; 
    } 

但是存在對switch (robY)一個錯誤,說明一個開關表達需要使用一個空類型,其中我相信雙了。

switch (robZ)上沒有錯誤。有沒有我在這裏失蹤的東西,還是應該將它全部更改爲一系列If else語句?

非常感謝

+6

你不能有條件表達式的情況下,你可以只有常數 –

+1

你可以使雙精度空如下所示:「double?robY」 – EaziLuizi

+1

你似乎是混合度和弧度......是故意的嗎?即'180 + Math.Atan2(...)' –

回答

0

這有什麼做與空的值,並順便double不能爲空(double?爲空)。問題是在C#case語句必須使用常量,而不是布爾測試。您可能只想使用if/else塊。

if(robX > 0) 
{ 
    //... 
} 
else if (robX < 0) 
{ 
    //... 
} 
else if (robX == 0) 
{ 
    //... 
} 
else 
{ 
    // NaN etc? 
} 

無關,但大多數數學函數(包括Math.Atan2)講起弧度 - 但你似乎有度地將它們混合。這將會有非常奇怪的結果。 180度是Math.PI弧度。

+0

謝謝我將創建一個使用if else的版本並將弧度轉換爲度 – MechatronicsStudent