Algo Black Hole Spiral

Sujets variés concernant le développement en PureBasic
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Algo Black Hole Spiral

Message par Thyphoon »

Il me semble avoir vu il y a longtemps un code qui permettait de faire une spirale style trou noir, calculé en temps réel dans le pure style demo...
Mais impossible de remettre la main dessus.
J'aurais voulu essayé de l'adapté pour essayer de rendre une image de ce genre...enfin en moin précis .... :P
A defaut si quelqu'un sait ou trouver un algo pour tracer une spirale je réinventerais la roue ... :P
Image
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: Algo Black Hole Spiral

Message par Thyphoon »

J'ai trouvé un algo ! reste a trouvé comment l'utilisé ... Qu'est ce que je regrette de ne pas avoir été meilleur en math a l'école lollllllll

Code : Tout sélectionner

http://fr.wikipedia.org/wiki/Spirale_logarithmique
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Algo Black Hole Spiral

Message par Backup »

....
Dernière modification par Backup le mar. 19/août/2014 12:02, modifié 1 fois.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Algo Black Hole Spiral

Message par Backup »

....
Dernière modification par Backup le mar. 19/août/2014 12:02, modifié 1 fois.
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Algo Black Hole Spiral

Message par Ar-S »

Dobro t'ajoutes un message subliminale et ta spirale deviendra une arme digne de 007 :mrgreen:
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Algo Black Hole Spiral

Message par Backup »

:lol: :lol:


j'ai modifié le dernier code pour afficher une ligne a la place :)

apres ben faudrai faire un affichage complexe de texture
et on pourra la faire sa galaxie :)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Algo Black Hole Spiral

Message par Backup »

....
Dernière modification par Backup le mar. 19/août/2014 12:03, modifié 1 fois.
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: Algo Black Hole Spiral

Message par Thyphoon »

C'est plus qu'un debut de reponse Dobro. Merci beaucoup !
j'ai croisé ton code avec ce que j'avais fait ....

c'est pas tout a fait ça encore, mais commence a y ressembler, ça tourne dans le mauvais , sence, et le "design" n'est pas encore faire.
Bon je dois me rendre a mon boulot maintenant donc ça sera pour plus tard ....

Code : Tout sélectionner

; code by Dobro http://michel.dobro.free.fr/

#dobro=1
#Police=1
#sprite=1
; ***********************************
Resultat = InitSprite()
FontID = LoadFont(#Police, "arial", 50, #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, "hello", #PB_Window_SystemMenu|#PB_Window_BorderLess |#PB_Window_ScreenCentered )
    WindowID = WindowID(1)
    Result = OpenWindowedScreen(WindowID,0,0, EcranX, EcranY, 1, 0,0)
    Resultat = InitMouse()
    
    Structure MyHole
    Rayon.l
    EndStructure
    Global NewList MyHole.MyHole()
    For z=1 To 640 Step 4
      AddElement(MyHole())
      MyHole()\Rayon=640-z
    Next
   
   
   
    Repeat
        ExamineMouse()
        Event=WaitWindowEvent()
        ClearScreen(RGB(0,0,0)) ;  *****<------- si tu Rem ceci le sprite laisse une trace :D
        StartDrawing( ScreenOutput()) 
        
        t.f=ElapsedMilliseconds()/10000

ForEach MyHole()
  CordX=640
  CordY=480
  x=CordX+MyHole()\Rayon*Cos(-t+ListIndex(MyHole())/10)
  y=CordY+MyHole()\Rayon/2*Sin(-t+ListIndex(MyHole())/10)
  x2=CordX+MyHole()\Rayon*Cos(#PI+-t+ListIndex(MyHole())/10)
  y2=CordY+MyHole()\Rayon/2*Sin(#PI+-t+ListIndex(MyHole())/10)
  x3=CordX+MyHole()\Rayon*Cos(#PI/2+-t+ListIndex(MyHole())/10)
  y3=CordY+MyHole()\Rayon/2*Sin(#PI/2+-t+ListIndex(MyHole())/10)
  x4=CordX+MyHole()\Rayon*Cos(#PI+#PI/2+-t+ListIndex(MyHole())/10)
  y4=CordY+MyHole()\Rayon/2*Sin(#PI+#PI/2+-t+ListIndex(MyHole())/10)

Circle(x,y,5,$ffffff)
Circle(x2,y2,5,$ffffff)
Circle(x3,y3,5,$ffffff)
Circle(x4,y4,5,$ffffff)
Next
        StopDrawing()
        FlipBuffers():; affiche l'ecran 
     
       
       
       
        Event=WindowEvent()
        If MouseButton(2)
            End
        EndIf
    Until Event=#PB_Event_CloseWindow 
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: Algo Black Hole Spiral

Message par Thyphoon »

Thyphoon a écrit :C'est plus qu'un debut de reponse Dobro. Merci beaucoup !
j'ai croisé ton code avec ce que j'avais fait ....

c'est pas tout a fait ça encore, mais commence a y ressembler, ça tourne dans le mauvais , sence, et le "design" n'est pas encore faire.
Bon je dois me rendre a mon boulot maintenant donc ça sera pour plus tard ....
Edit : voilà ça tourne dans le bon sens et la vitesse est mieux ..... :P

Code : Tout sélectionner

; code by Dobro http://michel.dobro.free.fr/

#dobro=1
#Police=1
#sprite=1
; ***********************************
Resultat = InitSprite()
FontID = LoadFont(#Police, "arial", 50, #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, "hello", #PB_Window_SystemMenu|#PB_Window_BorderLess |#PB_Window_ScreenCentered )
    WindowID = WindowID(1)
    Result = OpenWindowedScreen(WindowID,0,0, EcranX, EcranY, 1, 0,0)
    Resultat = InitMouse()
    
    Structure MyHole
    Rayon.l
    EndStructure
    Global NewList MyHole.MyHole()
    For z=1 To 640 Step 4
      AddElement(MyHole())
      MyHole()\Rayon=640-z
    Next
   
   
   
    Repeat
        ExamineMouse()
        Event=WaitWindowEvent()
        ClearScreen(RGB(0,0,0)) ;  *****<------- si tu Rem ceci le sprite laisse une trace :D
        StartDrawing( ScreenOutput()) 
        
        t.f=ElapsedMilliseconds()/40000

ForEach MyHole()
  CordX=640
  CordY=480
  x=CordX+MyHole()\Rayon*Cos(t+ListIndex(MyHole())/10)
  y=CordY+MyHole()\Rayon/2*Sin(t+ListIndex(MyHole())/10)
  x2=CordX+MyHole()\Rayon*Cos(#PI+t+ListIndex(MyHole())/10)
  y2=CordY+MyHole()\Rayon/2*Sin(#PI+t+ListIndex(MyHole())/10)
  x3=CordX+MyHole()\Rayon*Cos(#PI/2+t+ListIndex(MyHole())/10)
  y3=CordY+MyHole()\Rayon/2*Sin(#PI/2+t+ListIndex(MyHole())/10)
  x4=CordX+MyHole()\Rayon*Cos(#PI+#PI/2+t+ListIndex(MyHole())/10)
  y4=CordY+MyHole()\Rayon/2*Sin(#PI+#PI/2+t+ListIndex(MyHole())/10)

Circle(x,y,5,$ffffff)
Circle(x2,y2,5,$ffffff)
Circle(x3,y3,5,$ffffff)
Circle(x4,y4,5,$ffffff)
Next
        StopDrawing()
        FlipBuffers():; affiche l'ecran 
     
       
       
       
        Event=WindowEvent()
        If MouseButton(2)
            End
        EndIf
    Until Event=#PB_Event_CloseWindow  
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: Algo Black Hole Spiral

Message par Thyphoon »

On s'approche du but ! voici l'image
Image

je ne sais pas trop comment faire pour que le sprite deviennent de plus en plus blanc au fur et a mesure qu'il se rapproche du centre ....
Et il me reste a placé des étoiles ...

Toute suggestion, idée, proposition est la bienvenu pour améliorer ce code !

Code : Tout sélectionner

; code by Dobro http://michel.dobro.free.fr/
UsePNGImageDecoder()
#dobro=1
#Police=1
#sprite=1
; ***********************************
InitSprite()
InitSprite3D()
InitKeyboard()
FontID = LoadFont(#Police, "arial", 50, #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, "hello", #PB_Window_SystemMenu|#PB_Window_BorderLess |#PB_Window_ScreenCentered )
    WindowID = WindowID(1)
    Result = OpenWindowedScreen(WindowID,0,0, EcranX, EcranY, 1, 0,0)
     Debug FileSize("Gfx/holehand.png")
    LoadSprite(1,"Gfx/holehand.png",#PB_Sprite_Texture|#PB_Sprite_AlphaBlending)
      CreateSprite3D(1,1)

      
    
    Structure MyHole
    Rayon.l
    EndStructure
    Global NewList MyHole.MyHole()
    NbStar=120
    For z=NbStar To 1 Step -1
      AddElement(MyHole())
      MyHole()\Rayon=Pow(z,1.3)*(EcranX/4)/(NbStar*2)
    Next
   
   
   
    Repeat
        ExamineKeyboard()
        Event=WindowEvent()
        Delay(1)
        ClearScreen(RGB(0,0,0)) ;  *****<------- si tu Rem ceci le sprite laisse une trace :D
        ;StartDrawing( ScreenOutput()) 
        Start3D()
        t.f=ElapsedMilliseconds()/10000

ForEach MyHole()
  CordX=EcranX/2
  CordY=EcranY/2
  x=CordX+MyHole()\Rayon*Cos(t+ListIndex(MyHole())/10)
  y=CordY+MyHole()\Rayon/2*Sin(t+ListIndex(MyHole())/10)
  x2=CordX+MyHole()\Rayon*Cos(#PI+t+ListIndex(MyHole())/10)
  y2=CordY+MyHole()\Rayon/2*Sin(#PI+t+ListIndex(MyHole())/10)
  x3=CordX+MyHole()\Rayon*Cos(#PI/2+t+ListIndex(MyHole())/10)
  y3=CordY+MyHole()\Rayon/2*Sin(#PI/2+t+ListIndex(MyHole())/10)
  x4=CordX+MyHole()\Rayon*Cos(#PI+#PI/2+t+ListIndex(MyHole())/10)
  y4=CordY+MyHole()\Rayon/2*Sin(#PI+#PI/2+t+ListIndex(MyHole())/10)

size=(ListSize(MyHole())-ListIndex(MyHole()))*128/ListSize(MyHole())
Angle=(ListSize(MyHole())-ListIndex(MyHole()))*360/ListSize(MyHole())
Alpha=255-((ListSize(MyHole())-ListIndex(MyHole()))*255/ListSize(MyHole()))
ZoomSprite3D(1,size,size)
RotateSprite3D(1,Angle,#PB_Absolute)
DisplaySprite3D(1,x,y,Alpha)
DisplaySprite3D(1,x2,y2,Alpha)
DisplaySprite3D(1,x3,y3,Alpha)
DisplaySprite3D(1,x4,y4,Alpha)
Next
Stop3D()
        ;StopDrawing()
        FlipBuffers():; affiche l'ecran 
     
       
       
       
        Event=WindowEvent()
         If KeyboardPushed(#PB_Key_Escape)
            End
        EndIf
    Until Event=#PB_Event_CloseWindow 
Dernière modification par Thyphoon le mar. 27/oct./2009 14:41, modifié 1 fois.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Algo Black Hole Spiral

Message par Backup »

excellent ! :)

pour tes prochains code si tu pouvais mettre

Code : Tout sélectionner

ForEach MyHole()
                CordX=EcranX/2
                CordY=EcranY/2
mes variable Ecranx et ecrany contiennent la résolution de l'ecran sur lequel
est lancé le prg , j'utilise mon nc10 (1024X600)

et si tu remplace par mes petite lignes, ça marchera chez tout le monde :)
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: Algo Black Hole Spiral

Message par Thyphoon »

Ok ! j'ai modifié dans le code précédent !
J'ai pas eu le temps de continuer dessus...mais des que je peux je vais essayer de rajouter le centre, et les etoiles.
Tu as une idée pour faire pencher la spirale comme sur le dessin posté en haut :P ? j'ai essayer mais je dois me planter dans mes calcules ...Enfin je vais voir ça ...
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Algo Black Hole Spiral

Message par Backup »

.....
Dernière modification par Backup le mar. 19/août/2014 12:03, modifié 1 fois.
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: Algo Black Hole Spiral

Message par Thyphoon »

Super merci ! Je comprends maintenant pourquoi j'y arrivait pas je rajoutais un angle a l'angle d'origine sur la spiral...donc c'est le point qui était un peu plus prêt du noyaux, mais pas la spiral en elle même qui pivotait...
J'ai fait une petite correction sur ton code pour centrer notre superbe spiral !

et voici pour le centre de la spiral ...Image
Le hic ! je me demande si je vais pas être obligé de stocké tout les points et de les triers pour que le centre soit au centre ... a moins de trouver une astuce.
J'ai fait plein de test pour rajouter les étoiles dans les bras de la spiral mais rien de bien... que du tres moche !!! :(

En tout cas merci Dobro sans toi j'en serais pas encore là lolllllllll Je me suis vraiment rouillé en Trigo moi ! :oops:

Code : Tout sélectionner

UsePNGImageDecoder()
#dobro=1
#Police=1
#sprite=1
; ***********************************
InitSprite()
InitSprite3D()
InitKeyboard()
FontID = LoadFont(#Police, "arial", 50, #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, "hello", #PB_Window_SystemMenu|#PB_Window_BorderLess |#PB_Window_ScreenCentered )
    WindowID = WindowID(1)
    Result = OpenWindowedScreen(WindowID,0,0, EcranX, EcranY, 1, 0,0)
     Debug FileSize("Gfx/holehand.png")
    LoadSprite(1,"Gfx/holehand.png",#PB_Sprite_Texture|#PB_Sprite_AlphaBlending)
    CreateSprite3D(1,1)
    LoadSprite(2,"Gfx/sun.png",#PB_Sprite_Texture|#PB_Sprite_AlphaBlending)
    CreateSprite3D(2,2)

      
    
    Structure MyHole
    Rayon.l
    EndStructure
    Global NewList MyHole.MyHole()
    NbStar=120
    For z=NbStar To 1 Step -1
      AddElement(MyHole())
      MyHole()\Rayon=Pow(z,1.3)*(EcranX/4)/(NbStar*2)
    Next
   
   degres=-15
   Coef=10
    Repeat
        ExamineKeyboard()
        Event=WindowEvent()
        Delay(1)
        ClearScreen(RGB(0,0,0)) ;  *****<------- si tu Rem ceci le sprite laisse une trace :D
        ;StartDrawing( ScreenOutput()) 
        Start3D()
        t.f=ElapsedMilliseconds()/10000
          CordX=EcranX/2
  CordY=EcranY/2
   
ForEach MyHole()

  x=MyHole()\Rayon*Cos(t+ListIndex(MyHole())/Coef)
  y=MyHole()\Rayon/2*Sin(t+ListIndex(MyHole())/Coef)
  x2=MyHole()\Rayon*Cos(#PI+t+ListIndex(MyHole())/Coef)
  y2=MyHole()\Rayon/2*Sin(#PI+t+ListIndex(MyHole())/Coef)
  x3=MyHole()\Rayon*Cos(#PI/2+t+ListIndex(MyHole())/Coef)
  y3=MyHole()\Rayon/2*Sin(#PI/2+t+ListIndex(MyHole())/Coef)
  x4=MyHole()\Rayon*Cos(#PI+#PI/2+t+ListIndex(MyHole())/Coef)
  y4=MyHole()\Rayon/2*Sin(#PI+#PI/2+t+ListIndex(MyHole())/Coef)

; ********* voici la formule de la rotation d'image *********
  ;<------------ en degres !!! :o)
   x= x * Cos (degres* #PI /180) +( Y)* Sin (degres* #PI /180)
   Y=x * Sin (degres* #PI /180) + (Y)* Cos (degres* #PI /180) 
             
   x2= x2 * Cos (degres* #PI /180) +( y2)* Sin (degres* #PI /180)
   y2= x2 * Sin (degres* #PI /180) + (y2)* Cos (degres* #PI /180) 
               
   x3= x3 * Cos (degres* #PI /180) +( y3)* Sin (degres* #PI /180)
   y3= x3 * Sin (degres* #PI /180) + (y3)* Cos (degres* #PI /180) 
               
   x4= x4 * Cos (degres* #PI /180) +( Y4)* Sin (degres* #PI /180)
   Y4= x4 * Sin (degres* #PI /180) + (Y4)* Cos (degres* #PI /180) 
               
              ;***************************************************** 

size=(ListSize(MyHole())-ListIndex(MyHole()))*128/ListSize(MyHole())
Angle=(ListSize(MyHole())-ListIndex(MyHole()))*360/ListSize(MyHole())
Alpha=255-((ListSize(MyHole())-ListIndex(MyHole()))*255/ListSize(MyHole()))
ZoomSprite3D(1,size,size)
RotateSprite3D(1,Angle,#PB_Absolute)
DisplaySprite3D(1,CordX+x-Size/2,CordY+y-Size/2,Alpha)
DisplaySprite3D(1,CordX+x2-Size/2,CordY+y2-Size/2,Alpha)
DisplaySprite3D(1,CordX+x3-Size/2,CordY+y3-Size/2,Alpha)
DisplaySprite3D(1,CordX+x4-Size/2,CordY+y4-Size/2,Alpha)
Next
;Sprite3DBlendingMode(12,6)
DisplaySprite3D(2,CordX-SpriteWidth(2)/2,Cordy-SpriteHeight(2)/2,255)
Stop3D()
        ;StopDrawing()
               StartDrawing(ScreenOutput())
        DrawText(10,10,Str(degres),$ffffff)
       StopDrawing()
        FlipBuffers():; affiche l'ecran 
     

        Event=WindowEvent()
         If KeyboardPushed(#PB_Key_Escape)
            End
        EndIf
        
        If KeyboardReleased(#PB_Key_Down) And degres>-45
          degres=degres-1
        EndIf 
        
        If KeyboardReleased(#PB_Key_Up) And degres<50
          degres=degres+1
        EndIf 
        
    Until Event=#PB_Event_CloseWindow
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Algo Black Hole Spiral

Message par Backup »

:) pas mal le coup des touches pour changer la rotation :)


tu sais moi la trigo j'en ai jamais fait ..
l'essai et l'erreur sont la meilleurs façon d'apprendre :)


j'ai vu que tu as ajouté une image "sun.png", tu nous la met sur le forum ? :)
Dernière modification par Backup le lun. 19/mars/2012 10:20, modifié 1 fois.
Répondre