solar.py

Created by cent20

Created on August 15, 2023

5.95 KB

📙 Découvrir la NumWorks p.98

𝗦𝗼𝗹𝗮𝗿


Naviguez au cœur du système solaire, et découvrez les caractéristiques de chaque planètes qui le compose …
[1NSI] Projet 2020 de Jil et Emmy Marche parfaitement sur la calculatrice. Un peu lent sur l’émulateur. 🌟


# Découvrir la NumWorks p.98
# solar.py v1.1 NW 25/10/2020
# https://nsi.xyz/solar
# par Jil et Emmy

from math import *
from kandinsky import *
from random import *
from time import *
from ion import *

def cercle(x0,y0,r,c,e):
 for i in range(2*e):
   xd=x0-int((r-i*0.5)/sqrt(2))
   xf=x0+int((r-i*0.5)/sqrt(2))
   for x in range(xd,xf+1):
     x1=x
     y1=y0+int(sqrt((r-i*0.5)**2-(x-x0)**2))
     set_pixel(x,y1,c)
     for j in range(3):
       x2=x0+y1-y0
       y2=y0+x0-x1
       set_pixel(x2,y2,c)
       x1,y1=x2,y2

def cercle_plein(x0,y0,r,c1,e,c2):
 cercle(x0,y0,r,c1,e)
 cercle(x0,y0,r-e,c2,r-e)

def cercle_grade(x0,y0,R,c1,e,c2):
 for i in range(R):
   r=c1[0]+i*(c2[0]-c1[0])//R
   g=c1[1]+i*(c2[1]-c1[1])//R
   b=c1[2]+i*(c2[2]-c1[2])//R
   cercle(x0,y0,i,color(r,g,b),1)
  
c_noir=[0,0,0] #fond étoilé avec le soleil
c_bleu=[0,35,143]
c_soleil=[255,255,0]
c_soleil2=[235,128,0]
cercle_grade(160,111,197,c_bleu,10,c_noir)
cercle_grade(160,111,40,c_soleil2,2,c_bleu)
cercle_grade(160,111,16,c_soleil,2,c_soleil2)

def degrade(c1,c2,k):
 dr=c2[0]-c1[0]
 dg=c2[1]-c1[1]
 db=c2[2]-c1[2]
 return color(c1[0]+int(k*dr),c1[1]+int(k*dg),c1[2]+int(k*db))

def tirage(n):
 for i in range(n):
   x=randint(0,320)
   y=randint(0,222)
   c=couleur(x,y)
   set_pixel(x,y,c)
   set_pixel(x+1,y,c)
   set_pixel(x,y+1,c)
   set_pixel(x+1,y+1,c)

def couleur(x,y):
 d=sqrt((x-160)**2+(y-111)**2)/32.5
 return degrade(c[int(d)],c[(int(d)+1)%6],d-int(d))
c=[[235,128,0],[13,89,175],[13,89,175],[44,122,211],[207,230,230],[207,230,230]]

tirage(250)

c_blanc=[119,135,135]
r_orb = [22,32,42,52,62,76,92,109]
for i in range(8):
   cercle(160,111,r_orb[i],c_blanc,1)

#periode de revolution
#distance soleil
#masse
#taille
#composition
position = [0] 
systeme = [("Soleil",'centre du sytème solaire','dis soleil: 0','masse: 1,989 × 10^30 kg','rayon: 696340 km', 'satellites connus: 0'),
           ("Venus",'periode de revo: 225 jours','dis soleil: 104 millions km','masse: 4,867 × 10^24 kg','rayon: 6051.8 km', 'satellites connus: 0'),
           ("Mercure",'periode de revo: 88 jours','dis soleil: 57 millions km','masse: 3,285 × 10^23 kg','rayon: 2439.7 km', 'satellites connus: 0'),
           ("Terre",'periode de revo: 365 jours','dis soleil: 150 millions km','masse: 5,972 × 10^24 kg','rayon: 6371 km', 'satellites connus: Lune'),
           ("Mars",'periode de revo: 687 jours','dis soleil: 220 millions km ','masse: 6.39 × 10^23 kg ','rayon: 3389,5 km','satellites connus: 2'),
           ("Jupiter",'periode de revo: 12 ans','dis soleil: 780 millions km ','masse: 1.898 × 10^27 kg','rayon: 69911 km','satellites connus: 3 '),
           ("Saturne",'periode de revo: 29 ans','dis soleil: 1,493 milliard km','masse: 5.683 × 10^26 kg','rayon: 58232 km','satellites connus: ~ 200 '),
           ("Uranus",'periode de revo: 84 ans','dis soleil: 2,9592 milliards km','masse: 8.681 × 10^25 kg','rayon: 25362 km','satellites connus: 27'),
           ("Neptune",'periode de revo: 165 ans','dis soleil: 4,4762 milliards km','masse: 1.024 × 10^26 kg','rayon: 24622 km ','satellites connus: 14 '),
           ]
coord = [(160,111,16), (185,95,8), (180,110,6), (120,100,9), (160,160,9), (115,150,15), (200,50,12), (170,20,9), (55,80,8)]
couleur1 = [[255,255,0], [190,183,150], [251,136,7], [30,160,173], [245,0,0], [162,125,105], [200,169,133], [191,209,232], [0,33,240]]
couleur2 = [[235,128,0], [121,104,83], [106,73,32], [6,67,29], [101,12,12], [134,56,32], [189,138,80], [117,163,224], [5,15,81]]
 
 
 
def solar_systeme_dessine(n, degrade=1):
 # Affiche un corps du sytème solaire, numéro du corps dans systeme[], degradé
 p = 2 + 9 * (n != 0)
 if degrade == 1:
   cercle_grade(coord[n][0], coord[n][1], coord[n][2], couleur1[n], p, couleur2[n])
 else:
   cercle_grade(coord[n][0], coord[n][1], coord[n][2], [255,255,255], p, [255,255,255])
 
def solar_systeme_texte(n=42, t=0): #affichage du texte en bas, de couleur associée à omega, avec les diverse infos
 try:
   get_keys()
   os = (192,53,53)
 except:
   os = (255,183,52) 
 if n == 42 :
   fill_rect(1,204,320,18,os)
   draw_string("nsi.xyz/solar par Emmy & Jil ",2,204,(255,255,255),os)
 else:
   fill_rect(1,204,320,18,os)
   draw_string(systeme[n][t],2,204,(255,255,255),os)
 pass
 
solar_systeme_texte()
 
def navigation(): #navigation grâce aux flèches

  texte = 0  
  
  while not keydown(5):



    if keydown(0): #Gauche
      avant = position[0]
      position[0] = max(position[0]-1, 0)
      if avant != position[0]:
        solar_systeme_dessine(avant, degrade=1)
      solar_systeme_dessine(position[0], degrade=0)
      solar_systeme_texte(position[0],texte)
      sleep(0.120)

    elif keydown(3): #Droite
      avant = position[0]
      position[0] = min(position[0]+1, 8) # le soleil [0] + 8 planète
      if avant != position[0]:
        solar_systeme_dessine(avant, degrade=1)
      solar_systeme_dessine(position[0], degrade=0)
      solar_systeme_texte(position[0],texte)
      sleep(0.120)

    elif  keydown(1):  #haut
      texte = min(texte + 1, 5) # Il faut donc avoir 5 données en plus du nom dans systeme[]
      solar_systeme_texte(position[0],texte)
      sleep(0.120)

    elif keydown(2): #bas
      texte = max(texte - 1, 0)
      solar_systeme_texte(position[0],texte)
      sleep(0.120) 
      

solar_systeme_dessine(0, degrade=0)
'''for i in range(1000000):
  pass'''
sleep(1)
solar_systeme_dessine(0, degrade=1)


#Mercure
cExt=[190,183,150]
cInt= [121,104,83]
cercle_grade(180,110,6,cExt,10,cInt)

#Venus
cExt=[251,136,7]
cInt= [106,73,32]
cercle_grade(185,95,8,cExt,10,cInt)
 
#Terre
cExt=[30,160,173]
cInt=[6,67,29]
cercle_grade(120,100,9,cExt,10,cInt)
 
#Mars
cExt=[245,0,0]
cInt=[101,12,12]
cercle_grade(160,160,9,cExt,10,cInt)

#Jupiter
cExt=[162,125,105]
cInt=[134,56,32]
cercle_grade(115,150,15,cExt,10,cInt)

#Saturne
cExt=[200,169,133]
cInt=[189,138,80]
cercle_grade(200,50,12,cExt,10,cInt)

#Uranus
cExt=[191,209,232]
cInt=[117,163,224]
cercle_grade(170,20,9,cExt,10,cInt)

#Neptune
cExt=[0,33,240]
cInt=[5,15,81]
cercle_grade(55,80,8,cExt,10,cInt)

navigation()