IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

danielhagnoul

Calcul de l'angle moyen

Noter ce billet
par , 15/02/2018 à 10h46 (2548 Affichages)
Citation Envoyé par danielhagnoul Voir le message


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°
}
Nom : 88x31.png
Affichages : 676
Taille : 1,4 Ko Licence Creative Commons Attribution 2.0 Belgique

Envoyer le billet « Calcul de l'angle moyen » dans le blog Viadeo Envoyer le billet « Calcul de l'angle moyen » dans le blog Twitter Envoyer le billet « Calcul de l'angle moyen » dans le blog Google Envoyer le billet « Calcul de l'angle moyen » dans le blog Facebook Envoyer le billet « Calcul de l'angle moyen » dans le blog Digg Envoyer le billet « Calcul de l'angle moyen » dans le blog Delicious Envoyer le billet « Calcul de l'angle moyen » dans le blog MySpace Envoyer le billet « Calcul de l'angle moyen » dans le blog Yahoo

Mis à jour 08/06/2018 à 10h44 par danielhagnoul (Licence)

Catégories
Javascript , Développement Web , ES2015

Commentaires