jim Posté(e) 20 février 2009 Partager Posté(e) 20 février 2009 Bonjour à tous! Je travail sur un projet ou je doit calculer la vitesse du vent ainsi que sa direction à partir de fichier grib que je télécharge. Le problème est qu'il n'y a que les composantes U et V dans un grib, il faut donc faire des calculs. Voici mes calculs: Vitesse = Racine carré de (U²+V²) Direction= arcSinus (U/vitesse)*(180/3.14) Le souci est que je me retrouve avec des directions négatives Si quelqu'un pouvai m'aider sa serai cool. Merci Lien à poster Partager sur d’autres sites More sharing options...
pinthotal Posté(e) 23 février 2009 Partager Posté(e) 23 février 2009 Ca c'est sûr que ta formule ne marche pas ! Déjà la fonction Arcsinus est définie de [-1;1] vers [-Pi/2;Pi/2], donc logiquement ton calcul te donne des valeurs entre -90° et 90°, alors que toi tu veux entre 0° et 360° ! Tu es obligé de faire un algorithme qui sépare les 4 cadrants. Il y a plein de solutions pour l'écrire, en voici une : Si u>=0 | | Si v>0 | Direction=Arctan(u/v)*(180/Pi) | | Si v<0 | Direction=[Pi+Arctan(u/v)]*(180/Pi) | | Si v=0 | Direction=90 ------------------------------------------------------------------ | Si u<0 | | Si v<0 | Direction=[Pi+Arctan(u/v)]*(180/Pi) | | Si v>0 | Direction=[2*Pi+Arctan(u/v)]*(180/Pi) | | Si v=0 | Direction=270 ------------------------------------------------------------------ Lien à poster Partager sur d’autres sites More sharing options...
jim Posté(e) 23 février 2009 Auteur Partager Posté(e) 23 février 2009 Ca c'est sûr que ta formule ne marche pas ! Déjà la fonction Arcsinus est définie de [-1;1] vers [-Pi/2;Pi/2], donc logiquement ton calcul te donne des valeurs entre -90° et 90°, alors que toi tu veux entre 0° et 360° ! Tu es obligé de faire un algorithme qui sépare les 4 cadrants. Il y a plein de solutions pour l'écrire, en voici une : Si u>=0 | | Si v>0 | Direction=Arctan(u/v)*(180/Pi) | | Si v<0 | Direction=[Pi+Arctan(u/v)]*(180/Pi) | | Si v=0 | Direction=90 ------------------------------------------------------------------ | Si u<0 | | Si v<0 | Direction=[Pi+Arctan(u/v)]*(180/Pi) | | Si v>0 | Direction=[2*Pi+Arctan(u/v)]*(180/Pi) | | Si v=0 | Direction=270 ------------------------------------------------------------------ Merci beaucoup! J'ai utilisé ta methode et cela marche à la perfection! Sa faisait 2 mois que j'etait dessus et javou que mon niveau en math ne dépasse pas le primaire Merci encore! Lien à poster Partager sur d’autres sites More sharing options...
Météofun Posté(e) 23 février 2009 Partager Posté(e) 23 février 2009 Comme dit Pinthotal il y a pleins de solutions. Avec le calcul de la vitesse et sauf si je me suis gaufré dans mon raisonnement, ça doit être possible en ne séparant qu’en 2 cadrants : Si u > 0 : Direction = 90 – arcsin(v/vitesse)*180/pi Si u < 0 : Direction = 270 + arcsin(v/vitesse)*180/pi Si u = 0 Si v > 0 ==> Direction = 0° Si v < 0 ==> Direction = 180° Lien à poster Partager sur d’autres sites More sharing options...
jim Posté(e) 23 février 2009 Auteur Partager Posté(e) 23 février 2009 Euh, Je vient de vérifier les valeurs que je calcules avec celles que donne UGrib est elles sont différentes /emoticons/sad@2x.png 2x" width="20" height="20"> Es-tu sur de tes calcules? Ai-ja fais une erreur en les faisants ou UGrib m**** je ne sais pas Merci pr votre aide Lien à poster Partager sur d’autres sites More sharing options...
maloin56 Posté(e) 23 février 2009 Partager Posté(e) 23 février 2009 Pour la vitesse du vent, je fais tout simplement Vitesse = racinecarree(UGRD^2+ VGRD^2) ( à multiplier par 3.6 pour passer de m/s à km/h ) c'est peut-être pourquoi tu ne trouves pas les mêmes valeurs. Pour la direction, je fais : Direction=Arctan(u/v)*(180/Pi)+180 Lien à poster Partager sur d’autres sites More sharing options...
Météofun Posté(e) 23 février 2009 Partager Posté(e) 23 février 2009 Jim tu es sur de ce que tu as écrit comme code ? Normalement la méthode de Pinthotal ou la mienne marche bien (et donne d'ailleurs les mêmes résultats). Par contre Maloin, pour la direction il manque une partie, ce que tu dis marche bien pour les u négatifs, mais pas pour les valeurs positives du vent zonal. Lien à poster Partager sur d’autres sites More sharing options...
Cotissois 31 Posté(e) 23 février 2009 Brest Partager Posté(e) 23 février 2009 En effet, ta formule est trop simple maloin. Essaie avec (u,v)=(-1,-1) et (u,v)=(1,1) tu trouveras le même arctan donc la même direction ce qui est impossible /emoticons/biggrin@2x.png 2x" width="20" height="20"> (private joke) edit : plus sérieusement, la formule de pintothal me paraît fausse. si (u,v)=(1,1) => arctan (u,v) = 45° Or la direction du vent est l'opposé de la direction vers laquelle pointe la flèche. En réalité (u,v)=(1,1) => direction = 225° T'as pas fait la même erreur Christophe ? Lien à poster Partager sur d’autres sites More sharing options...
Météofun Posté(e) 23 février 2009 Partager Posté(e) 23 février 2009 T'as pas fait la même erreur Christophe ? Bha bien sûr Simon ! C'est la grosse honte là quand même ... Effectivement je sais pas comment tu avais raisonné Pinthotal mais j'avais griffonné sur un bout de papier quelques vecteurs qui partaient du centre d'un cercle trigo ... l'erreur fatale ! /emoticons/biggrin@2x.png 2x" width="20" height="20"> Bon donc voilà la correction : Si u < 0 : Direction = 90 - arcsin(v/vitesse)*180/pi Si u > 0 : Direction = 270 + arcsin(v/vitesse)*180/pi Si u = 0 Si v > 0 ==> Direction = 180° Si v < 0 ==> Direction = 0° Lien à poster Partager sur d’autres sites More sharing options...
maloin56 Posté(e) 23 février 2009 Partager Posté(e) 23 février 2009 En effet, ta formule est trop simple maloin. Essaie avec (u,v)=(-1,-1) et (u,v)=(1,1) tu trouveras le même arctan donc la même direction ce qui est impossible /emoticons/biggrin@2x.png 2x" width="20" height="20"> (private joke) edit : plus sérieusement, la formule de pintothal me paraît fausse. si (u,v)=(1,1) => arctan (u,v) = 45° Or la direction du vent est l'opposé de la direction vers laquelle pointe la flèche. En réalité (u,v)=(1,1) => direction = 225° T'as pas fait la même erreur Christophe ? Eh simon, tu es un petit malin toi /emoticons/biggrin@2x.png 2x" width="20" height="20"> C'est toi qui avait déterminé cette formule Direction=Arctan(u/v)*(180/Pi)+180 Pas capable d'avouer son erreur Il croyait s'en tirer comme ça lui Christophe tu n'as pas à avoir honte à côté de simon Lien à poster Partager sur d’autres sites More sharing options...
Cotissois 31 Posté(e) 23 février 2009 Brest Partager Posté(e) 23 février 2009 Ah vraiment ? c'est moi qui t'avais dit çà ? Sinon tu es encore sûr Christophe ? /emoticons/biggrin@2x.png 2x" width="20" height="20"> Loin de moi l'idée de vouloir te contredire, mais ça ne marche pas ton calcul... Je dirais : vent de SO : 270 - arctan (v/u) vent de SE : 90 + arctan (v/u) vent de SE : 90 - arctan (v/u) vent de NE : arctan (u/v) vent de NO : 360 + arctan (u/v) (avec arctan() en degrés) Lien à poster Partager sur d’autres sites More sharing options...
Météofun Posté(e) 23 février 2009 Partager Posté(e) 23 février 2009 Décidément c'est pas mon jour ... Il faut dans ce cas rajouter un mettre l'opposé du vent méridien (le coup de l'inversion de la direction du vent c'est une symétrie centrale et non axiale !). Bon faut rester zen on va y arriver, la prochainement fois je ferais des tests avant de poster ce genre de chose un peu vite ... Et en tout cas, merci Maloin ... Simon, tu viens de cruellement descendre dans mon estime humainement parlant ... /emoticons/sad@2x.png 2x" width="20" height="20"> Quelle sincérité ! /emoticons/biggrin@2x.png 2x" width="20" height="20"> Correction définitive (on peut toujours rêver ! !) Si u < 0 : Direction = 90 - arcsin(-v/vitesse)*180/pi Si u > 0 : Direction = 270 + arcsin(-v/vitesse)*180/pi Si u = 0 Si v > 0 ==> Direction = 180° Si v < 0 ==> Direction = 0° Lien à poster Partager sur d’autres sites More sharing options...
Cotissois 31 Posté(e) 23 février 2009 Brest Partager Posté(e) 23 février 2009 Lol, sans rancune hein /emoticons/biggrin@2x.png 2x" width="20" height="20"> On avait essayé de créer avec maloin un algorithme en fonction de la direction du vent, et heureusement que ce sujet est tombé parce qu'on se rend compte maintenant de notre erreur qui expliquent quelques bizarreries dans nos résultats... /emoticons/biggrin@2x.png 2x" width="20" height="20"> Allez, le dernier qui trouve rédige le prochain BS /emoticons/biggrin@2x.png 2x" width="20" height="20"> Lien à poster Partager sur d’autres sites More sharing options...
ribi Posté(e) 23 février 2009 Limoges Partager Posté(e) 23 février 2009 Maloin a raison, a une virgule près ! Arctan(u,v) à la place de Arctan(u/v) ! Sur php cette fonction est appelée atan2, je ne connais pas son vrai nom, mais cette fonction est bien utile ; on la trouve maintenant dans beaucoup de langages de programmation, ce qui évite d'avoir à traiter tous les cas selon les quadrants Direction = 180/pi * atan2(u,v)+180 ! Lien à poster Partager sur d’autres sites More sharing options...
Météofun Posté(e) 24 février 2009 Partager Posté(e) 24 février 2009 Allez, le dernier qui trouve rédige le prochain BS /emoticons/biggrin@2x.png 2x" width="20" height="20"> Ca c'est du gage ! Maloin a raison, a une virgule près ! Arctan(u,v) à la place de Arctan(u/v) ! Sur php cette fonction est appelée atan2, je ne connais pas son vrai nom, mais cette fonction est bien utile ; on la trouve maintenant dans beaucoup de langages de programmation, ce qui évite d'avoir à traiter tous les cas selon les quadrants Direction = 180/pi * atan2(u,v)+180 ! Effectivement, bien vu Ribi ! J'y avais pas pensé. Je ne connais pas du tout le php, mais c'est vrai que ça existe dans beaucoup de langages (Fortran, Matlab-Scilab, C aussi si je me souviens bien ... ). Le principe est basé sur la notation complexe u+i*v. Lien à poster Partager sur d’autres sites More sharing options...
jim Posté(e) 24 février 2009 Auteur Partager Posté(e) 24 février 2009 Merci a tous pour vos réponses! Pour la vitesse je fais bien Vit= racCarré(U^2+V^2) Et donc pour la direction je doit faire Dir = 90 - arcsin(-v/vitesse)*180/pi si U<0 Dir = 270 + arcsin(-v/vitesse)*180/pi si U>0 Je vais mettre tous sa en SQL et je vous tient au courant des résultats... Encore merci! Lien à poster Partager sur d’autres sites More sharing options...
pinthotal Posté(e) 24 février 2009 Partager Posté(e) 24 février 2009 Merci a tous pour vos réponses! Pour la vitesse je fais bien Vit= racCarré(U^2+V^2) Et donc pour la direction je doit faire Dir = 90 - arcsin(-v/vitesse)*180/pi si U<0 Dir = 270 + arcsin(-v/vitesse)*180/pi si U>0 Je vais mettre tous sa en SQL et je vous tient au courant des résultats... Encore merci! En effet la formule que je t'ai donné décale tout de 180°. Désolé. Lien à poster Partager sur d’autres sites More sharing options...
jim Posté(e) 24 février 2009 Auteur Partager Posté(e) 24 février 2009 En effet la formule que je t'ai donné décale tout de 180°. Désolé. Pas grave ^^ Sinon les calcules données au début avec les 4 quadrants étaient bon? Car pour mettre en sql c'est plus simple de faire qu'avec U et V plutot que de rajouter la vitesse en plus. Merci! Lien à poster Partager sur d’autres sites More sharing options...
Météofun Posté(e) 24 février 2009 Partager Posté(e) 24 février 2009 Si tu préfères l'écriture en 4 cadrants tu peux utiliser ce qu'a écrit Cotissois hier soir (message 11) : /index.php?showtopic=43719&st=0&p=958878'>http://forums.infoclimat.fr/index.php?show...mp;#entry958878 Bonne journée à tous ^^ Lien à poster Partager sur d’autres sites More sharing options...
pinthotal Posté(e) 24 février 2009 Partager Posté(e) 24 février 2009 Pas grave ^^ Sinon les calcules données au début avec les 4 quadrants étaient bon? Car pour mettre en sql c'est plus simple de faire qu'avec U et V plutot que de rajouter la vitesse en plus. Merci! Voilà la bonne écriture : Si u>=0 | | Si v>0 | Direction=[Pi+Arctan(u/v)]*(180/Pi) | | Si v<0 | Direction=[2*Pi+Arctan(u/v)]*(180/Pi) | | Si v=0 | Direction=270 ------------------------------------------------------------------ | Si u<0 | | Si v<0 | Direction=[Arctan(u/v)]*(180/Pi) | | Si v>0 | Direction=[Pi+Arctan(u/v)]*(180/Pi) | | Si v=0 | Direction=90 ------------------------------------------------------------------ Pense bien à écrire les deux cas où v=0 pour être sûr de ne pas faire de division par 0. Lien à poster Partager sur d’autres sites More sharing options...
maloin56 Posté(e) 24 février 2009 Partager Posté(e) 24 février 2009 Maloin a raison, a une virgule près ! Arctan(u,v) à la place de Arctan(u/v) ! Sur php cette fonction est appelée atan2, je ne connais pas son vrai nom, mais cette fonction est bien utile ; on la trouve maintenant dans beaucoup de langages de programmation, ce qui évite d'avoir à traiter tous les cas selon les quadrants Direction = 180/pi * atan2(u,v)+180 ! En effet ribi, en plus j'utilise bien cette fonction et c'est bien une virgule que j'ai dans mon script. Plus d'info sur la fonction atan2 : http://www.manuelphp.com/php/function.atan2.php Lien à poster Partager sur d’autres sites More sharing options...
jim Posté(e) 25 février 2009 Auteur Partager Posté(e) 25 février 2009 Merci a tous ! Tout fonctionne parfaitement! Je commencé a en avoir marre de ces grib ^^ Bonne journée a tous et encore merci! Lien à poster Partager sur d’autres sites More sharing options...
ouraganbloubloum Posté(e) 17 mars 2009 Partager Posté(e) 17 mars 2009 ------------------------------------------------------------------ |Bonjour, je relance ce débat passionnant en vous demandant comment faites-vous pour calculer l'arctan car moi sur excel j'ai des valeurs fausses!! Merci Lien à poster Partager sur d’autres sites More sharing options...
pinthotal Posté(e) 20 mars 2009 Partager Posté(e) 20 mars 2009 ------------------------------------------------------------------ |Bonjour, je relance ce débat passionnant en vous demandant comment faites-vous pour calculer l'arctan car moi sur excel j'ai des valeurs fausses! Merci Vérifie l'unité, tu dois être en radians au lieu d'être en degrés. Lien à poster Partager sur d’autres sites More sharing options...
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant