2014-05-21 27 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