Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
- Accueil
- » Programmation
- » [Python] Code pour gestion d'un télépointeur
- » Répondre
Répondre
Résumé de la discussion (messages les plus récents en premier)
- yoshi
- 29-12-2013 11:07:30
Bonjour,
Suite à la discussion ouverte par glofcea http://www.bibmath.net/forums/viewtopic … 597#p43597, je suis parti sur cette base angulaire de conventions de gestion :

En conséquence, une entrée comme Pol_To_Cart(120,50,1) est considérée comme incorrecte et corrigée en 120,130,1 :
* 120° de gisement signifie que x<0 et y>0
* 50° de site : mesure choisie à partir du 0° et ne peut exister que si le point visé se trouve dans la moitié est de l'hémisphère nord, or 120°
de gisement n'est possible que si le point visé est dans la moitié ouest.
Et ce bien sûr, sur la base des règles de mesure que je me suis fixées :
Pol_To_Cart(120,50,1) --> x = -0.321393804843 y = 0.556670399226 z = 0.766044443119
Cart_To_Pol(x,y,z) --> 120.0 130.0 1.0et donc :
Pol_To_Cart(120,130,1) --> x = -0.321393804843 y = 0.556670399226 z = 0.766044443119
Cart_To_Pol(x,y,z) --> 120.0 130.0 1.0
Il en est de même pour l'hémisphère sud avec site exprimé négativement de -180° à 0°, avec avertissement entre -135° et - 45° : ezone non couverte...
def Pol_To_Cart(gisement, site, distance):
gisement,site=gisement*pi/180,site*pi/180
if site>pi/2:
site=pi-site
elif site<-pi/2:
site=-pi-site
lg=abs(distance*cos(site))
x = lg*cos(gisement)
y = lg*sin(gisement)
z = distance*sin(site)
return x,y,z
def Cart_To_Pol(x,y,z):
if x==0:
x=0.001
if y==0:
y=0.001
distance = sqrt(x*x+y*y+z*z)
gisement = atan(y/x)
if x<0 and y>0:
gisement+=pi
elif x<0 and y<0:
gisement+=-pi
if abs(gisement)>175*pi/180:
print "! WARNING ! Zone non couverte !"
site = atan(z/sqrt(x*x+y*y))
if z>=0:
if x<0:
site=pi-site
else:
if x<0 and -pi/2<=site<0:
site=-pi-site
if -3*pi/4<site<-pi/4:
print "! WARNING ! Zone non couverte !"
return gisement*180/pi, site*180/pi,distance
print "Pol_To_Cart(120,130,1) -->",
x,y,z=Pol_To_Cart(120,130,1)
print "x =",x,"y =",y,"z = ",z
print "Cart_To_Pol(x,y,z) -->",
gisement, site,distance=Cart_To_Pol(x,y,z)
print gisement, site,distance
Cela dit, si ces conventions de mesure ne conviennent pas, je peux rectifier...
@+







