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

[复制链接]
6317|35
 楼主| hugerat 发表于 2007-6-18 14:01 | 显示全部楼层 |阅读模式
就是求0~360度角的均值的问题。<br />角度的范围是0~360,一共10个角度值,求均值。<br />这个问题困扰我们很久了,想了很多算法都没有很好解决。希望大家共同探讨一下。<br />
HWM 发表于 2007-6-18 14:05 | 显示全部楼层

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

  
平常人 发表于 2007-6-18 14:05 | 显示全部楼层

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

  
maychang 发表于 2007-6-18 14:06 | 显示全部楼层

先把均值定义好再说

  
 楼主| hugerat 发表于 2007-6-18 14:18 | 显示全部楼层

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

  
李冬发 发表于 2007-6-18 14:20 | 显示全部楼层

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

  
maychang 发表于 2007-6-18 14:24 | 显示全部楼层

更不对了

“就是普通那种先求和再求平均值的均值。”<br />那么算法已经有了,为什么说“想了很多算法都没有很好解决”?
conwh 发表于 2007-6-18 14:31 | 显示全部楼层

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

  
 楼主| 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得出结果肯定是错的。<br />也就是说来风时,如果风是在0~90度之间摆动,可以简单求出均值。可如果是在300多度和几十度之间摆动,就不能简单求和再除10了。而风的摆动还不仅是这两种情况。还有很多种情况,也就是在不同角度间摆动时如何求均值。
maychang 发表于 2007-6-18 14:47 | 显示全部楼层

说明白不就行了?

判断一下是从0~359到360~719,还是从0~359到-359~0,也就是过零时需要判断一下是从小到大,还是从大到小。
云起 发表于 2007-6-18 16:47 | 显示全部楼层

LS高明

办法简单而唯一,就是LS说的
conwh 发表于 2007-6-18 18:25 | 显示全部楼层

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

LZ是希望计算在某段时间内的角度的平均变化量。
tyw 发表于 2007-6-18 18:28 | 显示全部楼层

头尾相接就转晕了哈

按10楼方法可行,其实也就一个带符号位的运算问题
tjsheep 发表于 2007-6-18 21:13 | 显示全部楼层

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

  
HWM 发表于 2007-6-19 08:34 | 显示全部楼层

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

在X和Y上的投影均值,再由此均值所构成的向量的指向角就是“均角”。
木头东瓜 发表于 2007-6-19 08:37 | 显示全部楼层

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

  
mryyh 发表于 2007-6-19 09:13 | 显示全部楼层

投影法是个好方法

十楼的过零判断不易实现,楼主的采样是离散的一组数据,各个数据之间没有相关性,也就没有过零的概念了。<br />用投影法,先将各个向量分解成X&nbsp;Y两个方向,在两个方向上各自求平均,之后再合成,应该能解决问题。
柔月 发表于 2007-6-19 09:40 | 显示全部楼层

两个角度取均值

float&nbsp;aver2angle(float&nbsp;angle1,float&nbsp;angle2)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;float&nbsp;da=angle1-angle2;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(da&lt0)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;da=0-da;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(da&lt180.0)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(angle1+angle2)/2.0;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;da=(angle1+angle2)/2.0-180.0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(da&gt0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;da;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;da+360.0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}
柔月 发表于 2007-6-19 09:44 | 显示全部楼层

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

建议取8个或16个值,单循环比完,就可以得到均值<br />10个吗,有点麻烦,只好轮空了
木头东瓜 发表于 2007-6-19 09:47 | 显示全部楼层

柔月妹这么强

嘿嘿
您需要登录后才可以回帖 登录 | 注册

本版积分规则

73

主题

159

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部