begin process at 2010 07 29 15:41:29
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Math & Algorithmes

 > MISE EN ORBITE D'UN SATELLITE

MISE EN ORBITE D'UN SATELLITE


 Information sur la source

Note :
9,8 / 10 - par 5 personnes
9,80 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Math & Algorithmes Classé sous :physique, mécanique, satellite, tkinter Niveau :Débutant Date de création :14/08/2006 Date de mise à jour :15/08/2006 20:56:11 Vu / téléchargé :6 059 / 237

Auteur : jpountz

Ecrire un message privé
Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Ce code, largement inspiré de celui de HCD sur les collisions, simule la mise en orbite d'un satellite (frottements négligés). On peut donner en paramètres l'angle, la vitesse de départ ainsi que l'altitude du satellite.

Source

  • #! /usr/bin/env python
  • # -*- coding: Latin-1 -*-
  • from Tkinter import *
  • from math import hypot,sqrt,floor,cos,sin,pi,atan,exp,log
  • from tkMessageBox import askokcancel
  • # Ce code simule la mise en orbite d'un satellite.
  • # Paramètres
  • #
  • # L'altitude doit être comprise entre 0 et 360
  • # La vitesse donnée doit être de l'odre de 15 (unité arbitraire)
  • # L'angle (exprimé en degrés) peut prendre toutes les valeurs entre 0 et 360
  • # On peut obtenir les différentes trajectoires d'un satellite (ellipse, parabole ou hyperbole)
  • # exemple : 105/105/14 ellipse
  • # 210/45/9 ellipse
  • # 350/18/12 hyperbole
  • # Quand à la parabole, c'est plus difficile à obtenir, je vous laisse essayer!
  • # Fonctionnement
  • #
  • # La constante K joue le rôle du produit G(constante de gravité universelle) * M (masse terrestre)
  • # La trajectoire du satellite est déterminée de façon numérique par résolution de l'équation mécanique:
  • # masse_satellite * accélération = force_gravitationnelle_exercée_par_la_terre_sur_le_satellite
  • def preparer():
  • # initialise les paramètres et dessine la terre
  • global flag,x,y,dx,dy,D,satellite
  • P.config(state=DISABLED)
  • T.config(state=ACTIVE)
  • can.delete(ALL)
  • altitude=int(E_altitude.get())
  • angle_degre=int(E_angle.get())
  • angle=angle_degre*2*pi/360
  • force=int(E_force.get())
  • x,y=L/2-D/2-altitude,L/2
  • dx,dy=force*cos(angle)/20,-force*sin(angle)/20
  • Terre=can.create_oval(L/2-D/2,L/2+D/2,L/2+D/2,L/2-D/2,fill='blue')
  • satellite=can.create_oval(x-d/2,y+d/2,x+d/2,y-d/2,fill='grey')
  • def lancer():
  • #lance le satellite
  • global flag
  • flag=1
  • orbite()
  • def orbite():
  • #fonction auxilliaire de la fonction lancer
  • global x,y,dx,dy,orb
  • if flag==1:
  • T.config(state=DISABLED)
  • #nouvelle position
  • x,y=x+dx,y+dy
  • r=hypot(x-L/2,L/2-y)
  • v=hypot(dx,dy)
  • #angle repérant la position du satellite par rapport à l'horizontale
  • if x-L/2>0:
  • theta=atan((-y+L/2)/(x-L/2))
  • else:
  • theta=atan((-y+L/2)/(x-L/2))+pi
  • dx,dy=dx-K*cos(theta)/(r*r),dy+K*sin(theta)/(r*r)
  • can.coords(satellite,x-d/2,y+d/2,x+d/2,y-d/2)
  • if x<0 or x>L or y<0 or y>L or r<D/2:
  • stop()
  • #suivi de la trajectoire du satellite
  • can.create_oval(x,y+1,x+1,y,outline='yellow')
  • orb=fen.after(8,orbite)
  • def stop():
  • #arrête le satellite et efface l'écran
  • ""
  • global flag,orb
  • flag=0
  • fen.after_cancel(orb)
  • P.config(state=ACTIVE)
  • can.delete(ALL) # effacement du contenu de la fenêtre
  • E_angle.delete(0,angle)
  • E_force.delete(0,force)
  • texte=can.create_text(L/2,L/3,text='MERCI\n\nvous pouvez continuer en modifiant les paramètres\n\nou, tout simplement, arrêter !!!',fill="white")
  • def quitter():
  • #quitte le programme
  • ans=askokcancel('',"Voulez-vous réellement quitter ?")
  • if ans:fen.quit()
  • fen=Tk()
  • fen.title('Mise en orbite!')
  • L=800 #côté du canvas
  • D=80 #diamètre de la terre
  • d=8 #diamètre du satellite
  • flag=0
  • angle,force=0,0
  • K=50 #joue le rôle du produit G*M
  • can=Canvas(fen,bg='dark blue',height=L,width=L)
  • can.grid(row=1,column=0,rowspan=2)
  • can2=Canvas(fen,bg='brown',highlightbackground='brown')
  • can2.grid(row=1,column=1,sticky=N)
  • Button(can2,text='Quitter!',command=quitter,bg="white").pack(side=BOTTOM)
  • S=Button(can2,text='Stop !',height=2,width=25,relief=GROOVE,bg="white",activebackground="dark green",activeforeground="white",command=stop)
  • S.pack(padx=5,pady=5,side=BOTTOM,anchor=SW)
  • T=Button(can2,text='Lancer !',height=2,width=25,relief=GROOVE,bg="white",activebackground="dark green",activeforeground="white",command=lancer)
  • T.pack(padx=5,pady=5,side=BOTTOM,anchor=SW)
  • P=Button(can2,text='Préparer !',height=2,width=25,relief=GROOVE,bg="white",activebackground="dark green",activeforeground="white",command=preparer)
  • P.pack(padx=5,pady=5,side=BOTTOM,anchor=SW)
  • E_force=Entry(can2)
  • E_force.pack(padx=8,pady=5,side=BOTTOM)
  • Label(can2,text="Choisir la vitesse initiale à donner",fg='white',bg='brown').pack(side=BOTTOM)
  • E_angle=Entry(can2)
  • E_angle.pack(padx=8,pady=5,side=BOTTOM)
  • Label(can2,text="Choisir l'angle à donner",fg='white',bg='brown').pack(side=BOTTOM)
  • E_altitude=Entry(can2)
  • E_altitude.pack(padx=8,pady=5,side=BOTTOM)
  • Label(can2,text="Choisir l'altitude de départ",fg='white',bg='brown').pack(side=BOTTOM)
  • fen.mainloop()
  • fen.destroy()
#! /usr/bin/env python 
# -*- coding: Latin-1 -*-

from Tkinter import *
from math import hypot,sqrt,floor,cos,sin,pi,atan,exp,log
from tkMessageBox import askokcancel

# Ce code simule la mise en orbite d'un satellite.

# Paramètres
#
# L'altitude doit être comprise entre 0 et 360
# La vitesse donnée doit être de l'odre de 15 (unité arbitraire)
# L'angle (exprimé en degrés) peut prendre toutes les valeurs entre 0 et 360
# On peut obtenir les différentes trajectoires d'un satellite (ellipse, parabole ou hyperbole)
# exemple : 105/105/14 ellipse
#           210/45/9   ellipse
#           350/18/12  hyperbole
# Quand à la parabole, c'est plus difficile à obtenir, je vous laisse essayer!

# Fonctionnement
#
# La constante K joue le rôle du produit G(constante de gravité universelle) * M (masse terrestre)
# La trajectoire du satellite est déterminée de façon numérique par résolution de l'équation mécanique:
#     masse_satellite * accélération = force_gravitationnelle_exercée_par_la_terre_sur_le_satellite

def preparer():
    # initialise les paramètres et dessine la terre
    global flag,x,y,dx,dy,D,satellite
    P.config(state=DISABLED)
    T.config(state=ACTIVE)
    can.delete(ALL)

    altitude=int(E_altitude.get())
    angle_degre=int(E_angle.get())
    angle=angle_degre*2*pi/360
    force=int(E_force.get())
    
    x,y=L/2-D/2-altitude,L/2
    dx,dy=force*cos(angle)/20,-force*sin(angle)/20

    Terre=can.create_oval(L/2-D/2,L/2+D/2,L/2+D/2,L/2-D/2,fill='blue')
    satellite=can.create_oval(x-d/2,y+d/2,x+d/2,y-d/2,fill='grey')

def lancer():
    #lance le satellite
    global flag
    flag=1
    orbite()

def orbite():
    #fonction auxilliaire de la fonction lancer
    global x,y,dx,dy,orb
    if flag==1:
        T.config(state=DISABLED)
        #nouvelle position
        x,y=x+dx,y+dy
        r=hypot(x-L/2,L/2-y)
        v=hypot(dx,dy)
        #angle repérant la position du satellite par rapport à l'horizontale
        if x-L/2>0:
            theta=atan((-y+L/2)/(x-L/2))
        else:
            theta=atan((-y+L/2)/(x-L/2))+pi
        dx,dy=dx-K*cos(theta)/(r*r),dy+K*sin(theta)/(r*r)
        can.coords(satellite,x-d/2,y+d/2,x+d/2,y-d/2)
        if x<0 or x>L or y<0 or y>L or r<D/2:
            stop()
        #suivi de la trajectoire du satellite
        can.create_oval(x,y+1,x+1,y,outline='yellow')
    orb=fen.after(8,orbite)

def stop():
    #arrête le satellite et efface l'écran
    "" 
    global flag,orb
    flag=0
    fen.after_cancel(orb)
    P.config(state=ACTIVE)
    can.delete(ALL) # effacement du contenu de la fenêtre 
    E_angle.delete(0,angle)
    E_force.delete(0,force)
    texte=can.create_text(L/2,L/3,text='MERCI\n\nvous pouvez continuer en modifiant les paramètres\n\nou, tout simplement, arrêter !!!',fill="white")

def quitter():
    #quitte le programme
    ans=askokcancel('',"Voulez-vous réellement quitter ?")
    if ans:fen.quit()

fen=Tk()
fen.title('Mise en orbite!')

L=800 #côté du canvas
D=80  #diamètre de la terre
d=8   #diamètre du satellite
flag=0
angle,force=0,0
K=50  #joue le rôle du produit G*M

can=Canvas(fen,bg='dark blue',height=L,width=L)
can.grid(row=1,column=0,rowspan=2) 
can2=Canvas(fen,bg='brown',highlightbackground='brown') 
can2.grid(row=1,column=1,sticky=N)

Button(can2,text='Quitter!',command=quitter,bg="white").pack(side=BOTTOM)

S=Button(can2,text='Stop !',height=2,width=25,relief=GROOVE,bg="white",activebackground="dark green",activeforeground="white",command=stop) 
S.pack(padx=5,pady=5,side=BOTTOM,anchor=SW)

T=Button(can2,text='Lancer !',height=2,width=25,relief=GROOVE,bg="white",activebackground="dark green",activeforeground="white",command=lancer) 
T.pack(padx=5,pady=5,side=BOTTOM,anchor=SW)

P=Button(can2,text='Préparer !',height=2,width=25,relief=GROOVE,bg="white",activebackground="dark green",activeforeground="white",command=preparer) 
P.pack(padx=5,pady=5,side=BOTTOM,anchor=SW)

E_force=Entry(can2) 
E_force.pack(padx=8,pady=5,side=BOTTOM) 
Label(can2,text="Choisir la vitesse initiale à donner",fg='white',bg='brown').pack(side=BOTTOM) 

E_angle=Entry(can2) 
E_angle.pack(padx=8,pady=5,side=BOTTOM) 
Label(can2,text="Choisir l'angle à donner",fg='white',bg='brown').pack(side=BOTTOM)

E_altitude=Entry(can2) 
E_altitude.pack(padx=8,pady=5,side=BOTTOM) 
Label(can2,text="Choisir l'altitude de départ",fg='white',bg='brown').pack(side=BOTTOM)

fen.mainloop()
fen.destroy()

 Conclusion

Merci à HCD pour son code collisions.py

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

15 août 2006 20:56:11 :
Plage de valeur des paramètres Impossible de passer à travers la Terre Le terme force a été remplacé par vitesse initiale, mieux approprié.

 Sources du même auteur

Source avec Zip Source avec une capture IMPLÉMENTATION DE LA TORTUE LOGO, APPLICATION AUX FRACTALES
Source avec une capture COURSE DE CHEVAUX
Source avec une capture CONVERTISSEUR FICHIER CAML -> FICHIER HTML

 Sources de la même categorie

CALCUL LIST DE NOMBRES PREMIERS par White541
TROUVER TOUT LES QUADRILATÉRES POSSIBLES AVEC N POINTS ALEAT... par Buenol
Source avec Zip GÉNÉRATION D'UN LABYRINTHE AVEC RECHERCHE DU CHEMIN LE PLUS ... par mehdicherti
Source avec Zip Source avec une capture DIVISIONS AVEC PRÉCISION RÉGLABLE par Clempython
Source avec Zip Source avec une capture LE CALCULATOR DE RAYGOLD VERSION 3.1 par raygold

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture CASSE BRIQUE par elnabo
Source avec Zip Source avec une capture ILLUSTRATION DE SINUS ET DE COSINUS par calogerogigante
Source avec Zip Source avec une capture EQUATION STANDARD DE LA DROITE par calogerogigante
Source avec Zip Source avec une capture I.A. (DÉBUTANT) par Rano Its
Source avec Zip CALCULATRICE SIMPLICISTE SOUS TKINTER par elnabo

Commentaires et avis

Commentaire de HCD le 15/08/2006 00:02:28

A l'attention de  jpountz

Je voudrais te remercier pour trois raisons :
La première, pour avoir eu la gentillesse de me citer.
La seconde, parce que la mise au point de mes sources m'a demandé beaucoup de temps, tant au niveau de la programmation que de la mise au point des algorithmes.Et que cela prouve que je n'ai pas perdu mon temps ...
La troisième, puisque ancien élève de l'X et de Sup'Aéro je ne puis que me réjouir quand on fait "bouger" un satellite !
Ceci étant dit le code est parfait.
Pour sa facilité de mise en oeuvre, je suggère que pour les trois paramètres d'entrée, le code indique les plages permises :
altitude de départ : de min à max
angle à donner : de min à max
force à donner : de min à max
Le plus simple serait de le mettre au début du code sous la forme d' un commentaire.

Encore merci et bonne continuation.

HCD

Commentaire de HCD le 15/08/2006 00:12:04

A l'attention des Administrateurs du site

J'aurais bien aimé noter 10 ce code, mais rien ne se passe quand je clique sur le bouton "Noter"  ???
Merci

HCD

Commentaire de Bidou le 15/08/2006 07:55:49 administrateur CS

Il n'y pas de bouton "Noter", il faut cliquer sur les étoiles en haut "Donnez une note à cette source"

Commentaire de HCD le 15/08/2006 12:55:56

Merci BIDOU pour ta réponse.
Je n'ai pas le système de notation avec des étoiles, mais à la place un liste déroulante avec des nombres de 1 à 10 et à côté un bouton de commande libellé   " Noter:: " qui ne fonctionne pas.
Je ne comprends pas.

Commentaire de jpountz le 15/08/2006 21:14:01

@ HCD

Merci à toi!
En tant que futur Centralien (Paris) ayant échoué aux oraux de l'X :(, tes compliments me flattent. J'ai tenté d'ajouter de ce tu m'as conseillé.

Encore merci pour ton code COLLISIONS.PY !

Commentaire de HCD le 15/08/2006 21:54:06

Tes  commentaires sont excellents et ceci clôt le débat !
Central Paris est une superbe grande école et ouvre aussi de nombreux horizons.
Alors bo courage pour la rentrée prochaine !
Cordialement
HCD

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

scrollbar dans scrollbox avec TKinter [ par MHI ] Est-ce que quelqu'un sait comment ajouter les scrollbar à une scrollbox :J'ai essayé ceci :lstFile = Tkinter.Listbox(frmMain)lstFile.place(x = 20, y = checkButton avec TKinter [ par MHI ] comment faire pour tester si un checkButton est coché ? Probleme avec TKinter [ par titasse ] Bonjour, je debute en python. J'ai un probleme lorsque je veux importer TKinter avec la commande from TKinter import * j'ai le message suivant : Imp au sujet de Tkinter et le module turtle [ par nico1900 ] from turtle import *forward(120)left(90)&nbsp;color('red')&nbsp;forward(80)bon en fait je voulais tester le module turtle&nbsp;avec&nbsp;l e code ci-d Un Canvas comme dans Tkinter, mais pour wxPython [ par samurize ] Slt tout le monde. &nbsp; Voila tout est dans le titre (ou a peu pres&nbsp; ) : &nbsp; Je suis &#224; la recherche d'un module pouvant s'integrer da Taille de widgets sous Tkinter [ par Uims ] Bonjour, Quelqu"un saurait comment definir la taille d'un widgets sous tkinter??? Exemple: fen 1 = Tk(taille=600) J'espere que je me fait comprend Ouverture d'un fichier windows (avec Tkinter) [ par Uims ] Bonjour, Je travaille sous python et Tkinter et j'aurai voulu savoir comment dire a python de demarrer (comme on clique sur un fichier) une applicati Tkinter et Python [ par Telimektar1er ] Voila j'ai commenc&#233; e python il y a une semaine et jusqu &#224; aujourd'hui aucun probl&#232;me. Mais voil&#224;, je viens de commencer la cr&#23 help, faire un mastermind en python et en tkinter avant le 24 !!! [ par Crick132 ] je suis &#233;tudiante en 2&#232;me ann&#233;e, je dois r&#233;aliser un mastermind en python avec 8 couleurs et 5 combinaisons possibles.si quelqu'un Importer une image dans Tkinter... [ par skools ] Bonjour à tous, Et pardon à ceux à qui j'ai envoyé des messages perso, je n'arrivais pas à poster un suget dans le forum... Voilà, après des heures d


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Juillet 2010
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,026 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales