IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Mouvement rétrograde de Mars (python)


Sujet :

Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    étudiant en physique à l'université
    Inscrit en
    Février 2022
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : étudiant en physique à l'université

    Informations forums :
    Inscription : Février 2022
    Messages : 4
    Par défaut Mouvement rétrograde de Mars (python)
    bonsoir à tous!

    j'ai un devoir à rendre pour demain et cela concerne le mouvement rétrograde de Mars.
    Avec un fichier DataMars.csv qui contient les coordonnées (longitude et latitude) de la position de Mars par rapport au centre de la Terre en fonction de la date entre 2015 et 2017. Notons que la latitude est définie ici par rapport au plan de l'écliptique.
    Le centre de la boucle peut s'observer à la date du 25 mai 2016, à la longitude de 240.5°.
    ils nous demandent ensuite d'utiliser un modèle bidimensionnel du mouvement de la Terre et de Mars autour du Soleil. On considérera le mouvement des deux planètes comme circulaire uniforme et contenu dans le plan de l'écliptique. Ce modèle nous permettra de calculer la longitude de Mars vue depuis la Terre (i.e. l'angle phi dans le réferentiel géocentrique) en fonction du temps.

    Donc avec le fichier csv j'ai créé un data frame puis en ai extrait la colonne contenant seulement les dates du 01 janvier 2016 au 1er novembre 2016 que j'ai affectée à un tableau qui s'appelle dates et j'ai fait la même chose avec la colonne contenant la longitude que j'ai affectée à un tableau xAstro, j'ai plot les deux et j'obtiens une belle courbe avec le mouvement rétrograde de Mars, t en abscisses et la longitude en ordonnées.
    Maintenant mon problème c'est que je n'arrive pas à reproduire la même courbe pendant le même intervalle de temps avec seulement les équations du mouvement circulaire uniforme et la définition du phi apparent. Je sais que je dois le plot en fonction du temps mais je ne sais pas trop comment m'y prendre...
    j'ai créé un tableau t allant de 0s à 26374118.4s le nombre de secondes entre le 1er janvier 2016 et le 1er novembre 2016 et je ne sais pas comment me servir du phi...

    je vous montre mon code, si quelqu'un pouvait m'aider...

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    #Importation de nos divers modules
    import matplotlib.pyplot as plt
    import numpy as np
    import pandas as pd
    import math as mt
    from math import cos
    from math import sin
    from math import atan2
    from math import pi
    from datetime import datetime
    import time
     
    """
    2016-04-18 le début de la boucle, longitude décroit
    2016-05-25 centre de la boucle, planètes alignées
    2016-07-02 fin de la boucle, longitude croît
    """
     
    "ouverture du fichier .csv et création du panda dataframe"
    données_astronomiques=pd.read_csv('DataMars.csv') #, comment='#')
     
    #print('ndim :', données_astronomiques.ndim)
    #print('shape :', données_astronomiques.shape)
    #print('size :', dates.size)
    #print(type(dates))#nous indique de quel type il est
    #Affichage des n premières lignes
    #print(dates.head(0,)) 
    #print(données_astronomiques.shape)#taille de notre panda dataframe
    #print(données_astronomiques.columns)#nous affiche les noms des colonnes
    #print(données_astronomiques.loc[306:610,'Date'])#selection des éléments à partir du 1er janvier 2016 jusqu'au 1er Novembre 2016 pour bien visualiser le mouvement rétrograde
     
     
    "Données astronomiques"
     
    # Colonne Date du csv dans un tableau tAstro
    #tAstro=données_astronomiques.loc[306:610,'Date']#attribution de l'intervalle de temps à une nouvelle variable plus simple à manipuler dans le code python
    dates=données_astronomiques['Date']
    #tAstro_calendrier=np.linspace('2016-01', '2016-11', dtype='datetime64[Y]')#création tableau avec tous les jours du mois de janvier jusqu'à novembre
     
    # Colonne Longitude du csv dans un tableau xAstro
    #xAstro=données_astronomiques.loc[306:610,'Longitude']#attribution de l'intervalle longitudinal où se produit le mouvement rétrograde
    #plt.plot(tAstro,xAstro,'r-',linewidth=3,label = 'data')
    #plt.ylim(200,300)
    #plt.ylabel('Longitude [°]')
    #plt.xlabel('date')
    #plt.margins(0,0)
    #plt.show()
     
    "Modèle du mouvement circulaire uniforme de la Terre et de Mars dans le référentiel héliocentrique"
     
    # Données de l'énoncé
    rayon_orbitalTerre=1.496e11 #m (1*UA)
    rayon_orbitalMars=2.279438e11 #m(1.52371*UA)
    Trevolution_Terre=31558118.4 #s(60*60*24*365.256)
    Trevolution_Mars= 59346864 #s(60*60*24*686.885)
     
    t0=0 ; tf=26374118.4 ; pas=86400 ; intervalle = tf - t0
    num_points = int(intervalle / pas) + 1 # nombre d'éléments
    t = np.linspace(t0, tf, num_points)
     
    #t_modèle=26373254400 #s (nombre de secondes du 2016/01/01 au 2016/11/01)
     
    # Vitesses angulaires de le Terre et de Mars
    wTerre=2*np.pi/Trevolution_Terre #rad/s
    wMars=2*np.pi/Trevolution_Mars #rad/s
    phi_0x=2*np.pi
    phi_0y=np.pi
     
    # Coordonnées de la Terre dans le référentiel héliocentrique
    xTerre=rayon_orbitalTerre*np.cos(wTerre*t +phi_0x)
    yTerre=rayon_orbitalTerre*np.sin(wMars*t +phi_0y)
     
    # Coordonnées de Mars dans le référentiel héliocentrique
    xMars=rayon_orbitalMars*np.cos(wTerre*t +phi_0x)
    yMars=rayon_orbitalMars*np.sin(wMars*t +phi_0y)
     
     
    # Expression de phi_apparent 
    phi_apparent=atan2((yMars-yTerre),(xMars-xTerre))
    #plt.plot(t, phi_apparent, label = 'model')
     
    print(type(phi_apparent))
    print(type(t))

    Donc avec les données expérimentales j'arrive bien à afficher la courbe rouge mais je n'arrive pas à ploter la bleue...
    Images attachées Images attachées     

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 813
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Aspirant_Physicien Voir le message
    Donc avec le fichier csv j'ai créé un data frame puis en ai extrait la colonne contenant seulement les dates du 01 janvier 2016 au 1er novembre 2016 que j'ai affectée à un tableau qui s'appelle dates et j'ai fait la même chose avec la colonne contenant la longitude que j'ai affectée à un tableau xAstro, j'ai plot les deux et j'obtiens une belle courbe avec le mouvement rétrograde de Mars, t en abscisses et la longitude en ordonnées.
    Maintenant mon problème c'est que je n'arrive pas à reproduire la même courbe pendant le même intervalle de temps avec seulement les équations du mouvement circulaire uniforme et la définition du phi apparent. Je sais que je dois le plot en fonction du temps mais je ne sais pas trop comment m'y prendre...
    Peut-être que je n'ai pas bien pigé mais une fonction qui calcule x et y en fonction de t devrait faire l'affaire.
    Exemple
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def circum(t, R=0, T=1, origin=0):
    	point=2*np.pi/T * t + origin
    	return {"x" : R * np.cos(point), "y" : R * np.sin(point)}
    # circum()

    Ensuite tu utilises la fonction pour générer tous tes points à partir d'un "t" qui varie dans le temps, points que tu bennes dans ton tableau xAstro et tu te retrouveras dans le même cas que si tu avais pris tes données dans un fichier...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 813
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Aspirant_Physicien Voir le message
    comment ferait-on pour appliquer ce que tu me conseilles?
    Ben... je ne pige pas vraiment ton souci. J'ai écrit une fonction qui calcule X et Y en fonction de t selon les équations d'un mouvement circulaire.
    Il suffit de l'appeler en lui donnant divers temps et tu auras en retour les X et Y correspondants.

    Tu dis avoir créé un tableau contenant tous les temps allant de 0s à 26374118.4s le nombre de secondes entre le 1er janvier 2016 et le 1er novembre 2016. Si tu prends donc chaque "t" du tableau, en le passant à la fonction tu obtiens en retour X et Y que tu peux plotter dans ton graphique.

    Exemple
    Code python : 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
    #!/usr/bin/env python3
    # coding: utf-8
     
    import numpy as np
     
    def circum(t, R=0, T=1, origin=0):
    	point=2*np.pi/T * t + origin
    	return {"x" : R * np.cos(point), "y" : R * np.sin(point)}
    # circum()
     
    # Création d'un tableau de 20 temps divers
    tab=tuple(range(20))
    print(", ".join("t={}".format(x) for x in tab), type(tab))
     
    # Traitement du tableau
    for t in tab:
    	pos=circum(t, R=10, T=4)
    	print("t={}, x={}, y={}".format(t, pos["x"], pos["y"]))
    # for

    Résultat
    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
    t=0, t=1, t=2, t=3, t=4, t=5, t=6, t=7, t=8, t=9, t=10, t=11, t=12, t=13, t=14, t=15, t=16, t=17, t=18, t=19 <class 'tuple'>
    t=0, x=10.0, y=0.0
    t=1, x=6.123233995736766e-16, y=10.0
    t=2, x=-10.0, y=1.2246467991473533e-15
    t=3, x=-1.8369701987210296e-15, y=-10.0
    t=4, x=10.0, y=-2.4492935982947065e-15
    t=5, x=3.061616997868383e-15, y=10.0
    t=6, x=-10.0, y=3.673940397442059e-15
    t=7, x=-4.2862637970157365e-15, y=-10.0
    t=8, x=10.0, y=-4.898587196589413e-15
    t=9, x=5.5109105961630896e-15, y=10.0
    t=10, x=-10.0, y=6.123233995736766e-15
    t=11, x=-2.4499125789312944e-14, y=-10.0
    t=12, x=10.0, y=-7.347880794884118e-15
    t=13, x=-9.803364199544707e-15, y=10.0
    t=14, x=-10.0, y=8.572527594031473e-15
    t=15, x=-2.6948419387607653e-14, y=-10.0
    t=16, x=10.0, y=-9.797174393178826e-15
    t=17, x=-7.354070601250003e-15, y=10.0
    t=18, x=-10.0, y=1.1021821192326179e-14
    t=19, x=-2.9397712985902356e-14, y=-10.0
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Aide script Python mouvement de souris
    Par Tinqq dans le forum Raspberry Pi
    Réponses: 0
    Dernier message: 11/03/2019, 19h26
  2. CORBA & PYTHON
    Par stan91stan dans le forum CORBA
    Réponses: 5
    Dernier message: 10/06/2004, 12h32
  3. [Lien]erreur dans mon programme python
    Par durnambule dans le forum Général Python
    Réponses: 11
    Dernier message: 29/01/2004, 14h59
  4. [FLASH MX]le mouvement et les sacades
    Par VincentB dans le forum Flash
    Réponses: 6
    Dernier message: 16/01/2004, 23h42
  5. Comment limiter les mouvements du curseur??
    Par scorpiwolf dans le forum C++Builder
    Réponses: 9
    Dernier message: 07/07/2002, 22h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo