Calcul de l'angle moyen
par , 15/02/2018 à 10h46 (2514 Affichages)
Dans le cas ou l'on mesure la direction du vent à partir de l'angle d'une girouette (dans le sens horaire), une moyenne arithmétique n'est pas la solution (car on peut obtenir comme moyenne une direction inverse au sens du vent).
Il faut considérer le problème du point de vue du cercle trigonométrique (sin et cos de l'angle en radian). La pointe de la girouette étant sur le cercle trigonométrique.
On peut avoir une moyenne entre deux ou plusieurs mesures !
Voici ma méthode et mes tests de calcul :
Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 { // cas 0 et 182 const anglesMesuré = [ 0, 182 ], converDegEnRadian = Math.PI / 180.0, converRadianEnDeg = 180.0 / Math.PI; let arX = [], arY = [], sommeX = 0.0, sommeY = 0.0, moyenneX = 0.0, moyenneY = 0.0, angleMoyen = 0.0; for ( const [ i, angle ] of anglesMesuré.entries() ){ arX[ i ] = Math.cos( angle * converDegEnRadian ); arY[ i ] = Math.sin( angle * converDegEnRadian ); } for ( const value of arX ){ sommeX += value; } moyenneX = sommeX / arX.length; for ( const value of arY ){ sommeY += value; } moyenneY = sommeY / arY.length; angleMoyen = Math.atan2( moyenneY, moyenneX ) * converRadianEnDeg; if ( angleMoyen < 0 ){ angleMoyen += 360; } console.log( `L'angle moyen du vent est de ${angleMoyen}°` ); // L'angle moyen du vent est de 270.99999999999994° }
Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 { // cas 0 et 180 const anglesMesuré = [ 0, 180 ], converDegEnRadian = Math.PI / 180.0, converRadianEnDeg = 180.0 / Math.PI; let arX = [], arY = [], sommeX = 0.0, sommeY = 0.0, moyenneX = 0.0, moyenneY = 0.0, angleMoyen = 0.0; for ( const [ i, angle ] of anglesMesuré.entries() ){ arX[ i ] = Math.cos( angle * converDegEnRadian ); arY[ i ] = Math.sin( angle * converDegEnRadian ); } for ( const value of arX ){ sommeX += value; } moyenneX = sommeX / arX.length; for ( const value of arY ){ sommeY += value; } moyenneY = sommeY / arY.length; angleMoyen = Math.atan2( moyenneY, moyenneX ) * converRadianEnDeg; if ( angleMoyen < 0 ){ angleMoyen += 360; } console.log( `L'angle moyen du vent est de ${angleMoyen}°` ); // L'angle moyen du vent est de 90° }
Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 { // cas 225 et 225 const anglesMesuré = [ 225, 225 ], converDegEnRadian = Math.PI / 180.0, converRadianEnDeg = 180.0 / Math.PI; let arX = [], arY = [], sommeX = 0.0, sommeY = 0.0, moyenneX = 0.0, moyenneY = 0.0, angleMoyen = 0.0; for ( const [ i, angle ] of anglesMesuré.entries() ){ arX[ i ] = Math.cos( angle * converDegEnRadian ); arY[ i ] = Math.sin( angle * converDegEnRadian ); } for ( const value of arX ){ sommeX += value; } moyenneX = sommeX / arX.length; for ( const value of arY ){ sommeY += value; } moyenneY = sommeY / arY.length; angleMoyen = Math.atan2( moyenneY, moyenneX ) * converRadianEnDeg; if ( angleMoyen < 0 ){ angleMoyen += 360; } console.log( `L'angle moyen du vent est de ${angleMoyen}°` ); // L'angle moyen du vent est de 225° }
Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 { // cas 90 et 270 const anglesMesuré = [ 90, 270 ], converDegEnRadian = Math.PI / 180.0, converRadianEnDeg = 180.0 / Math.PI; let arX = [], arY = [], sommeX = 0.0, sommeY = 0.0, moyenneX = 0.0, moyenneY = 0.0, angleMoyen = 0.0; for ( const [ i, angle ] of anglesMesuré.entries() ){ arX[ i ] = Math.cos( angle * converDegEnRadian ); arY[ i ] = Math.sin( angle * converDegEnRadian ); } for ( const value of arX ){ sommeX += value; } moyenneX = sommeX / arX.length; for ( const value of arY ){ sommeY += value; } moyenneY = sommeY / arY.length; angleMoyen = Math.atan2( moyenneY, moyenneX ) * converRadianEnDeg; if ( angleMoyen < 0 ){ angleMoyen += 360; } console.log( `L'angle moyen du vent est de ${angleMoyen}°` ); // L'angle moyen du vent est de 180° }
Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 { // cas angles divers const anglesMesuré = [ 0, 90, 180, 45, 125 ], converDegEnRadian = Math.PI / 180.0, converRadianEnDeg = 180.0 / Math.PI; let arX = [], arY = [], sommeX = 0.0, sommeY = 0.0, moyenneX = 0.0, moyenneY = 0.0, angleMoyen = 0.0; for ( const [ i, angle ] of anglesMesuré.entries() ){ arX[ i ] = Math.cos( angle * converDegEnRadian ); arY[ i ] = Math.sin( angle * converDegEnRadian ); } for ( const value of arX ){ sommeX += value; } moyenneX = sommeX / arX.length; for ( const value of arY ){ sommeY += value; } moyenneY = sommeY / arY.length; angleMoyen = Math.atan2( moyenneY, moyenneX ) * converRadianEnDeg; if ( angleMoyen < 0 ){ angleMoyen += 360; } console.log( `L'angle moyen du vent est de ${angleMoyen}°` ); // L'angle moyen du vent est de 86.97433531874515° }
Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 { // cas angles divers const anglesMesuré = [ 276, 271, 270, 273, 274, 277 ], converDegEnRadian = Math.PI / 180.0, converRadianEnDeg = 180.0 / Math.PI; let arX = [], arY = [], sommeX = 0.0, sommeY = 0.0, moyenneX = 0.0, moyenneY = 0.0, angleMoyen = 0.0; for ( const [ i, angle ] of anglesMesuré.entries() ){ arX[ i ] = Math.cos( angle * converDegEnRadian ); arY[ i ] = Math.sin( angle * converDegEnRadian ); } for ( const value of arX ){ sommeX += value; } moyenneX = sommeX / arX.length; for ( const value of arY ){ sommeY += value; } moyenneY = sommeY / arY.length; angleMoyen = Math.atan2( moyenneY, moyenneX ) * converRadianEnDeg; if ( angleMoyen < 0 ){ angleMoyen += 360; } console.log( `L'angle moyen du vent est de ${angleMoyen}°` ); // L'angle moyen du vent est de 273.5° }Licence Creative Commons Attribution 2.0 Belgique
Mis à jour 08/06/2018 à 10h44 par danielhagnoul (Licence)
Tags:
angle moyen,
angles,
es2015,
moyenne
- Catégories
- Javascript , Développement Web , ES2015
« Exemple contenant un formulaire, une classe et un objet Badge
Liste des billets
Fichier dvjhUtilities-1.5.1.js »