Bonjour,

j'ai un probleme que je ne comprend absolument pas...
Ma procedure est censée me renvoyer une liste de 360 points d'un cercle dont je fourni le centre et le rayon en metres.
Je me suis basé sur un code en PHP (je crois) dont un extrait est placé en commentaire dans ce code.

Le probleme: la variable calculée $lonRad (longitude X en radians) reçoit toujours la meme valeur alors que le fait de faire un "print" de la formule de calcul me renvoit une valeur differente à chaque fois!!

Je suis un peu perdu, si quelqu'un peut m'expliquer ce qu'il se passe

Merci d'avance... bonne journée

Code : 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
sub creerCercle {
# Renvoit une liste des points ("x,y") du cercle dont on fournit une coordonnée centrale et un rayon en metres
# $modulo, si >0 permet de simplifier la liste de retour en ne calculant qu'un point sur $modulo
my($centreX, $centreY, $rayon, $modulo) = @_;
my @pointsCercle;
$modulo = int($modulo);
$modulo = 1 if ($modulo == 0);
 
# Converti les coord en radians:
$centreX = deg2rad($centreX);
#print "X=$centreX rad\n";
$centreY = deg2rad($centreY);
 
my $rayonRad = $rayon/6378137; # TODO: deg2rad pas mieux ?
my ($pi) = pi;
#for($i=0; $i<=360; $i++) {
#	$radial = deg2rad($i);
#	$lat_rad = asin(sin($lat1)*cos($d_rad) + cos($lat1)*sin($d_rad)*cos($radial));
#	$dlon_rad = atan2(sin($radial)*sin($d_rad)*cos($lat1), cos($d_rad)-sin($lat1)*sin($lat_rad));
#	$lon_rad = fmod(($long1+$dlon_rad + M_PI), 2*M_PI) - M_PI;
#	fwrite( $fileappend, rad2deg($lon_rad).",".rad2deg($lat_rad).",0 ");
#	}
 
# Calcule les points du cercle:
  for(my $i=0;$i<=360;$i++) {
    next if ($i % $modulo != 0);
    my $radial = deg2rad($i);
    my $latRad = asin(sin($centreY)* cos($rayonRad) + cos($centreY)* sin($rayonRad)* cos($radial));
    my $dLonRad = atan2(sin($radial)* sin($rayonRad)* cos($centreY), cos($rayonRad)-sin($centreY)* sin($latRad));
    #my $lonRad = (($centreX + $dLonRad + $pi) % (2*$pi)) - $pi; # Utilise le reste de la division (Modulo)
    my $lonRad = ($centreX + $dLonRad + pi) % (2*$pi) - pi; # Utilise le reste de la division (Modulo)
    print ($centreX + $dLonRad + pi) % (2*$pi) - $pi;
    my $lonDeg = rad2deg($lonRad);
    print "Longitude = $lonRad rad = $lonDeg deg\n";
    my $latDeg = rad2deg($latRad);
    push @pointsCercle, "$lonDeg,$latDeg";
    #print "$lonDeg,$latDeg\n";
  } # Fin for
 
@_=@pointsCercle;
} # Fin de sub