Positions des astres

Contenu du snippet

"""
L'affichage n'est pas à l'échelle
j'ai ajouté pour que les astres soient bien visible:
if rayon<0.1:rayon=3 # pour les planètes
else:rayon=10 # pour soleil et lune

Si quelqu'un peux conserver l'échelle avec zoom
merci de transmettre le code python
Des touches permettent de modifier la date et heure :
espace a A s S m M
touches de direction et mouse gauche et droite
"""
from tkinter import *
import math
import ephem

o=ephem.Observer()
o.date='2023/10/14 17:55:07' # une eclipse de soleil, visibilité à rechercher
o.lat='48.866667' # latitude pour Paris
o.lon='2.333333'  # longitude pour Paris
o.elevation=0

def circle(x,y,diametre,astre):
    global h2
    rayon=diametre/2
    rayon=rayon*0.000277778 # valeur réelle normalement
    if rayon<0.1:rayon=2 # pour les planètes
    else:rayon=10 # pour soleil et lune
    x1=3*(x-rayon)
    y1=h2-3*(y-rayon)
    x2=3*(x+rayon)
    y2=h2-3*(y+rayon)
    cnvs.create_oval(x1,y1,x2,y2,fill=astre,outline=astre)

def affiche():
    global o,w,h2
    #fen.title(str(o.date)+' UTC
    # de 1971 à 2999
    #d=o.date.datetime()
    #print(d.year,d.month,d.day,d.hour,d.minute,d.second)
    fen.title(ephem.localtime(o.date).strftime("%d/%m/%Y %H:%M:%S"))

    # recherche d'éclipse à o.date #################################
    elevation=o.elevation
    pressure=o.pressure
    o.elevation=-6371000 # observateur au centre de la terre
    o.pressure=0         # désactive la réfraction
    sun=ephem.Sun(o)
    moon=ephem.Moon(o)
    separ=ephem.separation(moon,sun)/0.01745329252
    sep=abs(separ)
    if sep<1.59754941:print("Eclipse de soleil",o.date,sep)
    sep=abs(separ-180)
    if sep<0.9:print("Eclipse de lune",o.date,sep)
    o.elevation=elevation
    o.pressure=pressure
    ################################################################

    sun=ephem.Sun(o)
    moon=ephem.Moon(o)
    mercury=ephem.Mercury(o)
    venus=ephem.Venus(o)
    mars=ephem.Mars(o)
    jupiter=ephem.Jupiter(o)
    saturn=ephem.Saturn(o)

    cnvs.delete('all')
    cnvs.create_line(0,h2,w,h2,fill="green") # horizon
    circle(math.degrees(sun.az),math.degrees(sun.alt),sun.size,'red')
    circle(math.degrees(moon.az),math.degrees(moon.alt),moon.size,'black')
    circle(math.degrees(mercury.az),math.degrees(mercury.alt),mercury.size,'blue')
    circle(math.degrees(venus.az),math.degrees(venus.alt),venus.size,'green')
    circle(math.degrees(mars.az),math.degrees(mars.alt),mars.size,'magenta')
    circle(math.degrees(jupiter.az),math.degrees(jupiter.alt),jupiter.size,'red')
    circle(math.degrees(saturn.az),math.degrees(saturn.alt),saturn.size,'black')

drapeau=False # pour ne pas chevaucher les events key, b1 et b2

def key(e):
    global drapeau,o
    if drapeau:return
    drapeau=True
    if(e.keysym=='Left'):o.date-=ephem.minute
    elif(e.keysym=='Right'):o.date+=ephem.minute
    elif(e.keysym=='Up'):o.date+=ephem.hour
    elif(e.keysym=='Down'):o.date-=ephem.hour
    elif(e.keysym=='space'):o.date=ephem.now()
    elif(e.keysym=='j+'):o.date+=24*ephem.hour
    elif(e.keysym=='j-'):o.date-=24*ephem.hour
    elif(e.keysym=='a'):o.date-=8760*ephem.hour
    elif(e.keysym=='A'):o.date+=8760*ephem.hour
    elif(e.keysym=='m'):o.date-=720*ephem.hour
    elif(e.keysym=='M'):o.date+=720*ephem.hour
    elif(e.keysym=='s'):o.date-=ephem.second
    elif(e.keysym=='S'):o.date+=ephem.second
    affiche()
    drapeau=False

def b1(e):
    e.keysym='j-'
    key(e)

def b3(e):
    e.keysym='j+'
    key(e)

fen = Tk()

w=3*360 # azimut de 0 à 360
h=3*180 # altitude de -90 à 90
h2=h//2 # horizon

fen.bind("<Key>",key)
fen.bind('<Button-1>',b1)
fen.bind('<Button-3>',b3)

cnvs=Canvas(fen,width=w,height=h)
cnvs.pack()

affiche()

fen.mainloop()

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.