打印

一个难倒公司所有程序员的难题。

[复制链接]
4366|35
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hugerat|  楼主 | 2007-6-18 14:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
就是求0~360度角的均值的问题。
角度的范围是0~360,一共10个角度值,求均值。
这个问题困扰我们很久了,想了很多算法都没有很好解决。希望大家共同探讨一下。

相关帖子

沙发
HWM| | 2007-6-18 14:05 | 只看该作者

意思都没说清楚,看来还要难倒坛内所有的程序员。

使用特权

评论回复
板凳
平常人| | 2007-6-18 14:05 | 只看该作者

均值是什么意思?请举例说明

使用特权

评论回复
地板
maychang| | 2007-6-18 14:06 | 只看该作者

先把均值定义好再说

使用特权

评论回复
5
hugerat|  楼主 | 2007-6-18 14:18 | 只看该作者

就是普通那种先求和再求平均值的均值。

使用特权

评论回复
6
李冬发| | 2007-6-18 14:20 | 只看该作者

概念不清啊,当然没人做得来.把你要做的事说清楚,问题也就

使用特权

评论回复
7
maychang| | 2007-6-18 14:24 | 只看该作者

更不对了

“就是普通那种先求和再求平均值的均值。”
那么算法已经有了,为什么说“想了很多算法都没有很好解决”?

使用特权

评论回复
8
conwh| | 2007-6-18 14:31 | 只看该作者

算法有了,是不是测量的问题?

使用特权

评论回复
9
hugerat|  楼主 | 2007-6-18 14:41 | 只看该作者

我再说清楚一点

主要是求风向角的一串角度值均值。比如10度,20度,30度,40度,50度,60度,70度,80度,90度,0度求均值,这个只要全部求和再除以10即可得出。可是,如果是330度,340度,350度,10度,20度,30度,40度,50度,60度,70度,简单的求和再除10得出结果肯定是错的。
也就是说来风时,如果风是在0~90度之间摆动,可以简单求出均值。可如果是在300多度和几十度之间摆动,就不能简单求和再除10了。而风的摆动还不仅是这两种情况。还有很多种情况,也就是在不同角度间摆动时如何求均值。

使用特权

评论回复
10
maychang| | 2007-6-18 14:47 | 只看该作者

说明白不就行了?

判断一下是从0~359到360~719,还是从0~359到-359~0,也就是过零时需要判断一下是从小到大,还是从大到小。

使用特权

评论回复
11
云起| | 2007-6-18 16:47 | 只看该作者

LS高明

办法简单而唯一,就是LS说的

使用特权

评论回复
12
conwh| | 2007-6-18 18:25 | 只看该作者

看了LZ的重新解释和maychang的注释,似乎明白了LZ的想法

LZ是希望计算在某段时间内的角度的平均变化量。

使用特权

评论回复
13
tyw| | 2007-6-18 18:28 | 只看该作者

头尾相接就转晕了哈

按10楼方法可行,其实也就一个带符号位的运算问题

使用特权

评论回复
14
tjsheep| | 2007-6-18 21:13 | 只看该作者

直接套用矢量加法的概念不就行了么……

使用特权

评论回复
15
HWM| | 2007-6-19 08:34 | 只看该作者

14楼说得有理,简单的可设想成单位向量对应于十个角度

在X和Y上的投影均值,再由此均值所构成的向量的指向角就是“均角”。

使用特权

评论回复
16
木头东瓜| | 2007-6-19 08:37 | 只看该作者

你们公司程序员应该多去读读物理书

使用特权

评论回复
17
mryyh| | 2007-6-19 09:13 | 只看该作者

投影法是个好方法

十楼的过零判断不易实现,楼主的采样是离散的一组数据,各个数据之间没有相关性,也就没有过零的概念了。
用投影法,先将各个向量分解成X Y两个方向,在两个方向上各自求平均,之后再合成,应该能解决问题。

使用特权

评论回复
18
柔月| | 2007-6-19 09:40 | 只看该作者

两个角度取均值

float aver2angle(float angle1,float angle2)
{
    float da=angle1-angle2;
    if (da<0)
    {
        da=0-da;
    }
    
    if (da<180.0)
    {
        return (angle1+angle2)/2.0;
    }
    else
    {
        da=(angle1+angle2)/2.0-180.0;
        if (da>0)
        {
            return da;
        }
        else
        {
            return da+360.0;
        }
        
    }
}

使用特权

评论回复
19
柔月| | 2007-6-19 09:44 | 只看该作者

前提是所有角度都落在一个半圆内

建议取8个或16个值,单循环比完,就可以得到均值
10个吗,有点麻烦,只好轮空了

使用特权

评论回复
20
木头东瓜| | 2007-6-19 09:47 | 只看该作者

柔月妹这么强

嘿嘿

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

73

主题

159

帖子

2

粉丝