pysatellites-2.1.orig/ 0000755 0001750 0001750 00000000000 12210727147 015236 5 ustar georgesk georgesk pysatellites-2.1.orig/Changelog 0000755 0001750 0001750 00000004061 11012562310 017040 0 ustar georgesk georgesk JB : Jean-Baptiste BUTET
BG : Bastient GRAVIERE
GK : Georges Khaznadar
2008-03-12 : JB, interface graphique.
2008-04-08 : GK, méthode d'intégration, validation avec un champ de gravité
terrestre.
2008-04-11 : GK, modification de la fonction verifie_et_traduit afin de
faciliter l'entrée d'expressions complètes. Par exemple on peut
rentrer 2*3.14*(35786+6400)*1000/24/3600 comme vitesse
tangentielle d'un satellite géostationnaire, et on voit bien
l'orbite circulaire se construire.
2008-04-11 : GK, calcul de la période de révolution, dans le cas où l'énergie
mécanique Em est négative, par la méthode suivante (k=mMG) :
- calcul du grand axe : a = - k/2Em
- calcul de la période : T = 2pi(a³/k)^0.5
2008-04-12 : GK, mise en place d'une liste d'astres à l'aide de Wikipedia
et intégration avec l'application xplanet et les textures de
celestia pour tracer l'image de la planète. Changé les appels
à print pour tracer le programme en appels valués à self.debug
Changement de quelques widgets : combo pour choisir l'astre,
renseignements pour le comparer à la Terre.
2008-04-15 : GK, correction de la prise des données de vitesse. Redressé
l'axe Oy. Activé les graphiques pour Vx et Vy. Ajouté une
fonction d'agrandissement pour les graphiques.
2008-04-20 : GK, correction de problèmes avec le tracé et l'effacement de
points de la trajectoire, quelques changements de style,
amélioration des graphiques agrandis, implémenté le cas des
énergies mécaniques positives. Ajouté le traitement d'options
en ligne de commande. Réglé la gestion des chemins d'accès aux
répertoires.
2008-04-26 : GK, ajout de support pour créer une vidéo vue du satellite.
la vitesse initiale Vx a été réglée négative, pour un lancer
vers l'est. Séparation du code de vérification/calcul de
nombres flottants. pysatellites-2.1.orig/point.py 0000755 0001750 0001750 00000003626 11012562310 016737 0 ustar georgesk georgesk #-*- coding: utf-8 -*-
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class Point(QLabel):
def __init__(self, parent, point, color, numero, app, pred=None,type_de_point="petit"):
"""
Crée un point graphique. Paramètres :
parent : widget parent
point : coordonnées (de type vecteur)
color : couleur
numero : numéro à afficher
app : l'application qui commande
pred : le point prédecesseur
type_de_point : un paramètre de style
"""
QLabel.__init__(self, parent)
self.app=app
self.point, self.color = point,color
#self.setGeometry(QRect(0,0,640,480))
self.setGeometry(QRect(0,0,parent.width(),parent.height()))
self.numero=numero
self.type_de_point = type_de_point
if type_de_point=="petit" :
self.largeur=2
elif type_de_point=="gros" :
self.largeur=4
else :
self.largeur=2
def icone(self,nom):
return self.app.rep.fichier("icones",nom)
def paintEvent(self,event):
self.painter = QPainter()
self.painter.begin(self)
self.painter.setPen(QColor(self.color))
self.painter.translate(self.point[0], self.point[1])
if self.type_de_point=="boum" :
self.image_sat=QPixmap(self.icone("sat_mini_boum.png"))
self.painter.drawPixmap(0,0,self.image_sat)
elif self.type_de_point=="gros" :
self.image_sat=QPixmap(self.icone("sat_mini.png"))
self.painter.drawPixmap(0,0,self.image_sat)
self.painter.drawLine(-self.largeur,0,self.largeur,0)
self.painter.drawLine(0,-self.largeur,0,self.largeur)
elif self.type_de_point=="petit" :
self.painter.drawLine(-self.largeur,0,self.largeur,0)
self.painter.drawLine(0,-self.largeur,0,self.largeur)
self.painter.end()
pysatellites-2.1.orig/debug.py 0000755 0001750 0001750 00000000313 11773533262 016704 0 ustar georgesk georgesk # -*- coding: utf-8 -*-
class Debug:
def __init__(self, debugLevel):
self.debugLevel=debugLevel
def __call__(self,level,msg):
if self.debugLevel > level:
print(msg)
pysatellites-2.1.orig/graphe.ui 0000755 0001750 0001750 00000003176 11012562310 017041 0 ustar georgesk georgesk Graphe00302516Dialog1104808132Qt::HorizontalQDialogButtonBox::Close1010270450buttonBoxaccepted()Grapheaccept()248254157274buttonBoxrejected()Graphereject()316260286274
pysatellites-2.1.orig/pysatellites.1 0000755 0001750 0001750 00000003041 11012570610 020031 0 ustar georgesk georgesk .\" Title: PYSATELLITES
.\" Author:
.\" Generator: DocBook XSL Stylesheets v1.73.2
.\" Date: mai 14, 2008
.\" Manual:
.\" Source:
.\"
.TH "PYSATELLITES" "1" "mai 14, 2008" "" ""
.\" disable hyphenation
.nh
.\" disable justification (adjust text to left margin only)
.ad l
.SH "NAME"
pysatellites - simulates the launching of satellites
.SH "SYNOPSIS"
.HP 13
\fBpysatellites\fR [\fB\-d\ \fR\fB\fIdebuglevel\fR\fR] [\fB\-\-debug=\fR\fB\fIdebuglevel\fR\fR] [\fB\-f\ \fR\fB\fIfile\fR\fR] [\fB\-\-fichier=\fR\fB\fIfile\fR\fR] [\fB\-h\ \fR] [\fB\-\-help\fR]
.SH "DESCRIPTION"
.PP
This program can be used to train people to spatial mechanics at an elementary level\. You are given the power to launch a satellite, from outside the atmosphere, around a handfull of predefined planets, or around any special object you may imagine\. Input the intial velocity vector of the satellite, and you will get the simulated trajectory, as well as some informations like the plots of variation of speed\. As an extra, you can compute a movie, which represents the planet seen from the satellite\'s point of view during its orbital period\.
.SH "OPTIONS"
.PP
\fB\-h\fR \fB\-\-help\fR
.RS 4
Show a short usage description\.
.RE
.PP
\fB\-d \fR\fB\fIdebuglevel\fR\fR \fB\-\-debug=\fR\fB\fIdebuglevel\fR\fR
.RS 4
Sets the debug level, from 0 to 10 (default = 0)\.
.RE
.PP
\fB\-f \fR\fB\fIfile\fR\fR \fB\-\-fichier=\fR\fB\fIfile\fR\fR
.RS 4
Sets the configuration file (default: none)
.RE
.SH "COPYRIGHT"
Copyright \(co 2008 Georges Khaznadar
.br
pysatellites-2.1.orig/Makefile 0000755 0001750 0001750 00000001443 11535222055 016700 0 ustar georgesk georgesk DESTDIR =
CELESTIA_TEXTURES = /usr/share/celestia/textures/lores \
/usr/share/celestia/textures/medres \
/usr/share/celestia/textures/hires
all: user-interface pysatellites.1
pysatellites.1: manpage.xml
xsltproc --nonet /usr/share/sgml/docbook/stylesheet/xsl/nwalsh/manpages/docbook.xsl manpage.xml
clean:
rm -f *~ *.pyc
rm -f UI_*
rm -rf build
user-interface: UI_pysat.py UI_graphe.py
UI_%.py: %.ui
pyuic4 $< -o $@
install: all
python setup.py install --root=$(DESTDIR)
install -m 755 pysatellites $(DESTDIR)/usr/bin
install-textures:
mkdir -p $(DESTDIR)/usr/share/pysatellites/images
for d in $(CELESTIA_TEXTURES); do \
cp $$d/* $(DESTDIR)/usr/share/pysatellites/images; \
done
.PHONY = user-interface install clean install-textures all install-for-debian
pysatellites-2.1.orig/pysatellites 0000755 0001750 0001750 00000000073 11012566600 017700 0 ustar georgesk georgesk #!/usr/bin/python
import pysatellites
pysatellites.run()
pysatellites-2.1.orig/manpage.xml 0000755 0001750 0001750 00000010243 11012570572 017370 0 ustar georgesk georgesk
. will be generated. You may view the
manual page with: nroff -man . | less'. A
typical entry in a Makefile or Makefile.am is:
DB2MAN=/usr/share/sgml/docbook/stylesheet/xsl/nwalsh/\
manpages/docbook.xsl
XP=xsltproc -''-nonet
manpage.1: manpage.dbk
$(XP) $(DB2MAN) $<
The xsltproc binary is found in the xsltproc package. The
XSL files are in docbook-xsl. Please remember that if you
create the nroff version in one of the debian/rules file
targets (such as build), you will need to include xsltproc
and docbook-xsl in your Build-Depends control field.
-->
Georges">
Khaznadar">
mai 14, 2008">
1">
georgesk@ofset.org">
PYSATELLITES">
Debian">
GNU">
GPL">
]>
&dhemail;
2008&dhusername;
&dhdate;
&dhucpackage;
&dhsection;
&dhpackage;simulates the launching of satellites&dhpackage;DESCRIPTION This program can be used to train people to spatial mechanics at an
elementary level. You are given the power to launch a satellite, from
outside the atmosphere, around a handfull of predefined planets, or around
any special object you may imagine. Input the intial velocity vector of the
satellite, and you will get the simulated trajectory, as well as some
informations like the plots of variation of speed. As an extra, you can
compute a movie, which represents the planet seen from the satellite's
point of view during its orbital period.
OPTIONSShow a short usage description.Sets the debug level, from 0 to 10 (default = 0).Sets the configuration file (default: none)
pysatellites-2.1.orig/.svn/ 0000755 0001750 0001750 00000000000 11012562310 016106 5 ustar georgesk georgesk pysatellites-2.1.orig/.svn/text-base/ 0000755 0001750 0001750 00000000000 11012562310 020002 5 ustar georgesk georgesk pysatellites-2.1.orig/.svn/text-base/mainWindow.py.svn-base 0000444 0001750 0001750 00000020741 11012562310 024207 0 ustar georgesk georgesk #-*- coding: utf-8 -*-
"""
code pour la fenêtre principale de pysatellites
"""
licence="""
the file mainWindow.py is part of the package pysatellites.
Copyright (C) 2007-2008 Jean-Baptiste Butet ,
(C) 2007-2008 Georges Khaznadar
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
"""
import sys, os
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from glob import glob
from UI_pysat import Ui_MainWindow
from traj_satellite import Trajectoire
from math import pi, cos, sin, fabs
from astres import astreNom
from point import Point
from matplotlib_widget import MyMplCanvas
from repertoire import repertoire
from video import Cinema
import flottant
from debug import Debug
class StartQT4(QMainWindow):
def __init__(self, parent, rep=None , debugger=Debug(0), app=None):
QMainWindow.__init__(self)
QWidget.__init__(self, parent)
self.debug=debugger
self.app=app
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
if rep == None:
self.rep=repertoire(sys.argv[0])
else:
self.rep=rep
self.trajectoire = Trajectoire(self.ui.afficheur, 6400, self, debugger=self.debug)
self.initAstres()
self.ui.masse_astre.setText(QApplication.translate("MainWindow", "6x10^24", None, QApplication.UnicodeUTF8))
self.ui.rayon_astre.setText(QApplication.translate("MainWindow", "6400", None, QApplication.UnicodeUTF8))
os.chdir(self.rep.chemin("defaut"))
self.image_sat=QPixmap("icones/sat_mini.gif")
self.connexions_signaux()
self.placeDepart()
self.cinemaThread=None
self.progress=None
def getRayonAstre(self):
return flottant.traduit(self.ui.rayon_astre.text())*1000
def placeDepart(self):
self.trajectoire.efface()
x=0
y=(flottant.traduit(self.ui.rayon_astre.text())+flottant.traduit(self.ui.altitude_objet.text()))*1000
self.trajectoire.setEchelle(y,"max")
vx=flottant.traduit(self.ui.vitesse_tangentielle_objet.text())
vy=flottant.traduit(self.ui.vitesse_normale_objet.text())
self.trajectoire.dessine([(x,y,0,vx,vy,0)])
self.trajectoire.update()
def initAstres(self):
for a in astreNom:
self.ui.astreCombo.addItem(QApplication.translate("MainWindow", a[0], None, QApplication.UnicodeUTF8))
self.ui.astreCombo.setEditable(False)
self.ui.astreCombo.setCurrentIndex(0)
self.astreCourant="earth"
self.choisi_astre(0)
def connexions_signaux(self):
QObject.connect(self.ui.Bouton_Lancer,SIGNAL("clicked()"), self.trajectoire.lance)
QObject.connect(self.ui.Button_efface,SIGNAL("clicked()"), self.efface_trajectoire)
QObject.connect(self.ui.bouton_video,SIGNAL("clicked()"), self.cinema)
QObject.connect(self.ui.altitude_objet,SIGNAL("editingFinished()"), self.placeDepart)
QObject.connect(self.ui.astreCombo,SIGNAL("currentIndexChanged(int)"),self.choisi_astre)
QObject.connect(self.ui.radioButton_Frenet,SIGNAL("toggled(bool)"), self.choisi_coordoonees)
#QObject.connect(self.ui.checkBox_efface,SIGNAL("stateChanged(bool)"), self.change_comportement_effacege)
timer = QTimer(self);
QObject.connect(timer, SIGNAL("timeout()"), self.routines);
timer.start(1000);
self.ui.mTerre.setReadOnly (True)
self.ui.rTerre.setReadOnly (True)
self.ui.auSujetAstre.setReadOnly (True)
def change_comportement_effacege(self,int):
pass
def efface_trajectoire(self):
self.trajectoire.efface()
self.placeDepart()
def cinema(self):
if self.cinemaThread!=None and self.cinemaThread.isAlive():
return
import datetime,copy
from numpy import arange
date=datetime.datetime(2008,04,25)
date=date.today()
if self.trajectoire.traj != None:
liste_temps=arange(0,self.trajectoire.t,self.trajectoire.dt)
pas=10 # une image pour 10 calculs numériques
titre=QApplication.translate("MainWindow", "Calcul de la vidéo", None, QApplication.UnicodeUTF8)
legende=QApplication.translate("MainWindow", "Avancement ...", None, QApplication.UnicodeUTF8)
echap=QApplication.translate("MainWindow", "Arrêt", None, QApplication.UnicodeUTF8)
self.progress=QProgressDialog(legende,echap,0,len(liste_temps)/pas)
self.progress.setWindowTitle(titre)
self.progress.setValue(0)
self.progress.show()
# on lance le thread avec une copie de la liste calculée
self.cinemaThread=Cinema(self.rep, self.astreCourant, date,
liste_temps,
copy.copy(self.trajectoire.traj.pv),
"380x240",
pas=pas, boum=self.trajectoire.boum,
debugger=self.debug)
self.cinemaThread.start()
def routines(self):
if self.cinemaThread!=None and self.cinemaThread.isAlive():
self.progress.setValue(self.cinemaThread.nbImage)
if self.progress.wasCanceled():
self.progress.close()
self.cinemaThread.fini=True
if self.cinemaThread.fini:
self.progress.setValue(self.progress.maximum()+1)
if self.progress: self.progress.close()
def getMasseAstre(self):
return flottant.traduit(self.ui.masse_astre.text())
def getDistanceAstre(self):
return (flottant.traduit(self.ui.rayon_astre.text()) + flottant.traduit(self.ui.altitude_objet.text()))*1000 #passe en mètres
def getVitesse(self):
return (flottant.traduit(self.ui.vitesse_tangentielle_objet.text()),
flottant.traduit(self.ui.vitesse_normale_objet.text()))
def choisi_coordoonees(self,bool):
if self.ui.radioButton_Cartesiennes.isChecked()==True :
self.ui.label_V1.setText(QApplication.translate("MainWindow", "Vitesse selon Ox", None, QApplication.UnicodeUTF8))
self.ui.label_V2.setText(QApplication.translate("MainWindow", "Vitesse selon Oy", None, QApplication.UnicodeUTF8))
elif self.ui.radioButton_Cartesiennes.isChecked()==False :
self.ui.label_V1.setText(QApplication.translate("MainWindow", "Vitesse Tangentielle", None, QApplication.UnicodeUTF8))
self.ui.label_V2.setText(QApplication.translate("MainWindow", "Vitesse Normale", None, QApplication.UnicodeUTF8))
def choisi_astre(self,int):
mt0=astreNom[0][2]
rt0=astreNom[0][3]
astre=self.ui.astreCombo.currentText()
for a in astreNom:
if a[0]==astre:
self.trajectoire.choisi_astre(a[1])
self.astreCourant=a[1]
masse_astre=a[2]
rayon_astre=a[3]
self.ui.masse_astre.setText(QApplication.translate("MainWindow", masse_astre, None, QApplication.UnicodeUTF8))
self.ui.rayon_astre.setText(QApplication.translate("MainWindow", rayon_astre, None, QApplication.UnicodeUTF8))
mt=flottant.traduit(masse_astre)/flottant.traduit(mt0)
rt=flottant.traduit(rayon_astre)/flottant.traduit(rt0)
mt="%5g" %mt
rt="%5g" %rt
self.ui.mTerre.setText(QApplication.translate("MainWindow", mt, None, QApplication.UnicodeUTF8))
self.ui.rTerre.setText(QApplication.translate("MainWindow", rt, None, QApplication.UnicodeUTF8))
self.ui.auSujetAstre.setText(QApplication.translate("MainWindow", a[4], None, QApplication.UnicodeUTF8))
self.placeDepart()
self.trajectoire.update()
return
self.debug(0,u"Astre inconnu : %s" %astre)
pysatellites-2.1.orig/.svn/text-base/repertoire.py.svn-base 0000444 0001750 0001750 00000001756 11012562310 024260 0 ustar georgesk georgesk # -*- coding: utf-8 -*-
import os.path
class repertoire:
def __init__(self, chemin):
self.chemin0=os.path.abspath(chemin)
if os.path.isfile(self.chemin0):
self.chemin0=os.path.dirname(self.chemin0)
def chemin(self,choix="defaut"):
if choix=="defaut":
return self.chemin0
if choix=="textures":
for d in [os.path.join(self.chemin0,"images"), "/usr/share/celestia/textures/medres"]:
if os.path.exists(d+'/moon.jpg'):
return d
print "erreur : pas de répertoire des planètes"
print "=== Il faudrait installer Celestia ==="
raise(IOError)
elif os.path.isdir(os.path.join(self.chemin0,choix)):
return os.path.join(self.chemin0,choix)
else:
raise(IOError)
def fichier(self,*elementsDeChemin):
f=self.chemin0
for e in elementsDeChemin:
f=os.path.join(f,e)
return f
pysatellites-2.1.orig/.svn/text-base/video.py.svn-base 0000444 0001750 0001750 00000006545 11012562310 023207 0 ustar georgesk georgesk # -*- coding: utf-8 -*-
"""
video.py est un module permettant de faire un fichier video à partir d'un
tableau de positions-vitesses tel que pysatellite peut le réaliser.
"""
import math, datetime, tempfile, os.path, os
from astres import Astre
from PyQt4.QtGui import *
from threading import *
from debug import Debug
import flottant
class Cinema(Thread):
def __init__(self,repertoire, astre, dateorigine, liste_temps, liste_pos, geometrie, pas=1, nettoie=True, boum=-1.0, debugger=Debug(0)):
Thread.__init__(self)
self.repertoire=repertoire
self.astre=astre
self.dateorigine=dateorigine
self.liste_temps=liste_temps
self.liste_pos=liste_pos
self.geometrie=geometrie
self.pas=pas
self.nettoie=nettoie
self.boum=boum
self.dir=tempfile.mkdtemp("","pysat")
self.fini=False
self.nbImage=0
self.debug=debugger
def run(self):
self.video()
os.system("vlc --loop %s > /dev/null 2>&1" %os.path.join(self.dir,"out.avi"))
if self.nettoie: os.system("rm -r %s" %self.dir)
def video(self):
self.images()
cmd="ffmpeg -r 25 -f image2 -i %s -r 25 -f avi -vcodec mpeg1video -b 800k %s > /dev/null 2>&1" %(os.path.join(self.dir, "%04d.jpg"), os.path.join(self.dir, "out.avi"))
os.system(cmd)
def images(self):
listenum= range(0, len(self.liste_temps), self.pas)
for i in listenum:
if self.fini:
return
temps=self.liste_temps[i]
if self.boum > 0 and temps > self.boum:
self.imageCrash(self.nbImage)
self.fini=True
return
x=self.liste_pos[i][0]
y=self.liste_pos[i][1]
z=self.liste_pos[i][2]
cmd=self.xplanetCmd(temps, x, y, z,
os.path.join(self.dir, "%04d.jpg" %self.nbImage))
os.system(cmd)
self.nbImage+=1
def imageCrash(self,num):
for n in range(20):
nomfichier=os.path.join(self.dir, "%04d.jpg" %(num+n))
(w,h)=self.geometrie.split("x")
img=QImage(int(w), int(h), QImage.Format_RGB32)
img.fill(QColor("red").rgb())
img.save(nomfichier)
def xplanetCmd(self,temps, x, y, z, nomfichier):
"""
dateorigine est un objet datetime fixe,
temps est une durée en seconde
"""
a=Astre(self.astre)
td=datetime.timedelta(seconds=temps)
date=self.dateorigine+td
dateXplanet=date.strftime("%Y%m%d.%H%M%S")
rayon=1.0*(x**2+y**2+z**2)**0.5
range=rayon/a.rayon
if range > 1.0:
radius=100*math.asin(1.0/range)
else:
radius=9000
longitude0=360.0*temps/(24*3600*flottant.traduit(a.rotationSiderale))
longitude=180/math.pi*math.atan2(y,x)-90
latitude=180/math.pi*math.atan2(z,(x**2+y**2)**0.5)
cmd="xplanet -date %s -radius %s -num_times 1 -output '%s' -geometry %s -origin %s -range %s -longitude %s -latitude %s -starmap BSC -searchdir %s -body %s -label >/dev/null 2>&1" %(dateXplanet, radius, nomfichier, self.geometrie, self.astre, range, int(a.flip)*(longitude-longitude0), latitude, self.repertoire.chemin("textures"), self.astre)
self.debug(4,u"Lancemende de «%s»" %cmd)
return cmd
pysatellites-2.1.orig/.svn/text-base/point.py.svn-base 0000444 0001750 0001750 00000003626 11012562310 023227 0 ustar georgesk georgesk #-*- coding: utf-8 -*-
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class Point(QLabel):
def __init__(self, parent, point, color, numero, app, pred=None,type_de_point="petit"):
"""
Crée un point graphique. Paramètres :
parent : widget parent
point : coordonnées (de type vecteur)
color : couleur
numero : numéro à afficher
app : l'application qui commande
pred : le point prédecesseur
type_de_point : un paramètre de style
"""
QLabel.__init__(self, parent)
self.app=app
self.point, self.color = point,color
#self.setGeometry(QRect(0,0,640,480))
self.setGeometry(QRect(0,0,parent.width(),parent.height()))
self.numero=numero
self.type_de_point = type_de_point
if type_de_point=="petit" :
self.largeur=2
elif type_de_point=="gros" :
self.largeur=4
else :
self.largeur=2
def icone(self,nom):
return self.app.rep.fichier("icones",nom)
def paintEvent(self,event):
self.painter = QPainter()
self.painter.begin(self)
self.painter.setPen(QColor(self.color))
self.painter.translate(self.point[0], self.point[1])
if self.type_de_point=="boum" :
self.image_sat=QPixmap(self.icone("sat_mini_boum.png"))
self.painter.drawPixmap(0,0,self.image_sat)
elif self.type_de_point=="gros" :
self.image_sat=QPixmap(self.icone("sat_mini.png"))
self.painter.drawPixmap(0,0,self.image_sat)
self.painter.drawLine(-self.largeur,0,self.largeur,0)
self.painter.drawLine(0,-self.largeur,0,self.largeur)
elif self.type_de_point=="petit" :
self.painter.drawLine(-self.largeur,0,self.largeur,0)
self.painter.drawLine(0,-self.largeur,0,self.largeur)
self.painter.end()
pysatellites-2.1.orig/.svn/text-base/AUTHORS.svn-base 0000444 0001750 0001750 00000000157 11012562310 022570 0 ustar georgesk georgesk Jean-Baptiste BUTET
Bastien
Georges Khaznadar
pysatellites-2.1.orig/.svn/text-base/astres.py.svn-base 0000444 0001750 0001750 00000006613 11012562310 023376 0 ustar georgesk georgesk # -*- coding: utf-8 -*-
"""La plupart de ces données ont été adaptées à partir de la version
anglaise de Wikipedia : http://en.wikipedia.org
"""
from flottant import traduit
astreNom=[
# nom_local, nom_celestia, masse_kg, rayon_km, commentaire, jour, flipped
# flipped fait référence à une propréiété dans le fichier Planet.cpp
# de src/libplanet du logiciel xplanet.
["Terre","earth","6x10^24","6400","Planète du système solaire","1","1"],
["Soleil","sun","6x10^31","695000","Étoile du système solaire","26","1"],
["Lune","moon","7.33x10^22","1740","Lune de Terre","27.3216","1"],
["Amalthée","amalthea","2.08x10^18","83.5","Lune de Jupiter","0.49817943","-1"],
["Callisto","callisto","1.076x10^23 ","2410","Lune de Jupiter","16.6890184","-1"],
["Deimos","deimos","1.48x10^15","6.2","Lune de Mars","1.26244","-1"],
["Dione","dione","1.1x10^21","561","Lune de Saturne","2.736915","-1"],
["Encelade","enceladus","1.08x10^20","252","Lune de Saturne","1.370218","-1"],
["Épiméthée","epimetheus","57","5.3x10^17","Lune de Saturne","0.694333517","-1"],
["Europe","europa","4.80x10^22","1569","Lune de Jupiter","3.551181","-1"],
["Ganymède","ganymede","1.4819x10^23","2634","Lune de Jupiter","7.15455296","-1"],
["Hyperion","hyperion","0.558x10^19","280","Lune de Saturne","21.27661","-1"],
["Iapète","iapetus","1.80x10^21","1450","Lune de Saturne","79.3215","-1"],
["Io","io","8.9319x10^22","1821.3","Lune de Jupiter","1.769137786","-1"],
["Janus","janus","1.91x10^18","173","Lune de Saturne","0.694660342","-1"],
["Jupiter","jupiter","1.90x10^27 ","70x10^3","Planète du système solaire","9.925/24","-1"],
["Mars","mars","6.4185x10^23","3390","Planète du système solaire","1.025957","-1"],
["Mercure","mercury","3.3022x10^23","2440","Planète du système solaire","58.646","-1"],
["Mimas","mimas","3.7493x10^19","390","Lune de Saturne","0.9424218 ","-1"],
["Miranda","miranda","6.59x10^19","470","Lune d'Uranus","1.413479","1"],
["Neptune","neptune","1.0243x10^26","24750","Planète du système solaire","0.6713","-1"],
["Obéron","oberon","3.014x10^21","761.4","Lune d'Uranus","13.463234","1"],
["Phobos","phobos","1.07x10^16","11.1","Lune de Mars","0.318 910 23","-1"],
["Pluton","pluto-lok","1.30x10^22","1195","Planète du système solaire","-6.387230","1"],
["Prométhée","prometheus","1.566x10^17","100","Lune de Saturne","0.612990038","-1"],
["Protée","proteus","4.4x10^19","410","Lune de Neptune","1.12231477","-1"],
["Rhéa","rhea","2.3065x10^21","1525","Lune de Saturne","4.518212","-1"],
["Saturne","saturn","5.6846x10^26","60x10^3","Planète du système solaire","0.445","-1"],
["Tethys","tethys","6.174x10^20","1060","Lune de Saturne","1.887802","-1"],
["Titan","titan","1.345x10^23","2576","Lune de Saturne","15.945","-1"],
["Triton","triton","2.14x10^22","1353","Lune de Neptune","-5.877","-1"],
["Umbriel","umbriel","1.2x10^21","1169","Lune d'Uranus","4.144","1"],
["Vénus","venus","4.8685x10^24","6051","Planète du système solaire","-243.0185","1"]
]
class Astre:
def __init__(self,cle):
for a in astreNom:
if a[1]==cle: break
self.nom=a[0]
self.cle=cle
self.masse=traduit(a[2])
self.rayon=1000*traduit(a[3])
self.commentaire=a[4]
self.rotationSiderale=a[5] #unité jour
self.flip=a[6]
pysatellites-2.1.orig/.svn/text-base/flottant.py.svn-base 0000444 0001750 0001750 00000002351 11012562310 023723 0 ustar georgesk georgesk # -*- coding: utf-8 -*-
def traduit(chaine):
"""cette méthode vérifie la validité de la chaîne en fonction de sa provenance et, au besoin, transforme des expressions possibles (10^11) en grandeur acceptée par python"""
# on force le type chaîne pour pouvoir faire des évaluations.
chaine=str(chaine).replace(" ","") # et retrait de tous les espaces
#vérification de la présence d'un float correct, sinon tente des modifs.
try :
chaine=float(eval(chaine))
except :
chaine=chaine.replace("10^","e")
#remplace la chaine 10^ par e
else:
return chaine
try :
chaine=float(eval(chaine))
except :
#remplace les "x" pour la multiplication
chaine=chaine.replace("x","*")
chaine=chaine.replace("X","*")
else:
return chaine
try :
chaine=float(eval(chaine))
except :
#remplace les "*" devant un "e"
chaine=chaine.replace("*e","e")
else:
return chaine
try :
chaine=float(eval(chaine))
except :
#self.debug(0,u"Erreur : %s, même après les tranformations, n'est pas une expression acceptable" %chaine)
return 1.0
else:
return chaine
return 1.0
pysatellites-2.1.orig/.svn/text-base/LISEZMOI.svn-base 0000444 0001750 0001750 00000002005 11012562310 022670 0 ustar georgesk georgesk Le logiciel pysatellites permet de simuler le lancement d'un satellite
autour de nombreux astres connus. C'est un logiciel libre, diffusé sous
la licence GPL version 3. Voyez les fichiers COPYING Changelog et AUTHORS
Pour être pleinement fonctionnel, il est préférable d'installer en même
temps les logiciels libres xplanet et la base de données du logiciel celestia
;) de toute façon, une personne intéressée par pysatellites sera très
probablement aussi intéressée par xplanet et celestia, pour de nombreux
usages complémentaires.
Certaines formules sont utilisées pour faciliter la simulation :
- la méthode d'intégration de Runge-Kutta qui est d'ordre 4, beaucoup
pkus efficace que al méthode d'Euler
- un calcul des paramètres de la trajectoire à partir des données connues
dès le lancement : énergie mécanique, grand axe, excentricité, période,
etc.
Le fondement théorique des méthodes emplyées est décrit dans le fichier
methodes.tm, qui s'ouvre à l'aide du logiciel libre TexMacs.
pysatellites-2.1.orig/.svn/text-base/methodes.tm.svn-base 0000444 0001750 0001750 00000014343 11012562310 023674 0 ustar georgesk georgesk