Diff entre un calcul dans une variable et l'impression du meme calcul à l'ecran!
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 8O
Merci d'avance... bonne journée
Code:
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 |
Merci bcp ca marche mieux :-)
Merci MarneusCalgarXP !
C'est, comme tu le disais, le fait que le modulo de Perl ne renvoit que des entiers qui donnait ce mauvais résultat...
Ta fonction fait exactement ce que je voulais :)
Bonne journée