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

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

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

Message 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 !
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message 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)
jbernard13
Messages : 1501
Inscription : dim. 18/avr./2004 15:04
Localisation : sud de la france

Message par jbernard13 »

merci pour ton code
cela peux servir
Frenchy Pilou
Messages : 2194
Inscription : jeu. 27/janv./2005 19:07

Message par Frenchy Pilou »

j'ai déjà vu ces couleurs quelque part :lol:
Avatar de l’utilisateur
Huitbit
Messages : 940
Inscription : jeu. 08/déc./2005 5:19
Localisation : Guadeloupe

Allez, zou, soyons fous !

Message 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 !
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message 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
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
Huitbit
Messages : 940
Inscription : jeu. 08/déc./2005 5:19
Localisation : Guadeloupe

Message par Huitbit »

OooOOOOooh, joli :P !

Bien vu le tableau!

Hasta la vista !
Répondre