Rétrogradation Mars!

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Huitbit
Messages : 940
Inscription : jeu. 08/déc./2005 5:19
Localisation : Guadeloupe

Rétrogradation Mars!

Message 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+
Elevé au MSX !
Heis Spiter
Messages : 1092
Inscription : mer. 28/janv./2004 16:22
Localisation : 76
Contact :

Message 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]
Heis Spiter, webmaster du site http://www.heisspiter.net
Développeur principal et administrateur du projet Bird Chat
Parti courir au bonheur du dév. public et GPL :D
Avatar de l’utilisateur
Huitbit
Messages : 940
Inscription : jeu. 08/déc./2005 5:19
Localisation : Guadeloupe

Tentative n°1 d'envoi d'image

Message 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!
Elevé au MSX !
Good07
Messages : 308
Inscription : ven. 23/avr./2004 18:08
Localisation : Hérault 34190 Laroque

Message 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é.
Avatar de l’utilisateur
cederavic
Messages : 1338
Inscription : lun. 09/févr./2004 23:38
Localisation : Bordeaux

Message 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
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message 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...)
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Avatar de l’utilisateur
Huitbit
Messages : 940
Inscription : jeu. 08/déc./2005 5:19
Localisation : Guadeloupe

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

Message 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+
Elevé au MSX !
Avatar de l’utilisateur
Huitbit
Messages : 940
Inscription : jeu. 08/déc./2005 5:19
Localisation : Guadeloupe

OOOOOOOuupss!! Désolé LIONEL_OM

Message 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:
Elevé au MSX !
Avatar de l’utilisateur
Huitbit
Messages : 940
Inscription : jeu. 08/déc./2005 5:19
Localisation : Guadeloupe

Correction

Message 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:
Elevé au MSX !
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message 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:
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Répondre