average_vane为0到360之间的离散数据,在一段时间内有以下9种取值情况:
average_vane  >=337.5  or  average_vane  <= 22.5 并持续一段时间,
average_vane  > 22.5 and   average_vane  < 67.5  并持续一段时间, 
average_vane  >= 67.5 and  average_vane  <= 112.5 并持续一段时间, 
average_vane  > 112.5 and  average_vane  < 157.5 并持续一段时间,  
average_vane  >= 157.5 and  average_vane  <= 202.5 并持续一段时间 , 
average_vane  > 202.5 and   average_vane  < 247.5 并持续一段时间,
average_vane  >= 247.5 and  average_vane  <= 292.5并持续一段时间 , 
average_vane  > 292.5 and   average_vane  < 337.5 并持续一段时间;
统计的总时间是以上各持续时间之和。
该算法需要统计出在该段时间内average_vane 的均值。
average_vane  >=337.5  or  average_vane  <= 22.5 为同一个情况,可以说是八种吧,涉及过零问题。

解决方案 »

  1.   

    average_vane为0到360之间的离散数据,在一段时间内有以下9种取值情况:
    average_vane  >=337.5  or  average_vane  <= 22.5 并持续一段时间,
                                                     ~~~~~~~~这个时间是固定的吗?
      

  2.   

    zhyduan (阳阳)  ,你好,我分析了一下,发现你的数据 和 22.5有关系
    /*
                     15*22.5                   1
    average_vane  >=337.5  or  average_vane  <= 22.5 并持续一段时间,                1                           3
    average_vane  > 22.5 and   average_vane  < 67.5  并持续一段时间,                  3                           5 
    average_vane  >= 67.5 and  average_vane  <= 112.5 并持续一段时间,                   5                          7
    average_vane  > 112.5 and  average_vane  < 157.5 并持续一段时间,                    7                           9
    average_vane  >= 157.5 and  average_vane  <= 202.5 并持续一段时间 ,
        
                  9                            11
    average_vane  > 202.5 and   average_vane  < 247.5 并持续一段时间,                   11                           13
    average_vane  >= 247.5 and  average_vane  <= 292.5并持续一段时间 ,                    13                           15
    average_vane  > 292.5 and   average_vane  < 337.5 并持续一段时间;
    */double average_vane;average_vane = ........ 这里完成你的赋值int ft=(int)(average_vane/22.5);//average_vane 除以 22.5 然后转换为 int 
    switch(ft) 

      
        case : 2
             //此种情况处理程序         此时 ft  = 2
    //                  1 < ft < 3
            //average_vane  > 22.5 and   average_vane  < 67.5  并持续一段时间, break;
    case:  4
             //此种情况处理程序         此时 ft  = 4
             //                 3             < ft<             5 
             //average_vane  >= 67.5 and  average_vane  <= 112.5 并持续一段时间,  break;
    case:  6
             //此种情况处理程序         此时 ft  = 6
     //                 5             < ft<             7 
             //average_vane  > 112.5 and  average_vane  < 157.5 并持续一段时间,  break;
    case:  8
             //此种情况处理程序         此时 ft  = 8
    //                      7                           9
             //average_vane  >= 157.5 and  average_vane  <= 202.5 并持续一段时间 , break; case : 10
             //此种情况处理程序         此时 ft  = 10
    //                        9                            11
             //average_vane  > 202.5 and   average_vane  < 247.5 并持续一段时间, break;
    case:  12
             //此种情况处理程序         此时 ft  = 12
    //                11                           13
             //average_vane  >= 247.5 and  average_vane  <= 292.5并持续一段时间 ,
    break;
    case:  14
             //此种情况处理程序         此时 ft  = 14
    //                   14                           15
             //average_vane  > 292.5 and   average_vane  < 337.5 并持续一段时间;
    break;
    default:
         //其他情况的处理
         //15*22.5                   1
                  //average_vane  >=337.5  or  average_vane  <= 22.5 并持续一段时间,
    }
     一定要给100分哟,我 写了好久,我争取多几颗星  :)
      

  3.   

    以上是对你的每种情况分离出来做处理做不同的事情。算法需要统计出在该段时间内average_vane 的均值?
    不知你什么意思,是不是求各段时间内 的均值,那么有简单的方法static double[] all_num = new double[8]; 
    static int[] times = new int[8];
    double average_vane;average_vane = ........ 这里完成你的赋值int ft=(int)(average_vane/22.5);
    //average_vane 除以 22.5 然后转换为 int 
    int i_conditions;//第几种情况
    switch(ft) 

      
        case : 2
             //此种情况处理程序         此时 ft  = 2
    i_conditions =0 ;
    //                  1 < ft < 3
            //average_vane  > 22.5 and   average_vane  < 67.5  并持续一段时间, break;
    case:  4
             //此种情况处理程序         此时 ft  = 4
    i_conditions =1 ;
             //                 3             < ft<             5 
             //average_vane  >= 67.5 and  average_vane  <= 112.5 并持续一段时间,  break;
    case:  6
             //此种情况处理程序         此时 ft  = 6
    i_conditions =2 ;
     //                 5             < ft<             7 
             //average_vane  > 112.5 and  average_vane  < 157.5 并持续一段时间,  break;
    case:  8
             //此种情况处理程序         此时 ft  = 8
    //                      7                           9
             //average_vane  >= 157.5 and  average_vane  <= 202.5 并持续一段时间 ,
        i_conditions =3 ;
    //以下类推 i_conditions 从 4 到  7
    break; case : 10
             //此种情况处理程序         此时 ft  = 10
    //                        9                            11
             //average_vane  > 202.5 and   average_vane  < 247.5 并持续一段时间, break;
    case:  12
             //此种情况处理程序         此时 ft  = 12
    //                11                           13
             //average_vane  >= 247.5 and  average_vane  <= 292.5并持续一段时间 ,
    break;
    case:  14
             //此种情况处理程序         此时 ft  = 14
    //                   14                           15
             //average_vane  > 292.5 and   average_vane  < 337.5 并持续一段时间;
    break;
    default:
         //其他情况的处理
         //15*22.5                   1
                  //average_vane  >=337.5  or  average_vane  <= 22.5 并持续一段时间,
    }all_num[i_conditions] + = average_vane ; //来累加 某种情况 的总和
    times[i_conditions =2 ;]++ ;//来累加次数
    //以下求平均数程序
    double[] average_num = double[8] 
     for(int i=0 ;i< 8;i++)
    {
           average_num[i] = all_num[i]/times[i];
    }
    求得每段时间的 平均值
    以上是c的风格,写成c# 得写  成几个成员函数 好些
    另外 求第几种情况 i_conditions 也可以不用 switch,因为你注意到实际上ft 是 2的倍数
    第一种情况是  1* 2 ,第二种情况是 2*2 .......
    这个可以直接提取是第几种情况
      

  4.   

    如果是求 总时间内的 average_vane 的平均值
    那更容易了static double d_allNum;
    static int  i_allTimes;
    double average_vane;
    average_vane = ........ 这里完成你的赋值//每次调用以下代码  使静态变量 完成累加
    //求和
    d_allNum+ =average_vane ;
    //累加次数
    i_allTimes++
    最后取得 均值 
    double d_average_num =  d_allNum / i_allTimes
    发现所有的情况我都分析完了哈
    100分,今天无聊,挣点分,以后我好用