Page 1 sur 1

Un p'tit arc-en-ciel, ça peut servir !

Publié : mer. 28/janv./2009 3:08
par Huitbit
Hello,
J'avais besoin d'un arc-en-ciel pour un petit utilitaire que je posterai bientôt (ça sera la surprise :D , d'ailleurs cet utilitaire va être utilisé pour un jeu que je posterai "un peu" plus tard :lol: ).
Alors j'ai fait au pif car je ne connais pas le lien entre le système RGB et les longueurs d'ondes. De toute façon, c'est juste esthétique. Il y a deux méthodes. La première donne de meilleurs résultats mais j'ai laissé la deuxième pour ceux qui aiment jouer avec les sinus !

Code : Tout sélectionner

;arc-en-ciel
;auteur Huitbit
;PureBasic 4.30 (Windows - x86)
#Largeur=1024
#Hauteur=200
decalage.l=Round(#Largeur/5,#PB_Round_Nearest)

If OpenWindow(0, 0, 0, #Largeur, #Hauteur, "Arc-en-ciel", #PB_Window_SystemMenu )
  If StartDrawing(WindowOutput(0))
    
    ;PREMIERE METHODE
    For x=0 To decalage
      Line(x,0,0,#Hauteur*0.5,RGB(255,x*255/decalage,0))
      Line(x+decalage,0,0,#Hauteur*0.5,RGB(255-x*255/decalage,255,0))
      Line(x+2*decalage,0,0,#Hauteur*0.5,RGB(0,255,x*255/decalage))
      Line(x+3*decalage,0,0,#Hauteur*0.5,RGB(0,255-x*255/decalage,255))
      Line(x+4*decalage,0,0,#Hauteur*0.5,RGB(x*255/decalage,0,255))
    Next x
    
    ;DEUXIEME METHODE
    periode.l=6*decalage
    For t=0 To #Largeur
      Line(t,#Hauteur*0.5,0,#Hauteur*0.5,RGB(Int(128+127*Cos(2*#PI*t/periode)),Int(128+127*Cos(2*#PI*(t-2*decalage)/periode)),Int(128+127*Cos(2*#PI*(t-4*decalage)/periode))))
    Next t
    StopDrawing()   
  EndIf
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Si vous avez des codes sur les arc-en-ciels n'hésitez pas !

Hasta la vista !

Publié : mer. 28/janv./2009 9:20
par Kwai chang caine
Dis donc ton arc en ciel, il est emprisonné dans un carré qui ressemble à une fenetre windows :lol:
Super effet merci de l'avoir partagé.

Tu n'as pas trahi ta réputation de matheux dans le forum avec ce code 8)

Publié : mer. 28/janv./2009 9:37
par jbernard13
merci pour ton code
cela peux servir

Publié : mer. 28/janv./2009 11:07
par Frenchy Pilou
j'ai déjà vu ces couleurs quelque part :lol:

Allez, zou, soyons fous !

Publié : mer. 28/janv./2009 12:47
par Huitbit
Je "m'étions" mal exprimé :lol:
Je voulais dire "couleurs" de l'arc-en-ciel !
Voilà un arc-en-ciel(un peu rustique :roll: ) à "affiner" :wink: !

Code : Tout sélectionner

;arc-en-ciel 
;auteur Huitbit 
;PureBasic 4.30 (Windows - x86) 
#Largeur=1024
#Hauteur=#Largeur*0.5
decalage.l=Round(#Largeur/5,#PB_Round_Nearest) 

If OpenWindow(0, 0, 0, #Largeur, #Hauteur, "Arc-en-ciel", #PB_Window_SystemMenu ) 
  If StartDrawing(WindowOutput(0)) 
  
    Box(0,0,#Largeur,#Hauteur,RGB(0,0,0))
    
    ;ARC-EN-CIEL
    #rayon_interne=#Largeur/2
    For rayon=0 To decalage
      DrawingMode(#PB_2DDrawing_Outlined   )
      Circle(#Largeur*0.5,#Hauteur,(#rayon_interne+rayon)/4,RGB(255,rayon*255/decalage,0)) 
      Circle(#Largeur*0.5,#Hauteur,(decalage+#rayon_interne+rayon)/4,RGB(255-rayon*255/decalage,255,0)) 
      Circle(#Largeur*0.5,#Hauteur,(2*decalage+#rayon_interne+rayon)/4,RGB(0,255,rayon*255/decalage)) 
      Circle(#Largeur*0.5,#Hauteur,(3*decalage+#rayon_interne+rayon)/4,RGB(0,255-rayon*255/decalage,255)) 
      Circle(#Largeur*0.5,#Hauteur,(4*decalage+#rayon_interne+rayon)/4,RGB(rayon*255/decalage,0,255)) 
    Next rayon 
    StopDrawing()    
  EndIf 
  
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow 
EndIf
Hasta la vista !

Publié : mer. 28/janv./2009 16:02
par Le Soldat Inconnu
ou plus rapide

je passe par une table de couleur précalculé
et surtout sans cacul de type multiplication division a tout va.

ensuite, j'affiche l'arc-en-ciel de l'extérieur vers l'intérieur de manière a faire des cercle plein
ca retire le problème des points noir au mileiu de l'arc-en-ciel

Code : Tout sélectionner

#Largeur=500
#Hauteur=500

If OpenWindow(0, 0, 0, #Largeur, #Hauteur, "Arc-en-ciel", #PB_Window_SystemMenu ) 
  
  ; Création de la table de couleur
  TableCouleur_Taille = 255 * 6
  Dim TableCouleur(TableCouleur_Taille)
  Rouge = 255
  Vert = 0
  Bleu = 0
  For Index = 0 To TableCouleur_Taille
    TableCouleur(Index) = RGB(Rouge, Vert, Bleu)
    If Index >= 255 * 5
      Bleu - 1
    ElseIf Index >= 255 * 4
      Rouge + 1
    ElseIf Index >= 255 * 3
      Vert - 1
    ElseIf Index >= 255 * 2
      Bleu + 1
    ElseIf Index >= 255
      Rouge - 1
    Else
      Vert + 1
    EndIf
  Next
  
  If StartDrawing(WindowOutput(0)) 
      Box(0, 0, #Largeur, #Hauteur, 0) ; Fond noir
      
      RayonMax = 200
      RayonMin = 100
      Rapport.f = TableCouleur_Taille / (RayonMax - RayonMin)
      
      For Index = RayonMax To RayonMin Step -1
        Circle(#Largeur / 2, #Hauteur, Index, TableCouleur(Int((Index - RayonMin) * Rapport)))
      Next
      Circle(#Largeur / 2, #Hauteur, RayonMin - 1, 0) ; Noir au centre
      
      
    StopDrawing()    
  EndIf 
  
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow 
EndIf

Publié : mer. 28/janv./2009 23:44
par Huitbit
OooOOOOooh, joli :P !

Bien vu le tableau!

Hasta la vista !