PureBasic

Forums PureBasic
Nous sommes le Ven 18/Oct/2019 20:03

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 51 messages ]  Aller à la page Précédente  1, 2, 3, 4
Auteur Message
 Sujet du message:
MessagePosté: Mar 17/Jan/2006 1:33 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 08/Déc/2005 5:19
Messages: 936
Localisation: Guadeloupe
Psst!
Il y a deux principaux types de périodes(il y en a d'autres!!!):

la sidérale (par rapport aux étoiles lointaintes, imagine que tu te débarrasses de tout sauf de la Lune et que tu la regardes tourner, elle mettra 27j13h pour faire un tour complet)

la synodique(celle qui correspond aux phases de la lune) qui est déterminée par rapport au Soleil.
En fait c'est le temps que prend un point de la lune pour revenir à la même position par rapport au soleil. On a 29,53j car pendant le mois lunaire, la lune se déplace avec la terre et se déplace donc par rapport au soleil.

Hasta la vista

_________________
Elevé au MSX !


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: Mar 17/Jan/2006 12:48 
Hors ligne

Inscription: Lun 26/Avr/2004 0:40
Messages: 14535
ha ok ! :D


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Les phases de la Lune V1.0(ça marche mais c'est chelou!)
MessagePosté: Dim 08/Avr/2018 20:17 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 31/Mai/2016 9:06
Messages: 2090
Mise a jour de mon code plus haut


Code:


; Code par Dobro !!
; system solaire
; avec "raytracing"  pour l'affichage des parties éclairés de la lune et de la terre


Declare.f RotationX(X, angle.f, dist)
Declare.f RotationY(Y, angle.f, dist)
Declare calcul()
;#PI =3.1415926
Enumeration
      #dobro
      #Police
      #soleil
      #terre
      #lune
      #ecran
EndEnumeration

Structure soleil
      X.l
      Y.l
EndStructure
Global Dim soleil.soleil(1)

Structure lune
      X.l
      Y.l
EndStructure
Global Dim lune.lune(1)

Structure terre
      X.l
      Y.l
EndStructure
Global Dim terre.terre(1)

; ***********************************
If InitSprite()
      FontID = LoadFont ( #Police , "arial" , 18, #PB_Font_Bold )
      EcranX = GetSystemMetrics_ ( #SM_CXSCREEN ): ;=largeur de l'ecran
      EcranY = GetSystemMetrics_ ( #SM_CYSCREEN ): ;=hauteur de l'ecran
      WindowID = OpenWindow (1, 0, 0,EcranX, EcranY, "system solaire maintenir un appuis sur ESC pour quitter" ,#PB_Window_SystemMenu|#PB_Window_BorderLess |#PB_Window_ScreenCentered )
      Result = OpenWindowedScreen ( WindowID (1) ,0,0,EcranX, EcranY, 1, 0,0)
      
      Resultat = InitMouse ()
      Resultat = InitKeyboard ()
      
      ; creation de notre ecran
      CreateSprite ( #ecran , EcranX, EcranY)
      StartDrawing ( SpriteOutput ( #ecran ) )
            For etoiles=1 To 1000
                  x_etoile= Random (EcranX-10)+5
                  y_etoile= Random (EcranY-10)+5
                  Plot ( x_etoile, y_etoile, RGB ($B1,$CD,$FC))
            Next etoiles
      StopDrawing ()
      
      ; creation du soleil
      CreateSprite ( #soleil ,128,128)
      StartDrawing ( SpriteOutput ( #soleil ) ) ; on dessine dedans
            Circle (64, 64, 64 , RGB ($FF,$FF,$97))
      StopDrawing ()
      
      ; creation de la terre
      CreateSprite ( #terre , 64, 64)
      StartDrawing ( SpriteOutput ( #terre ) ) ; on dessine dedans
            Circle (32, 32, 32 , RGB ($71,$88,$F9))
      StopDrawing ()
      
      ; creation de la lune
      CreateSprite ( #lune , 32, 32)
      StartDrawing ( SpriteOutput ( #lune ) ) ; on dessine dedans
            Circle (16, 16, 16 , RGB ($A6,$A6,$A6))
      StopDrawing ()
      
      taille_du_cercle_terre=360
      taille_du_cercle_lune=100
      nombre_de_jour_terre=360 ; ceci determine la resolution (nombre de points)
      nombre_de_jour_lune=21 ; ceci determine la resolution (nombre de points)
      soleil(1)\X=EcranX/2-128
      soleil(1)\Y=EcranY/2-128
      
      Repeat
            While WindowEvent () : Wend
            ExamineMouse ()
            ExamineKeyboard ()
            WindowEvent ()
            ;Delay (2)
            
            If MouseButton (2)
                  End
            EndIf
            
            compt_terre+1
            compt_lune+1
            If compt_terre=nombre_de_jour_terre :compt_terre=0: EndIf ; on a fait le tour ??
            If compt_lune=nombre_de_jour_lune :compt_lune=0: EndIf ; on a fait le tour ??
            
            
            terre(1)\X=taille_du_cercle_terre* Cos ( compt_terre*(2*3.1415926/nombre_de_jour_terre)) + (soleil(1)\X+8 ) ; la formule du cercle /360 = 360 points
            terre(1)\Y=taille_du_cercle_terre * Sin ( compt_terre*(2*3.1415926/nombre_de_jour_terre)) + (soleil(1)\Y+8 ) ; la formule du cercle
            
            lune(1)\X=taille_du_cercle_lune* Cos ( compt_lune*(2*3.1415926/nombre_de_jour_lune)) + (terre(1)\X) ; la formule du cercle /360 = 360 points
            lune(1)\Y=taille_du_cercle_lune * Sin ( compt_lune*(2*3.1415926/nombre_de_jour_lune)) + (terre(1)\Y) ; la formule du cercle
            
            
            calcul() ; saut vers le raytracing maison :-)
            
            FlipBuffers (): ; affiche l'ecran
            ClearScreen ($0) : ;efface l'ecran
      Until Event= #PB_Event_CloseWindow
      Else
      MessageRequester("erreur","Mettez OPENGL en Sous system")
Endif
Procedure.f RotationX(X, angle.f, dist)
      ProcedureReturn X + Cos (angle.f* #PI /180)*dist
EndProcedure


Procedure.f RotationY(Y, angle.f, dist)
      ProcedureReturn Y + Sin (angle.f* #PI /180)*dist
EndProcedure

Procedure calcul()
      DisplaySprite ( #ecran , 0, 0)
      DisplayTransparentSprite ( #soleil , soleil(1)\X, soleil(1)\Y)
      DisplayTransparentSprite ( #terre , terre(1)\X, terre(1)\Y)
      DisplayTransparentSprite ( #lune , lune(1)\X, lune(1)\Y)
      lumiere= RGB ($FF,$FF,$97) ; lumiere du soleil
      StartDrawing ( ScreenOutput ())
            For i=1 To 360
                  For distance=100 To 440
                        coul= Point (RotationX(soleil(1)\X+64, i, distance) ,RotationY(soleil(1)\Y+64, i, distance))
                        If coul= RGB ($71,$88,$F9) ;la lumiere rencontre la terre
                              lumiere= RGB ($FF,$FF,$97) ; lumiere du soleil
                              Box (RotationX(soleil(1)\X+64, i, distance) , RotationY(soleil(1)\Y+64, i, distance),2,2,lumiere)
                              Box (RotationX(soleil(1)\X+64, i, distance+2) , RotationY(soleil(1)\Y+64, i, distance+2),2,2,lumiere)
                              Box (RotationX(soleil(1)\X+64, i, distance+4) , RotationY(soleil(1)\Y+64, i, distance+4),2,2,lumiere)
                              Box (RotationX(soleil(1)\X+64, i, distance+6) , RotationY(soleil(1)\Y+64, i, distance+6),2,2,lumiere)
                              Box (RotationX(soleil(1)\X+64, i, distance+8 ) , RotationY(soleil(1)\Y+64, i, distance+8 ),2,2,lumiere)
                              Box (RotationX(soleil(1)\X+64, i, distance+10) , RotationY(soleil(1)\Y+64, i, distance+10),2,2,lumiere)
                              Break 1
                        ElseIf coul= RGB ($A6,$A6,$A6) ;la lumiere rencontre la lune
                              lumiere= RGB ($FF,$FF,$97) ; lumiere du soleil
                              
                              Box (RotationX(soleil(1)\X+64, i, distance) , RotationY(soleil(1)\Y+64, i, distance),1,1,lumiere)
                              Box (RotationX(soleil(1)\X+64, i, distance+1) , RotationY(soleil(1)\Y+64, i, distance+1),1,1,lumiere)
                              Box (RotationX(soleil(1)\X+64, i, distance+2) , RotationY(soleil(1)\Y+64, i, distance+2),1,1,lumiere)
                              Box (RotationX(soleil(1)\X+64, i, distance+3) , RotationY(soleil(1)\Y+64, i, distance+3),1,1,lumiere)
                              Box (RotationX(soleil(1)\X+64, i, distance+4) , RotationY(soleil(1)\Y+64, i, distance+4),1,1,lumiere)
                              Box (RotationX(soleil(1)\X+64, i, distance+5) , RotationY(soleil(1)\Y+64, i, distance+5),1,1,lumiere)
                              Break 1
                        Else
                              lumiere= RGB ($FF,$FF,$97) ; lumiere du soleil
                              Plot(RotationX(soleil(1)\X+64, i, distance) , RotationY(soleil(1)\Y+64, i, distance),lumiere)
                        EndIf
                        If KeyboardPushed ( #PB_Key_All )
                              End
                        EndIf
                        While WindowEvent () : Wend
                  Next distance
                  flag=0
            Next i
      StopDrawing ()
EndProcedure







_________________
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"


Dernière édition par Zorro le Lun 09/Avr/2018 4:58, édité 1 fois.

Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Les phases de la Lune V1.0(ça marche mais c'est chelou!)
MessagePosté: Dim 08/Avr/2018 23:10 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 09/Oct/2005 16:51
Messages: 8768
Lorsque je lance ton prog j'ai mon GPU qui passe à 93% et la fenêtre reste vide même sans debug.. Y'a un truc qui cloche.

_________________
~~~~Règles du forum ~~~~
.: Ar-S :. Tour + portable W10 x64 PB 5.4x / 5.6x
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
RESIZER GOLD : Mon logiciel de redimensionnement par lot 100% PB


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Les phases de la Lune V1.0(ça marche mais c'est chelou!)
MessagePosté: Lun 09/Avr/2018 4:53 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 31/Mai/2016 9:06
Messages: 2090
Pour que ça marche il faut choisir "OPENGL" en sous system :)

ça reste lent, car la procedure Calcul est effectué en temps réel , pas de précalcul
et il y a la fonction point() qui regarde si les rayons du soleil touchent la lune ou la terre ....
une forme de "Raytracing" du pauvre :)


c'est un vieux code que j'ai remis a PB 5.62
j'ai ajouté un Requester() pour signaler qu'il faut passer en 'OpenGL' :)

par contre,ne me demande pas pourquoi ça ne marche pas en DirectX ou sans rien ...
dans le temps on n'avait pas ce genre de probleme :roll:

entre ça et les problemes soulevés par unicod , je suis pas sur qu'on va dans le bon sens :lol:

_________________
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Les phases de la Lune V1.0(ça marche mais c'est chelou!)
MessagePosté: Lun 09/Avr/2018 8:05 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 09/Oct/2005 16:51
Messages: 8768
vivement DirectX Raytracing

En OpenGl c'est très fluide si on vire le debugger.
P.S : Ce serait bien de pouvoir imposer dans le code le sous système genre :
Code:
Select SubSystem()
case #PB_SubSystem_OpenGl
...
case #PB_SubSystem_Dx9
...
endselect

_________________
~~~~Règles du forum ~~~~
.: Ar-S :. Tour + portable W10 x64 PB 5.4x / 5.6x
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
RESIZER GOLD : Mon logiciel de redimensionnement par lot 100% PB


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 51 messages ]  Aller à la page Précédente  1, 2, 3, 4

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 4 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye