Aller au contenu

Ce tchat, hébergé sur une plateforme indépendante d'Infoclimat, est géré et modéré par une équipe autonome, sans lien avec l'Association.
Un compte séparé du site et du forum d'Infoclimat est nécessaire pour s'y connecter.

Fichier grib


jim
 Partager

Messages recommandés

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 :S

Si quelqu'un pouvai m'aider sa serai cool.

Merci

Lien à poster
Partager sur d’autres sites

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

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 default_huh.png et javou que mon niveau en math ne dépasse pas le primaire default_rolleyes.gif

Merci encore!

Lien à poster
Partager sur d’autres sites

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

Euh,

Je vient de vérifier les valeurs que je calcules avec celles que donne UGrib est elles sont différentes default_sad.png/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 :S

Merci pr votre aide

Lien à poster
Partager sur d’autres sites

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

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

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 default_rolleyes.gif

default_biggrin.png/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

T'as pas fait la même erreur Christophe ?

Bha bien sûr Simon ! C'est la grosse honte là quand même ... default_pinch.gifEffectivement 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 ! default_biggrin.png/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

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 default_rolleyes.gif

default_biggrin.png/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 default_biggrin.png/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 default_innocent.gif

Pas capable d'avouer son erreur default_innocent.gif Il croyait s'en tirer comme ça lui default_devil.gif

Christophe tu n'as pas à avoir honte à côté de simon default_flowers.gif

Lien à poster
Partager sur d’autres sites

default_whistling.gif Ah vraiment ? c'est moi qui t'avais dit çà ?

Sinon tu es encore sûr Christophe ? default_biggrin.png/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... default_crying.gif

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

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 ... default_sad.png/emoticons/sad@2x.png 2x" width="20" height="20"> Quelle sincérité ! default_biggrin.png/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

Lol, sans rancune hein default_biggrin.png/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... default_biggrin.png/emoticons/biggrin@2x.png 2x" width="20" height="20">

Allez, le dernier qui trouve rédige le prochain BS default_biggrin.png/emoticons/biggrin@2x.png 2x" width="20" height="20">

Lien à poster
Partager sur d’autres sites

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

Allez, le dernier qui trouve rédige le prochain BS default_biggrin.png/emoticons/biggrin@2x.png 2x" width="20" height="20">

Ca c'est du gage ! default_laugh.png
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

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

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

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

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

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

  • 3 weeks later...

------------------------------------------------------------------

|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! default_huh.pngdefault_huh.pngdefault_huh.png

Merci

Vérifie l'unité, tu dois être en radians au lieu d'être en degrés.
Lien à poster
Partager sur d’autres sites

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
 Partager

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...