Faire une moyenne d'angle (girouette)

La question :

Bonjour,

je cherche à faire une moyenne d'angle, valeur qui ont été relevé sur une
girouette, pour donner la direction moyenne du vent sur une période (par
exemple).

une moyenne simple ne fonctionne pas (350° et -10° doit donner une
direction
à 0°, et pas 170°)

j'avais pensé à la moyenne des Tan (pour avoir le coef directeur), mais je
perds aussi la notion de sens (Est/Ouest)

j'ai fini par opter par faire la moyenne pondérée des deux angles (moyenne
sommes des tan ouest + sommes des tan est)

Direction = Moy( PoidEst * ArcTan(Avg(Tan(DirEst))) + PoidOuest *
ArcTan(Avg(Tan(DirOuest))))

Cela fonctionne.... mais je me demandais si il existait une fonction plus
mathématique, trigonométrique...

Merci d'avance,
Vincent.


--
Ma Boîte de Réception est protégée par SPAMfighter
654 e-mails spam ont été bloqués jusqu'à maintenant.
Téléchargez au jour d'hui gratuitement SPAMfighter!

Poser votre question sur le forum Programmation

Les 17 réponses :

On Fri, 22 Jul 2005 23:11:18 +0200, "GriVin" :


une moyenne simple ne fonctionne pas (350° et -10° doit donner une
direction à 0°


Non. 350° et -10°, c'est la même chose, donc la moyenne est 350°.

J'imagine que toutes tes mesures sont relativement proches (si tu as
deux directions diamétralement opposées, la moyenne n'indique pas
forcément grand-chose).

Si tes mesures sont relativement proches de 0° (ou 360°, ce qui est la
même chose), convertis-les dans la plage [-180°,+180°] (i.e. enlève
360° à toutes les mesures supérieures à 180°). Sinon, laisse-les
telles quelles.

Et fais ta moyenne avec ces valeurs.

GriVin a écrit :


Bonjour,

je cherche à faire une moyenne d'angle, valeur qui ont été relevé sur une
girouette, pour donner la direction moyenne du vent sur une période (par
exemple).

une moyenne simple ne fonctionne pas (350° et -10° doit donner une
direction
à 0°, et pas 170°)


Gnééé ? Moi j'aurais dit que la moyenne aurait été 350° (ou -10°)
mais certainement pas 170° (puisque 350 = -10 modulo ce qu'il faut).
Pour ce premier problème, il me semble plus simple de convertir toutes
les valeurs pour tomber dans l'intervalle [0,360[.


j'avais pensé à la moyenne des Tan (pour avoir le coef directeur), mais je
perds aussi la notion de sens (Est/Ouest)
j'ai fini par opter par faire la moyenne pondérée des deux angles (moyenne
sommes des tan ouest + sommes des tan est)

Direction = Moy( PoidEst * ArcTan(Avg(Tan(DirEst))) + PoidOuest *
ArcTan(Avg(Tan(DirOuest))))


C'est quoi ce "Avg" ? Connais pas. À quoi peuvent bien servir des
poids différents pour l'ouest et l'est ? Autrement dit pourquoi
privilégier une direction plutôt que l'autre ?


Cela fonctionne.... mais je me demandais si il existait une fonction plus
mathématique, trigonométrique...


Il me semble que la première proposition fonctionnera correctement
sauf que cela prévilégie la direction est. En réalité, on butera
toujours sur un problème de choix. Quelle est la moyenne de 100° et 280°
: 10° ou 190° ?
Si pour les deux angles 80° et 280° la réponse 0° est plus
"naturelle", une possibilité serait de faire la moyenne en modifiant
toutes les valeur des angles comme au début (on obtient M1), puis
d'ajouter les cosinus de tous les angles. Si la somme est positive, la
moyenne doit se situer sur [0,90] U [270,360[ sinon, elle doit se situer
sur [90,270]. Si M1 ne vérifie pas ce critère, faire l'opération qu'il
faut pour prendre l'angle opposé. Et si la somme des cosinus est nulle,
il faut trancher de façon arbitraire (c'est le cas 100° et 280°).

Jean-Côme Charpentier

> une moyenne simple ne fonctionne pas (350° et -10° doit donner une


direction
à 0°, et pas 170°)


En fait, il me semble que ce que tu veux c'est l'angle de la somme des
vecteurs. Si on prend une notation exponentielle, tu as comme valeurs des
z[k] = v[k]*exp(i*Theta[k]) où Theta[k] est l'angle de ta girouette et v[k]
est l'importance que tu donne à la valeur (peut être la vitesse du vent ? un
truc comme le flux d'air : vitesse * temps d'exposition ? ou 1 si toutes tes
données sont aussi importantes... à toi de voir)

Et tu veux arg( Somme(v[k]*exp(i*Theta[k])) ). J'ai pas le courage de
vérifier que ca correspond à ce que tu as écrit... mais c'est surement plus
mathématique (je veux dire que ta formule est très intuitive, et ne me
convainc par vraiment au premier regard).

--
Vincent

On Fri, 22 Jul 2005 23:44:29 +0200, Jean-Côme Charpentier
:


une moyenne simple ne fonctionne pas (350° et -10° doit donner une
direction
à 0°, et pas 170°)


Gnééé ? Moi j'aurais dit que la moyenne aurait été 350° (ou -10°)


AMHA il s'agit d'une faute de frappe : je pense qu'il a voulu faire la
moyenne de 350° et 10°.


C'est quoi ce "Avg" ?


Average (moyenne) sans doute ?

On Sat, 23 Jul 2005 01:22:50 +0200, "Vincent Lascaux"
:


Et tu veux arg( Somme(v[k]*exp(i*Theta[k])) ).


Effectivement, ça me paraît plus logique que ce que j'avais proposé.

Poser votre question sur le forum Programmation

Questions similaires :

Moyenne de températures

Bonjour, Ce que je veux faire est en théorie simple, c'est calculer la moyenne de températures sur une période donnée. Les données en entrée sont des couples date (en s) et température (en °C). Le problème est que les intervalles entre les dates ne sont pas identiques, sinon il suffirait de faire...

Valeur Moyenne d'une surface

Bonjour, Je dispose d'une surface en dimension n : y = f(x1, x2, ..., xn) ( au besoin je connais les dérivés partielles de cette surface ) Je cherche une manière intelligente de calculer la valeur moyenne de y Par echantillonnage, le temps de calcul quand n est grand...

faire "tourner" la valeur d'une variable

Bonjour, Soit une variable toto codée sur 8 bits Je voudrais que cette variable s'incremente ou se decremente de 1 sans dépasser VALEURMAX(<255) Par ex en incrementant ca me donne toto=(toto+1)%7 donc des que toto arrive à 6 je passe à 0. C'est parfait Maintenant je voudrais aussi decrementer...

Distance de Levenshtein qui affiche les modifications a faire

Y a-t-il un moyen d'adapter la distance de Levenshtein pour que, au lieu de lui faire afficher seulement le nombre de changements à faire pour passer d'une chaîne A à une chaîne B, on obtienne en sortie la liste des changements qui peuvent être faits ? Par exemple, DL ("toto", "tat") afficherait...