Page 1 sur 1

Rétrogradation Mars!

Publié : sam. 07/janv./2006 23:36
par Huitbit
(Cette source nécessite 2 images(voir plus loin), je n'ai pas su les mettre sur la page!!Désolé! Si quelqu'un m'explique, je les mettrai!)



Un peu d'histoire...

Depuis la nuit des temps, l'Homme, dès qu'il avait le ventre plein, levait les yeux vers le ciel (hé oui, à quoi pensiez-vous?).

Et il s'est vite aperçu qu'il y avait des "étoiles" qui ne se comportaient pas comme les autres.

Planète vient du grec "planêtês" qui veut dire astre errant.

La trajectoire de Mars(et des autres planètes) dans le ciel est assez surprenante puisque la planète fait "marche arrière" à une certaine période de l'année!
C'est la rétrogradation de Mars.


J'ai fait un petit bilan de toutes les fonctions(voir les autres sources!) que j'ai vu (à part clipsprite et grabsprite).

Cette fois-ci pour faire les sprites des ombres j'ai utilisé drawingmod(4) et fillarea(c'est plus rapide)!

J'utilise une image (format PNG) 32*32 de Mars sur fond noir et une image (format PNG de 64*64 de la Terre) sur fond noir


le prog est fait pour un écran de 1028*768

Voilà le code commenté:

Code : Tout sélectionner

;**********rétrogradation de Mars**********
;**********constantes*********
#pi = 3.1415927
#rayon_terre=6.38
#orbite_terre=1
#periode_terre=1
#rayon_mars=3.40
#orbite_mars=1.524
#periode_mars= 1.88

Enumeration
  #spr_background
  #spr_terre
  #spr_ombreterre
  #spr_miniterre
  #spr_mars
  #spr_ombremars
  #spr_minimars
  #spr_calque
  #spr_calquevierge
  EndEnumeration 

;**********variables**********
  angle.f=0
  inc_angle.f=0.8
   angle_mars.f=25.9
  x_terre.f=0
  y_terre.f=0
  x_miniterre.f=0
  y_miniterre.f=0
  x_mars.f=0
  y_mars.f=0
  x_minimars.f=0
  y_minimars.f=0
  trace.l=0
  Pause.l=0
  ;**********initialisation**********
  InitSprite()
  InitSprite3D()
  InitKeyboard()
  
  OpenWindow(1,0,0,1024,768,#PB_Window_ScreenCentered| #PB_Window_BorderLess,"Rétrogradation de la planète Mars")
  OpenWindowedScreen(WindowID(1),0,0,1024,736,0,0,0)
  UsePNGImageDecoder()
  LoadFont(1,"Papyrus",11,#PB_Font_HighQuality)
  ;**********fond d'écran**********
  CreateSprite(#spr_background,1024,736)
  StartDrawing(SpriteOutput(#spr_background))
  For etoile =0 To 1000  ;étoiles du cadre principal  
    x_etoile=Random(758)+5
    y_etoile=Random(726)+5
    Plot(x_etoile,y_etoile,RGB(Random(10)+240,Random(10)+240,Random(10)+240))
  Next etoile
  
  For etoile=0 To 100 ;étoiles du petit cadre 
    x_etoile=Random(250)+773
    y_etoile=Random(246)+5
    Plot(x_etoile,y_etoile,RGB(Random(10)+240,Random(10)+240,Random(10)+240))
  Next etoile
  Circle(896,128,32,RGB($FF,$FF,$0));dessin du mini soleil
  Circle(896,128,24,RGB($FF,$FF,$80))
  Circle(896,128,16,RGB($FF,$FF,$BF))
  Box(768,256,256,256,RGB($0,$80,$80));zone d'infos sur la Terre
  Box(768,512,256,224,RGB($80,$40,$40));zone d'infos sur Mars
  StopDrawing()
  
  
 ;********** sprite Terre**********
  LoadSprite(#spr_terre,"terre.png",#PB_Sprite_Texture)
  CreateSprite3D(#spr_terre,#spr_terre)
  
  
 ;**********sprite ombre terre******
  CreateSprite(#spr_ombreterre,64,64,#PB_Sprite_Texture)
  StartDrawing(SpriteOutput(#spr_ombreterre))
  DrawingMode(4);dessine sans remplir les surfaces
  Circle(32,32,32,RGB($23,$23,$23))
  Line(32,0,0,64,RGB($23,$23,$23))
  FillArea(33,32,RGB($23,$23,$23),RGB($23,$23,$23))
  StopDrawing()
  CreateSprite3D(#spr_ombreterre,#spr_ombreterre)
  
  
  ;**********sprite miniterre**********
  CreateSprite(#spr_miniterre,16,16,#PB_Sprite_Texture)
   StartDrawing(SpriteOutput(#spr_miniterre))
  DrawingMode(4);dessine sans remplir les surfaces
  Circle(8,8,8,RGB($0,$40,$80))
  Line(8,0,0,16,RGB($0,$40,$80))
   FillArea(9,8,RGB($0,$40,$80),RGB($0,$40,$80))
  FillArea(7,8,RGB($0,$40,$80),RGB($0,$FF,$FF))
  StopDrawing()
  CreateSprite3D(#spr_miniterre,#spr_miniterre)
  ;********** sprite mars*********
  LoadSprite(#spr_mars,"mars.png",#PB_Sprite_Texture)
  CreateSprite3D(#spr_mars,#spr_mars)
  
  ;**********sprite ombre mars******
  CreateSprite(#spr_ombremars,32,32,#PB_Sprite_Texture)
  StartDrawing(SpriteOutput(#spr_ombremars))
  DrawingMode(4);dessine sans remplir les surfaces
  Circle(16,16,15,RGB($23,$23,$23))
  Line(16,0,0,32,RGB($23,$23,$23))
  FillArea(17,16,RGB($23,$23,$23),RGB($23,$23,$23))
  StopDrawing()
  CreateSprite3D(#spr_ombremars,#spr_ombremars)
  
  
  ;**********sprite minimars**********
  CreateSprite(#spr_minimars,8,8,#PB_Sprite_Texture)
   StartDrawing(SpriteOutput(#spr_minimars))
  DrawingMode(4);dessine sans remplir les surfaces
  Circle(4,4,4,RGB($80,$40,$40))
  Line(4,0,0,8,RGB($80,$40,$40))
  FillArea(5,4,RGB($80,$40,$40),RGB($80,$40,$40))
  FillArea(3,4,RGB($80,$40,$40),RGB($FF,$0,$0))
  StopDrawing()
  CreateSprite3D(#spr_minimars,#spr_minimars)
  ;**********sprite calque**********
  CreateSprite(#spr_calque,768,736)
  ;**********sprite calque vierge**********
  CreateSprite(#spr_calquevierge,768,736)
 ;*********boutons de commande********** 
  CreateGadgetList(WindowID(1))
  ButtonGadget(1,0,736,90,32,"Quitter" )
  ButtonGadget(2,90,736,90,32,"Tracer / Effacer")
  ButtonGadget(3,180,736,90,32,"Pause / Reprise")
  ButtonGadget(4,270,736,55,32,"Ralentir")
  ButtonGadget(5,325,736,55,32,"Accélérer")
  ;**********programme principal*********
  Repeat ; boucle principale
    
    Repeat
      event = WindowEvent()
      
      Select event
        
        Case #PB_EventGadget
          Select EventGadgetID()
            Case 1 
              End
            Case 2 
              trace=trace+1
              If trace>1
                trace=0
              EndIf
            Case 3 
              Pause=Pause+1
              If Pause>1
                Pause=0
                inc_angle=0.8
              EndIf
            Case 4 
              If inc_angle>0.4
                inc_angle=inc_angle-0.2
              Else
                inc_angle=0.2
              EndIf
            Case 5 
              If inc_angle <2
                inc_angle=inc_angle+0.2
              Else
                inc_angle=2
              EndIf
              
              
          EndSelect
          
      EndSelect
      
    Until event = #Null
    
    If Pause=0
    angle=angle+inc_angle
    If angle>=36000 ; observation sur un siècle
      angle=0
    EndIf
  EndIf
  ;*********fond d'écran**********
  DisplaySprite(#spr_background,0,0)
  
  ;**********infos sur les deux planètes**********
  StartDrawing(ScreenOutput())
  
  DrawingFont(FontID())
  FrontColor(255,255,255)
  DrawingMode(1)
  Locate(768,256)
  DrawText(" Planète Terre   "+Str(Int(365.25*angle/360))+" jours     ( "+Str(Int(angle/360))+" an(s))")
  
  Locate(768,296)
  DrawText(" Rayon terrestre = 6380 km")
  
  Locate(768,336)
  DrawText(" Jour sidéral = 23h 56min 4s  ")
  Locate(768,356)
  DrawText(" ( mouvement ralenti sur l'écran )")
  Locate(768,396)
  DrawText(" Période de révolution T = 365,25 jours")
  Locate(768,436)
  DrawText(" Déphasage  Mars / Terre: ")
  
  Locate(768,456)
  DrawText(" 25,9°  le 7 janvier 2006 ")
  
  Locate(768,512)
  DrawText(" Planète Mars   ")
  
  Locate(768,552)
  DrawText(" Rayon martien = 3400 km")
  
  Locate(768,592)
  DrawText(" Jour sidéral = 24h 37min 23s  ")
  Locate(768,612)
  DrawText(" ( mouvement ralenti sur l'écran )")
  Locate(768,652)
  DrawText(" Période de révolution T = 687 jours")
  StopDrawing()
  ;**********calcul des trajectoires**********
    x_miniterre=64*#orbite_terre*Cos(-angle*#pi/180)+888
    y_miniterre=64*#orbite_terre*Sin(-angle*#pi/180)+120
    x_minimars=64*#orbite_mars*Cos(-angle*#pi/(180*1.88)+angle_mars)+892
    y_minimars=64*#orbite_mars*Sin(-angle*#pi/(180*1.88)+angle_mars)+124
    x_mars=2.1*(x_minimars-x_miniterre)+360
    y_mars=2.1*(y_minimars-y_miniterre)+360
    ;**********affichage des sprites et rotation*********
    Start3D()
    Sprite3DQuality(1)
    RotateSprite3D(#spr_terre,-angle*4,0)
    RotateSprite3D(#spr_mars,-angle*1.02877*4,0)
    RotateSprite3D(#spr_ombreterre,-angle,0)
    RotateSprite3D(#spr_ombremars,-angle/1.88,0)
    RotateSprite3D(#spr_miniterre,-angle,0)
    RotateSprite3D(#spr_minimars,-angle/1.88,0)
    
    
    DisplaySprite3D(#spr_miniterre,x_miniterre,y_miniterre)
    DisplaySprite3D(#spr_minimars,x_minimars,y_minimars)
    
    Sprite3DBlendingMode(5,3);mixage des sprites pour effet d'ombre
  
  DisplaySprite3D(#spr_terre,352,352)
  DisplaySprite3D(#spr_ombreterre,352,352)
  If x_mars<752
  DisplaySprite3D(#spr_mars,x_mars,y_mars)
  DisplaySprite3D(#spr_ombremars,x_mars,y_mars)
  EndIf
  Stop3D()
  
  
  ;**********tracé des trajectoires**********
  StartDrawing(SpriteOutput(#spr_calque))
   
  If x_mars>1 And x_mars<760 And y_mars>1 And y_mars<734
    Plot(x_mars+16,y_mars+16,RGB($FF,$0,$0));tracé en rouge de la trajectoire
  Else 
    trace=0; interdiction de tracer
  EndIf

StopDrawing()

If trace=1      ;on trace    
    DisplayTransparentSprite(#spr_calque,0 ,0)
 Else
  CopySprite(#spr_calquevierge,#spr_calque); ou on efface!
EndIf


   FlipBuffers ()
    
    
    
  ForEver

Si vous avez des idées pour améliorer, lachez-vous!



A+

Publié : sam. 07/janv./2006 23:42
par Heis Spiter
Pour mettre une image en ligne, utilise les services d'up d'image (comme ImageShack, Kiboox, ImageDream, HeisSpiter.net ( :lol: )), puis utilises les balises

Code : Tout sélectionner

[img]http://urldel'image[/img]

Tentative n°1 d'envoi d'image

Publié : dim. 08/janv./2006 0:55
par Huitbit
Danke schön Heis Spiter!

J'ai pas tout compris, mais j'espère que ça va marcher!


Image de Mars
Image

image de la Terre
Image

Fond d'écran(de très mauvaise qualité) mais plus léger!!
Image


Hasta la vista!

Publié : dim. 08/janv./2006 11:01
par Good07
Bonjour.

Génial ce programme et en en plus c'est joli ! :D

Vous vous rendez compte si Galilé ou Newton avaient eu PureBasic ! :D

Je vois que tu t'intérresses pas mal à l'astronomie.
J'ai vu ton programme des phases de la lune qui est très bien et très instructif (ceux de Cédéravic et de Dobro aussi d'ailleurs).
Je désirerai un petit conseil sur le problème suivant:
Je voudrai éditer un calendrier lunaire qui donnerai la phase de la lune au jour le jour. Mais je ne calcule que la position du soleil et celle de la lune. Mon observateur est fixe par exemple à Paris à 2°20 de longitude et 48°50 de latitude. Comment dessiner la phase dans ce cas là ?
J'avoue que la-dessus je sèche. :oops:

Merci pour ta réponse.

A+

André.

Publié : dim. 08/janv./2006 12:11
par cederavic
Désolé Good07 je peux pas t'aider :s

Huibit, voilas un petit truc tout bete pour avoir un traçage parfait du trajet de mars (commentaire lignes 224 et 261)

Code : Tout sélectionner

;**********rétrogradation de Mars**********
;**********constantes*********
#Pi = 3.1415927
#rayon_terre=6.38
#orbite_terre=1
#periode_terre=1
#rayon_mars=3.40
#orbite_mars=1.524
#periode_mars= 1.88

Enumeration
  #spr_background
  #spr_terre
  #spr_ombreterre
  #spr_miniterre
  #spr_mars
  #spr_ombremars
  #spr_minimars
  #spr_calque
  #spr_calquevierge
  EndEnumeration

;**********variables**********
  angle.f=0
  inc_angle.f=0.8
   angle_mars.f=25.9
  x_terre.f=0
  y_terre.f=0
  x_miniterre.f=0
  y_miniterre.f=0
  x_mars.f=0
  y_mars.f=0
  x_minimars.f=0
  y_minimars.f=0
  trace.l=0
  Pause.l=0
  ;**********initialisation**********
  InitSprite()
  InitSprite3D()
  InitKeyboard()
 
  OpenWindow(1,0,0,1024,768,#PB_Window_ScreenCentered| #PB_Window_BorderLess,"Rétrogradation de la planète Mars")
  OpenWindowedScreen(WindowID(1),0,0,1024,736,0,0,0)
  UsePNGImageDecoder()
  LoadFont(1,"Papyrus",11,#PB_Font_HighQuality)
  ;**********fond d'écran**********
  CreateSprite(#spr_background,1024,736)
  StartDrawing(SpriteOutput(#spr_background))
  For etoile =0 To 1000  ;étoiles du cadre principal 
    x_etoile=Random(758)+5
    y_etoile=Random(726)+5
    Plot(x_etoile,y_etoile,RGB(Random(10)+240,Random(10)+240,Random(10)+240))
  Next etoile
 
  For etoile=0 To 100 ;étoiles du petit cadre
    x_etoile=Random(250)+773
    y_etoile=Random(246)+5
    Plot(x_etoile,y_etoile,RGB(Random(10)+240,Random(10)+240,Random(10)+240))
  Next etoile
  Circle(896,128,32,RGB($FF,$FF,$0));dessin du mini soleil
  Circle(896,128,24,RGB($FF,$FF,$80))
  Circle(896,128,16,RGB($FF,$FF,$BF))
  Box(768,256,256,256,RGB($0,$80,$80));zone d'infos sur la Terre
  Box(768,512,256,224,RGB($80,$40,$40));zone d'infos sur Mars
  StopDrawing()
 
 
 ;********** sprite Terre**********
  LoadSprite(#spr_terre,"terre.png",#PB_Sprite_Texture)
  CreateSprite3D(#spr_terre,#spr_terre)
 
 
 ;**********sprite ombre terre******
  CreateSprite(#spr_ombreterre,64,64,#PB_Sprite_Texture)
  StartDrawing(SpriteOutput(#spr_ombreterre))
  DrawingMode(4);dessine sans remplir les surfaces
  Circle(32,32,32,RGB($23,$23,$23))
  Line(32,0,0,64,RGB($23,$23,$23))
  FillArea(33,32,RGB($23,$23,$23),RGB($23,$23,$23))
  StopDrawing()
  CreateSprite3D(#spr_ombreterre,#spr_ombreterre)
 
 
  ;**********sprite miniterre**********
  CreateSprite(#spr_miniterre,16,16,#PB_Sprite_Texture)
   StartDrawing(SpriteOutput(#spr_miniterre))
  DrawingMode(4);dessine sans remplir les surfaces
  Circle(8,8,8,RGB($0,$40,$80))
  Line(8,0,0,16,RGB($0,$40,$80))
   FillArea(9,8,RGB($0,$40,$80),RGB($0,$40,$80))
  FillArea(7,8,RGB($0,$40,$80),RGB($0,$FF,$FF))
  StopDrawing()
  CreateSprite3D(#spr_miniterre,#spr_miniterre)
  ;********** sprite mars*********
  LoadSprite(#spr_mars,"mars.png",#PB_Sprite_Texture)
  CreateSprite3D(#spr_mars,#spr_mars)
 
  ;**********sprite ombre mars******
  CreateSprite(#spr_ombremars,32,32,#PB_Sprite_Texture)
  StartDrawing(SpriteOutput(#spr_ombremars))
  DrawingMode(4);dessine sans remplir les surfaces
  Circle(16,16,15,RGB($23,$23,$23))
  Line(16,0,0,32,RGB($23,$23,$23))
  FillArea(17,16,RGB($23,$23,$23),RGB($23,$23,$23))
  StopDrawing()
  CreateSprite3D(#spr_ombremars,#spr_ombremars)
 
 
  ;**********sprite minimars**********
  CreateSprite(#spr_minimars,8,8,#PB_Sprite_Texture)
   StartDrawing(SpriteOutput(#spr_minimars))
  DrawingMode(4);dessine sans remplir les surfaces
  Circle(4,4,4,RGB($80,$40,$40))
  Line(4,0,0,8,RGB($80,$40,$40))
  FillArea(5,4,RGB($80,$40,$40),RGB($80,$40,$40))
  FillArea(3,4,RGB($80,$40,$40),RGB($FF,$0,$0))
  StopDrawing()
  CreateSprite3D(#spr_minimars,#spr_minimars)
  ;**********sprite calque**********
  CreateSprite(#spr_calque,768,736)
  ;**********sprite calque vierge**********
  CreateSprite(#spr_calquevierge,768,736)
 ;*********boutons de commande**********
  CreateGadgetList(WindowID(1))
  ButtonGadget(1,0,736,90,32,"Quitter" )
  ButtonGadget(2,90,736,90,32,"Tracer / Effacer")
  ButtonGadget(3,180,736,90,32,"Pause / Reprise")
  ButtonGadget(4,270,736,55,32,"Ralentir")
  ButtonGadget(5,325,736,55,32,"Accélérer")
  ;**********programme principal*********
  Repeat ; boucle principale
   
    Repeat
      event = WindowEvent()
     
      Select event
       
        Case #PB_EventGadget
          Select EventGadgetID()
            Case 1
              End
            Case 2
              trace=trace+1
              If trace>1
                trace=0
              EndIf
            Case 3
              Pause=Pause+1
              If Pause>1
                Pause=0
                inc_angle=0.8
              EndIf
            Case 4
              If inc_angle>0.4
                inc_angle=inc_angle-0.2
              Else
                inc_angle=0.2
              EndIf
            Case 5
              If inc_angle <2
                inc_angle=inc_angle+0.2
              Else
                inc_angle=2
              EndIf
             
             
          EndSelect
         
      EndSelect
     
    Until event = #Null
   
    If Pause=0
    angle=angle+inc_angle
    If angle>=36000 ; observation sur un siècle
      angle=0
    EndIf
  EndIf
  ;*********fond d'écran**********
  DisplaySprite(#spr_background,0,0)
 
  ;**********infos sur les deux planètes**********
  StartDrawing(ScreenOutput())
 
  DrawingFont(FontID())
  FrontColor(255,255,255)
  DrawingMode(1)
  Locate(768,256)
  DrawText(" Planète Terre   "+Str(Int(365.25*angle/360))+" jours     ( "+Str(Int(angle/360))+" an(s))")
 
  Locate(768,296)
  DrawText(" Rayon terrestre = 6380 km")
 
  Locate(768,336)
  DrawText(" Jour sidéral = 23h 56min 4s  ")
  Locate(768,356)
  DrawText(" ( mouvement ralenti sur l'écran )")
  Locate(768,396)
  DrawText(" Période de révolution T = 365,25 jours")
  Locate(768,436)
  DrawText(" Déphasage  Mars / Terre: ")
 
  Locate(768,456)
  DrawText(" 25,9°  le 7 janvier 2006 ")
 
  Locate(768,512)
  DrawText(" Planète Mars   ")
 
  Locate(768,552)
  DrawText(" Rayon martien = 3400 km")
 
  Locate(768,592)
  DrawText(" Jour sidéral = 24h 37min 23s  ")
  Locate(768,612)
  DrawText(" ( mouvement ralenti sur l'écran )")
  Locate(768,652)
  DrawText(" Période de révolution T = 687 jours")
  StopDrawing()
  ;**********calcul des trajectoires**********
    x_miniterre=64*#orbite_terre*Cos(-angle*#Pi/180)+888
    y_miniterre=64*#orbite_terre*Sin(-angle*#Pi/180)+120
    x_minimars=64*#orbite_mars*Cos(-angle*#Pi/(180*1.88)+angle_mars)+892
    y_minimars=64*#orbite_mars*Sin(-angle*#Pi/(180*1.88)+angle_mars)+124
    ; ***
    ; On stock l'ancienne position de mars
    ; ***
    oldx_mars = x_mars
    oldy_mars = y_mars
    x_mars=2.1*(x_minimars-x_miniterre)+360
    y_mars=2.1*(y_minimars-y_miniterre)+360
    ;**********affichage des sprites et rotation*********
    Start3D()
    Sprite3DQuality(1)
    RotateSprite3D(#spr_terre,-angle*4,0)
    RotateSprite3D(#spr_mars,-angle*1.02877*4,0)
    RotateSprite3D(#spr_ombreterre,-angle,0)
    RotateSprite3D(#spr_ombremars,-angle/1.88,0)
    RotateSprite3D(#spr_miniterre,-angle,0)
    RotateSprite3D(#spr_minimars,-angle/1.88,0)
   
   
    DisplaySprite3D(#spr_miniterre,x_miniterre,y_miniterre)
    DisplaySprite3D(#spr_minimars,x_minimars,y_minimars)
   
    Sprite3DBlendingMode(5,3);mixage des sprites pour effet d'ombre
 
  DisplaySprite3D(#spr_terre,352,352)
  DisplaySprite3D(#spr_ombreterre,352,352)
  If x_mars<752
  DisplaySprite3D(#spr_mars,x_mars,y_mars)
  DisplaySprite3D(#spr_ombremars,x_mars,y_mars)
  EndIf
  Stop3D()
 
 
  ;**********tracé des trajectoires**********
  StartDrawing(SpriteOutput(#spr_calque))
   
  If x_mars>1 And x_mars<760 And y_mars>1 And y_mars<734
    ;Plot(x_mars+16,y_mars+16,RGB($FF,$0,$0));tracé en rouge de la trajectoire
    ; ***
    ; On trace une ligne de l'ancienne position à la position actuelle
    ; Comme ça on a pas de trous contrairement au plot
    ; ***
    LineXY(oldx_mars+16, oldy_mars+16, x_mars+16, y_mars+16, #Red)
  Else
    trace=0; interdiction de tracer
  EndIf

StopDrawing()

If trace=1      ;on trace   
    DisplayTransparentSprite(#spr_calque,0 ,0)
 Else
  CopySprite(#spr_calquevierge,#spr_calque); ou on efface!
EndIf


   FlipBuffers ()
   
   
   
  ForEver

Publié : dim. 08/janv./2006 13:20
par lionel_om
J'ai l'impression que la rotation du sprite de la lune est fausse. le trait de l'ombre ne devrait pas être perpendiculaire avec sa distance au soleil ?
(j'ai pas de grandes connaissances en astro, mais juste celles de physique et ma logique...)

Psst Yoyo, c'est pas la Lune!!!

Publié : dim. 08/janv./2006 17:00
par Huitbit
Merci Cédéravic

@Good07
(Je ne suis pas un spécialiste!)
Tu as pu remarquer que sur les calendriers, ils ne tenaient pas compte de l'inclinaison des phases de la Lune!
En fait l'axe de la Terre est incliné sur le plan de l'écliptique (environ 24°) et le plan de l'orbite de la Lune fait un angle d'environ 5° avec celui du plan de l'écliptique( plan dans lequel se ballade la Terre)!

Bilan il faudrait passer à 3 dimensions et là c'est chaud!!

Par contre si on ne tient pas compte des 5° on peut arriver à quelque chose de pas trop compliqué!

Pour synchroniser l'angle de rotation de la Terre avec le calendrier, il suffit de dire que 365,25 jours correspondent à 360°, ensuite il faut en fonction du nombre de jours faire correspondre les mois du calendrier (si jour>31 alors mois=janvier etc)

Ensuite ici je pense qu'il n'y a que la latitude qui nous interesse si on ne s'occupe que de l'inclinaison du croissant (en Guadeloupe par exemple, la Lune sourit!).
Par contre si tu veux les heures de lever et de coucher il faudra tenir compte de la longitutude.

Dans la semaine je vais essayer de faire ça(j'ai 4 gros paquets de copies alors c'est un peu chaud)!

@LionelOM

Je pense que c'est juste un affaire d'échelle.
Il ne faut pas oublier que le Soleil effectue une rotation autour de laTerre(sur le grand écran , sur le petit, c'est la Terre qui tourne autour du Soleil!).Donc il se ballade des fois entre Mars et la Terre et des fois autour d'elles!
Sur le petit écran tu peux voir où est le Soleil(fais pause et surveille)
Ce qui est trompeur, cest la taille exagérée des planètes!


A+

OOOOOOOuupss!! Désolé LIONEL_OM

Publié : dim. 08/janv./2006 17:36
par Huitbit
Y a bien un truc qui cloche :oops:


"angle_mars" est resté en degrés dans le cos et le sin!

Je vais corriger!!!! :oops:

Correction

Publié : dim. 08/janv./2006 17:45
par Huitbit
Voilà pour les trajectoires:

Code : Tout sélectionner

 ;**********calcul des trajectoires********** 
  x_miniterre=64*#orbite_terre*Cos(-angle*#pi/180)+888 
  y_miniterre=64*#orbite_terre*Sin(-angle*#pi/180)+120 
  x_minimars=64*#orbite_mars*Cos(-((angle/1.88)*#pi/180+angle_mars*#pi/180))+892 
  y_minimars=64*#orbite_mars*Sin(-((angle/1.88)*#pi/180 +angle_mars*#pi/180))+124 
  ; *** 

voilà pour les rotation

Code : Tout sélectionner

;**********affichage des sprites et rotation********* 
  Start3D() 
  Sprite3DQuality(1) 
  RotateSprite3D(#spr_terre,-angle*4,0) 
  RotateSprite3D(#spr_mars,-angle*1.02877*4,0) 
  RotateSprite3D(#spr_ombreterre,-angle,0) 
  RotateSprite3D(#spr_ombremars,-(angle/1.88+angle_mars),0) 
  RotateSprite3D(#spr_miniterre,-angle,0) 
  RotateSprite3D(#spr_minimars,-(angle/1.88+angle_mars),0) 
  

Voilà pour LIONEL_OM
Encore une fois...désolé! :oops:

Publié : lun. 09/janv./2006 13:30
par lionel_om
C'est pas grave :wink:

J'aurai très bien pu me tromper..., même si ca m'aurai paru bizarre, mais bon je suis pas un boss pour ce qu'est la diffraction de la lumière donc...

:wink: