Exploration spirale de nombres premiers

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Exploration spirale de nombres premiers

Message par djes »

Suite à vos petits délires sur les nombres premiers, je me suis mis à imaginer un moyen de trouver des motifs de ces nombres dans une structure 2D (en attendant mieux...). J'ai imaginé la spirale mais bien sûr quelqu'un l'a déjà fait : http://www.numberspiral.com/index.html. Cependant, j'ai bricolé pour pouvoir jouer dynamiquement sur les paramètres de la spirale. Si vous trouvez le motif magique, ne m'oubliez pas ;)

Code : Tout sélectionner

;**********************************
;
; Primes numbers spiral exploration
; 26/05/2011
; by djes (djes@free.fr)
; Thx to Sirius-2337, Demivec, Gnasen for IsPrime optim
; Thx to DjPoke, Fig, zaphod, graph100, LSI & Nat the Great for LookForPrimes() optim
;
;**********************************

Global PrimesNb, ww, wh, GadgetAngle, GadgetDeviation, TextFlag
Global Dim Primes(80000)

Procedure IsPrime(number.l)

  If number = 2
    ProcedureReturn 1
  ElseIf number % 2 = 0
    ProcedureReturn 0
  Else
    x = Sqr(number)
    For t = 3 To x Step 2
      If number % t = 0
        ProcedureReturn 0
      EndIf
    Next t
  EndIf

  ProcedureReturn 1

EndProcedure

Procedure SpiralDraw()
 
  cx = ww / 2 - 20 : cy = wh / 2
 
  Angle.d = #PI / (GetGadgetState(0) / 100)
  Deviation.d = #PI / (GetGadgetState(1) / 10 )
 
  i.d = 0
  e.d = 0
  ;PreviousPrime = 0
  StartDrawing(ImageOutput(0))
  Box(0, 0, ww - 40, wh, $FFFFFF)
  If TextFlag
    DrawingMode(#PB_2DDrawing_Transparent|#PB_2DDrawing_XOr)
    For u = 0 To PrimesNb - 1
      x = cx + e * Sin(i)
      y = cy + e * Cos(i)
      DrawText(x, y, Str(Primes(u)), RGB($FF, $FF, 0))
      i = Angle * Primes(u)
      ;e = Deviation * Primes(u) ;deviation from the center is based on the prime value
      e + Deviation              ;deviation is linear
    Next u
  EndIf
 
  i.d = 0
  e.d = 0
  DrawingMode(#PB_2DDrawing_Default)
  For u = 0 To PrimesNb - 1
    x = cx + e * Sin(i)
    y = cy + e * Cos(i)
    If x >= 0 And x < ww - 40 And y >= 0 And y < wh
      Plot(x, y, 0)
    EndIf
    i = Angle * Primes(u)
    ;e = Deviation * Primes(u) ;deviation from the center is based on the prime value
    e + Deviation              ;deviation is linear
    ;PreviousPrime = Primes(u)
  Next u

  StopDrawing()
  StartDrawing(WindowOutput(0))
  DrawImage(ImageID(0), 0, 0)
  DrawText(0,  0, "Angle : PI/" + StrD(GetGadgetState(0) / 100, 2), 0, $FFFFFF)
  DrawText(0, 20, "Deviation : PI/" + Str(GetGadgetState(1)), 0, $FFFFFF)
  StopDrawing()

EndProcedure

Procedure GUIInit()
 
  ww = WindowWidth(0) : wh = WindowHeight(0)
  CreateImage(0, ww - 40, wh)
  TrackBarGadget(0, WindowWidth(0) - 40, 16, 20, WindowHeight(0) - 16, 1, 31410, #PB_TrackBar_Vertical)
  TrackBarGadget(1, WindowWidth(0) - 20, 16, 20, WindowHeight(0) - 16, 1, 4000, #PB_TrackBar_Vertical)
  CheckBoxGadget(2, WindowWidth(0) - 40,  1, 40, 16, "Text")
 
  SetGadgetState(0, GadgetAngle)
  SetGadgetState(1, GadgetDeviation)
 
EndProcedure

Procedure LookForPrimes(RangeSearch)
;  
;   TextGadget(4, 5, wh / 2 - 20, ww - 40 - 5, 20, "Looking for primes numbers - Please wait", #PB_Text_Right)
;   ProgressBarGadget(3,  5, wh / 2, ww - 40 - 5, 20, 0, RangeSearch, #PB_ProgressBar_Smooth)
;  
;   PrimesNb = 0
;   For u = 2 To RangeSearch
;     If IsPrime(u)
;       Primes(PrimesNb) = u
;       PrimesNb + 1
;     EndIf
;     SetGadgetState(3, u)
;   Next u
;   SetGadgetText(4, Str(PrimesNb) + " found")
;   Delay(1000)
;   FreeGadget(3)
;   FreeGadget(4)

   ; algo nat the great pour blitzmax
   ; port en pb by zaphod - 23/05/2011
   
  Define num.i = RangeSearch
  Define sqrnum.i = Sqr(RangeSearch)+1
  Dim PrimeFlags.i(RangeSearch)
  ReDim Primes.i(RangeSearch)
  Define tim.i
  
  PrimesNb = 1
  
  For x = 3 To sqrnum Step 2
    If PrimeFlags(x) = #False
      Primes(PrimesNb) = x
      PrimesNb+1   
      
      tim = x + x
      Repeat
        PrimeFlags(tim) = #True
        tim + x
      Until tim >= num
    EndIf
  Next
  
  Primes(0) = 2
  For y = x To num Step 2
    If PrimeFlags(y) = #False
      Primes(PrimesNb) = y     
      PrimesNb+1   
    EndIf
  Next

EndProcedure

;-MAIN

If OpenWindow(0, 0, 0, 600, 600, "Prime nb spiral explorer by djes@free.fr - Use top/down keys on gadgets", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget)
 
  WindowBounds(0, 500, 500, 4000, 4000)
 
  TextFlag = #False
  GadgetAngle = 247
  GadgetDeviation = 600
 
  GUIInit()
  LookForPrimes(500000)
  SpiralDraw()
     
  Repeat
   
    Event = WaitWindowEvent()
   
    Select Event
       
      Case #PB_Event_SizeWindow
       
        GUIInit()
        SpiralDraw()
       
      Case #PB_Event_Gadget
       
        Select EventGadget()
           
          Case 0, 1
           
            GadgetAngle = GetGadgetState(0)
            GadgetDeviation = GetGadgetState(1)
            SpiralDraw()
           
          Case 2
           
            TextFlag = ~TextFlag
            SpiralDraw()
           
        EndSelect

      Case #PB_Event_CloseWindow
        Quit = 1
       
    EndSelect
   
  Until Quit = 1
 
EndIf

End
Edit: optim du IsPrime()
Dernière modification par djes le jeu. 26/mai/2011 20:22, modifié 2 fois.
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: Exploration spirale de nombres premiers

Message par graph100 »

Je ne comprend pas trop pourquoi tu n'as pas utiliser le code que nous avions posté ???
Ça va tellement plus vite :mrgreen:

Et avec un thread (plus très utile puisque ca va vite)

Code : Tout sélectionner

;**********************************
;
; Primes numbers spiral exploration
; 26/05/2011
; by djes (djes@free.fr)
;
;**********************************

Global PrimesNb, ww, wh, GadgetAngle, GadgetDeviation, TextFlag
Global Dim Primes(80000)

Global is_look_for_prime_excuted.b = #False

; Procedure IsPrime(Number.l)
; 		
; 		For t=1 To Number
; 			If Number % t = 0
; 				Prime + 1
; 			EndIf
; 		Next t
; 		
; 		If Prime = 2
; 			ProcedureReturn 1
; 		EndIf
; 	
; ; 	If PrimeFlags(Number) = #False
; ; 		ProcedureReturn 1
; ; 	EndIf
; 	
; 	
; EndProcedure


Procedure SpiralDraw()
	
	cx = ww / 2 - 20 : cy = wh / 2
	
	Angle.d = #PI / (GetGadgetState(0) / 100)
	Deviation.d = #PI / (GetGadgetState(1) / 10 )
	
	i.d = 0
	e.d = 0
	;PreviousPrime = 0
	StartDrawing(ImageOutput(0))
	Box(0, 0, ww - 40, wh, $FFFFFF)
	If TextFlag
		DrawingMode(#PB_2DDrawing_Transparent|#PB_2DDrawing_XOr)
		For u = 0 To PrimesNb - 1
			x = cx + e * Sin(i)
			y = cy + e * Cos(i)
			DrawText(x, y, Str(Primes(u)), RGB($FF, $FF, 0))
			i = Angle * Primes(u)
			;e = Deviation * Primes(u) ;deviation from the center is based on the prime value
			e + Deviation              ;deviation is linear
		Next u
	EndIf
	
	i.d = 0
	e.d = 0
	DrawingMode(#PB_2DDrawing_Default)
	For u = 0 To PrimesNb - 1
		x = cx + e * Sin(i)
		y = cy + e * Cos(i)
		If x >= 0 And x < ww - 40 And y >= 0 And y < wh
			Plot(x, y, 0)
		EndIf
		i = Angle * Primes(u)
		;e = Deviation * Primes(u) ;deviation from the center is based on the prime value
		e + Deviation              ;deviation is linear
		;PreviousPrime = Primes(u)
	Next u
	
	StopDrawing()
	StartDrawing(WindowOutput(0))
	DrawImage(ImageID(0), 0, 0)
	DrawText(0,  0, "Angle : PI/" + StrD(GetGadgetState(0) / 100, 2), 0, $FFFFFF)
	DrawText(0, 20, "Deviation : PI/" + Str(GetGadgetState(1)), 0, $FFFFFF)
	StopDrawing()
	
EndProcedure

Procedure GUIInit()
	
	ww = WindowWidth(0) : wh = WindowHeight(0)
	CreateImage(0, ww - 40, wh)
	TrackBarGadget(0, WindowWidth(0) - 40, 16, 20, WindowHeight(0) - 16, 1, 31410, #PB_TrackBar_Vertical)
	TrackBarGadget(1, WindowWidth(0) - 20, 16, 20, WindowHeight(0) - 16, 1, 4000, #PB_TrackBar_Vertical)
	CheckBoxGadget(2, WindowWidth(0) - 40,  1, 40, 16, "Text")
	
	SetGadgetState(0, GadgetAngle)
	SetGadgetState(1, GadgetDeviation)
	
EndProcedure

Procedure LookForPrimes(RangeSearch.i)
	
	
	; algo nat the great pour blitzmax
	; port en pb by zaphod - 23/05/2011
	; en blitzmax = 0.838 sec
	; en pb = 1.42 sec
	; pentium 4 - 3 Ghz
	;
	; >>>> Compiler sans le debuger
	;
	Define num.i = RangeSearch
	Define sqrnum.i = Sqr(num)+1
	Dim PrimeFlags.b(num)
	ReDim Primes.i(num)
	Define tim.i
	
	PrimesNb = 2
	
	; 	Define mill.i = ElapsedMilliseconds()
	;
	For x = 3 To sqrnum Step 2
		If PrimeFlags(x) = #False
			Primes(PrimesNb) = x
			PrimesNb+1   
			
			tim = x + x
			Repeat
				PrimeFlags(tim) = #True
				tim + x
			Until tim >= num
		EndIf
	Next
	; 	Local count:Int
	
	Primes(1) = 2
	For y = x To num Step 2
		If PrimeFlags(y) = #False
			Primes(PrimesNb) = y
			; 				
			; 				Debug y
			
			PrimesNb+1   
		EndIf
	Next
	; 	mill = ElapsedMilliseconds()-mill
	
	; 	MessageRequester("",StrF(mill/1000.0) +" seconds "+ Str(PrimesNb)+" primes found!")	
	
	
	
	
	
	
	
	
	; 		TextGadget(4, 5, wh / 2 - 20, ww - 40 - 5, 20, "Looking for primes numbers - Please wait", #PB_Text_Right)
	; 		ProgressBarGadget(3,  5, wh / 2, ww - 40 - 5, 20, 0, RangeSearch, #PB_ProgressBar_Smooth)
	; 		
	; 		PrimesNb = 0
	; 		For u = 0 To RangeSearch
	; 			If IsPrime(u)
	; 				Primes(PrimesNb) = u
	; 				
	; 				Debug u
	; 				
	; 				PrimesNb + 1
	; 			EndIf
	; 			SetGadgetState(3, u)
	; 		Next u
	; 		SetGadgetText(4, Str(PrimesNb) + " found")
	; 		Delay(1000)
	; 	FreeGadget(3)
	; 	FreeGadget(4)
	
	SpiralDraw()
	
	is_look_for_prime_excuted = #True
EndProcedure

Procedure LookFormultiples3(RangeSearch.i)
	
	num = Round(RangeSearch / 3, #PB_Round_Up)
	ReDim Primes.i(num)
	
	PrimesNb = 0
	
	For x = 3 To RangeSearch Step 3
			Primes(PrimesNb) = x
			PrimesNb+1   
		Next
		
	SpiralDraw()
	
	is_look_for_prime_excuted = #True
EndProcedure


Procedure LookForALL(RangeSearch.i)
	
	ReDim Primes.i(RangeSearch)
	
	PrimesNb = 0
	
	For x = 0 To RangeSearch
			Primes(PrimesNb) = x
			PrimesNb+1   
		Next
		
	SpiralDraw()
	
	is_look_for_prime_excuted = #True
EndProcedure



;-MAIN

If OpenWindow(0, 0, 0, 600, 600, "Prime nb spiral explorer by djes@free.fr - Use top/down keys on gadgets", #PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget)
	
	WindowBounds(0, 500, 500, 4000, 4000)
	
	TextFlag = #False
	GadgetAngle = 1002
	GadgetDeviation = 600
	
	GUIInit()
	
	
	; 	treadid = CreateThread(@LookForPrimes(), 10000)
	; 	treadid = CreateThread(@LookForPrimes(), 80000)
	treadid = CreateThread(@LookForPrimes(), 1000000)
; 	treadid = CreateThread(@LookFormultiples3(), 1000000)
; 	treadid = CreateThread(@LookForALL(), 1000000)
	
	Repeat
		
		Event = WaitWindowEvent()
		
		If is_look_for_prime_excuted = #True
			
			Select Event
					
				Case #PB_Event_SizeWindow
					
					GUIInit()
					SpiralDraw()
					
				Case #PB_Event_Gadget
					
					Select EventGadget()
							
						Case 0, 1
							
							GadgetAngle = GetGadgetState(0)
							GadgetDeviation = GetGadgetState(1)
							SpiralDraw()
							
						Case 2
							
							TextFlag = ~TextFlag
							SpiralDraw()
							
					EndSelect
					
				Case #PB_Event_CloseWindow
					Quit = 1
					
			EndSelect
			
		Else
			
			If event = #PB_Event_SizeWindow
				GUIInit()
			EndIf
			
		EndIf
		
		
	Until Quit = 1
	
EndIf

End
Petite remarque : je ne vois pas trop l’intérêt d'afficher ca, puisqu'un rapide test avec tout les nombres et les multiples de 3 donne quasi la même chose : je veux dire par la que ton affichage ne distingue pas les nombre les uns des autres. Ils sont forcément sur les branches de la spirale, mais ce qui change c'est jsute que la spirale est mitée :mrgreen:
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Exploration spirale de nombres premiers

Message par djes »

J'ai optimisé la fonction IsPrime() sur les conseils de Sirius-2337 et de Demivec (forum anglais). L'intérêt de la chose est de trouver un motif qui permettrait de donner un sens aux nombres premiers. Ca n'est pas un effet graphique, c'est un outil de recherche :=)
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Exploration spirale de nombres premiers

Message par djes »

Ok, j'ai corrigé avec votre version, qui est bien plus rapide !
Merci :)
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Exploration spirale de nombres premiers

Message par djes »

Couleur en fonction de la différence entre deux nombres + raccourcis clavier Haut/Bas ; Gauche/Droite ; +/-

Code : Tout sélectionner

;**********************************
;
; Primes numbers spiral exploration
; 26/05/2011
; by djes (djes@free.fr)
; Thx to Sirius-2337, Demivec, Gnasen for IsPrime optim
; Thx to DjPoke, Fig, zaphod, graph100, LSI & Nat the Great for LookForPrimes() optim
;
;**********************************

Global PrimesNb, ww, wh, GadgetAngle, GadgetDeviation, TextFlag, ColorFactor
Global Dim Primes(80000)

Procedure IsPrime(number.l)

  If number = 2
    ProcedureReturn 1
  ElseIf number % 2 = 0
    ProcedureReturn 0
  Else
    x = Sqr(number)
    For t = 3 To x Step 2
      If number % t = 0
        ProcedureReturn 0
      EndIf
    Next t
  EndIf

  ProcedureReturn 1

EndProcedure

Procedure SpiralDraw()
 
  cx = ww / 2 - 20 : cy = wh / 2
 
  Angle.d = #PI / (GetGadgetState(0) / 10000)
  Deviation.d = #PI / (GetGadgetState(1) / 10 )
 
  i.d = 0
  e.d = 0
  PreviousPrime = 0
  StartDrawing(ImageOutput(0))
  Box(0, 0, ww - 40, wh, 0)
  If TextFlag
    DrawingMode(#PB_2DDrawing_Transparent|#PB_2DDrawing_XOr)
    For u = 0 To PrimesNb - 1
      x = cx + e * Sin(i)
      y = cy + e * Cos(i)
      If x >= 0 And x < ww - 40 And y >= 0 And y < wh
        DrawText(x, y, Str(Primes(u)), RGB($FF, $FF, 0))
      EndIf
      i = Angle * Primes(u)
      ;e = Deviation * Primes(u) ;deviation from the center is based on the prime value
      e + Deviation              ;deviation is linear
    Next u
  EndIf
 
  i.d = 0
  e.d = 0
  DrawingMode(#PB_2DDrawing_Default)
  For u = 0 To PrimesNb - 1
    x = cx + e * Sin(i)
    y = cy + e * Cos(i)
    If x >= 0 And x < ww - 40 And y >= 0 And y < wh
      Plot(x, y, (Primes(u) - PreviousPrime) * ColorFactor)
    EndIf
    i = Angle * Primes(u)
    ;e = Deviation * Primes(u) ;deviation from the center is based on the prime value
    e + Deviation              ;deviation is linear
    PreviousPrime = Primes(u)
  Next u

  StopDrawing()
  StartDrawing(WindowOutput(0))
  DrawImage(ImageID(0), 0, 0)
  DrawText(0,  0, "Angle : PI/" + StrD(GetGadgetState(0) / 10000, 4), $FFFFFF, 0)
  DrawText(0, 16, "Deviation : PI/" + Str(GetGadgetState(1)), $FFFFFF, 0)
  DrawText(0, 32, "Color Factor : " + Str(ColorFactor), $FFFFFF, 0)
  StopDrawing()

EndProcedure

Procedure GUIInit()
 
  ww = WindowWidth(0) : wh = WindowHeight(0)
  CreateImage(0, ww - 40, wh)
  TrackBarGadget(0, WindowWidth(0) - 40, 16, 20, WindowHeight(0) - 16, 1, 3141600, #PB_TrackBar_Vertical)
  TrackBarGadget(1, WindowWidth(0) - 20, 16, 20, WindowHeight(0) - 16, 1, 16000, #PB_TrackBar_Vertical)
  CheckBoxGadget(2, WindowWidth(0) - 40,  1, 40, 16, "Text")
 
  SetGadgetState(0, GadgetAngle)
  SetGadgetState(1, GadgetDeviation)
 
EndProcedure

Procedure LookForPrimes(RangeSearch)
;  
;   TextGadget(4, 5, wh / 2 - 20, ww - 40 - 5, 20, "Looking for primes numbers - Please wait", #PB_Text_Right)
;   ProgressBarGadget(3,  5, wh / 2, ww - 40 - 5, 20, 0, RangeSearch, #PB_ProgressBar_Smooth)
;  
;   PrimesNb = 0
;   For u = 2 To RangeSearch
;     If IsPrime(u)
;       Primes(PrimesNb) = u
;       PrimesNb + 1
;     EndIf
;     SetGadgetState(3, u)
;   Next u
;   SetGadgetText(4, Str(PrimesNb) + " found")
;   Delay(1000)
;   FreeGadget(3)
;   FreeGadget(4)

   ; algo nat the great pour blitzmax
   ; port en pb by zaphod - 23/05/2011
   
  Define num.i = RangeSearch
  Define sqrnum.i = Sqr(RangeSearch)+1
  Dim PrimeFlags.i(RangeSearch)
  ReDim Primes.i(RangeSearch)
  Define tim.i
  
  PrimesNb = 1
  
  For x = 3 To sqrnum Step 2
    If PrimeFlags(x) = #False
      Primes(PrimesNb) = x
      PrimesNb+1   
      
      tim = x + x
      Repeat
        PrimeFlags(tim) = #True
        tim + x
      Until tim >= num
    EndIf
  Next
  
  Primes(0) = 2
  For y = x To num Step 2
    If PrimeFlags(y) = #False
      Primes(PrimesNb) = y     
      PrimesNb+1   
    EndIf
  Next

EndProcedure

;-MAIN

If OpenWindow(0, 0, 0, 500, 500, "Prime nb spiral explorer by djes@free.fr - Use top/down keys on gadgets", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget)
 
  WindowBounds(0, 500, 500, 4000, 4000)
  
  AddKeyboardShortcut(0, #PB_Shortcut_Up, 1)
  AddKeyboardShortcut(0, #PB_Shortcut_Down, 2)

  AddKeyboardShortcut(0, #PB_Shortcut_Left, 3)
  AddKeyboardShortcut(0, #PB_Shortcut_Right, 4)
  
  AddKeyboardShortcut(0, #PB_Shortcut_Add, 5)
  AddKeyboardShortcut(0, #PB_Shortcut_Subtract, 6)

 
  TextFlag = #False
  GadgetAngle = 1123612
  GadgetDeviation = 10000
  ColorFactor = 16
 
  GUIInit()
  LookForPrimes(2000000)
  SpiralDraw()
     
  Repeat
   
    Event = WaitWindowEvent()
   
    Select Event
       
      Case #PB_Event_SizeWindow
       
        GUIInit()
        SpiralDraw()
       
      Case #PB_Event_Gadget
       
        Select EventGadget()
            
          Case 0, 1
            
            GadgetAngle = GetGadgetState(0)
            GadgetDeviation = GetGadgetState(1)
            SpiralDraw()
            
          Case 2
            
            TextFlag = ~TextFlag
            SpiralDraw()
            
        EndSelect        
                
      Case #PB_Event_Menu
        
        Select EventMenu()
            
          Case 1
            
            GadgetAngle + 1
            SetGadgetState(0, GadgetAngle)
            SpiralDraw()
            
          Case 2
            
            GadgetAngle - 1
            SetGadgetState(0, GadgetAngle)
            SpiralDraw()
            
          Case 3
            
            ColorFactor + 1
            SpiralDraw()
            
          Case 4
            
            ColorFactor - 1
            SpiralDraw()
            
          Case 5
            
            GadgetDeviation + 1
            SetGadgetState(1, GadgetDeviation)
            SpiralDraw()
            
          Case 6
            
            GadgetDeviation - 1
            SetGadgetState(1, GadgetDeviation)
            SpiralDraw()
            
        EndSelect
        
      Case #PB_Event_CloseWindow
        Quit = 1
       
    EndSelect
   
  Until Quit = 1
 
EndIf

End
Frenchy Pilou
Messages : 2194
Inscription : jeu. 27/janv./2005 19:07

Re: Exploration spirale de nombres premiers

Message par Frenchy Pilou »

C'est pas les nombres premiers mais c'est une spirale avec les décimales du nombre PI ;)
le code pour le rendereur povray est là ;)
http://code.google.com/p/spirals/source ... pov?r=1131

by Francesco de Comité

Image
Est beau ce qui plaît sans concept :)
Speedy Galerie
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Exploration spirale de nombres premiers

Message par djes »

Ah, c'est joli! Sûr qu'on pourrait faire ça avec ogre :D
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: Exploration spirale de nombres premiers

Message par graph100 »

je ne suis pas sur. povray est un renderer point à point de haute qualité !
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Exploration spirale de nombres premiers

Message par djes »

Au vu de l'image, il n'y a rien de bien extraordinaire, à part peut-être une petite réflexion à peine visible.
Frenchy Pilou
Messages : 2194
Inscription : jeu. 27/janv./2005 19:07

Re: Exploration spirale de nombres premiers

Message par Frenchy Pilou »

Le fait d'avoir donné la même couleur à un nombre permet de repérer de suite, une suite de six "neuf" qui se suivent (à midi 25 pas trop loin du centre de la tour :)
Petite anomalie dès les débuts.
La théorie dit que l'on doit pouvoir retrouver toute suite de nombre dans la série, on y trouvera de même toute image affichable sur un écran d'ordinateur ;)
(si l'on code évidemment celle-ci comme un chiffre, mais en général c'est comme cela qu'elle est codée ;)

Il y en a déjà une qui est évidente, c'est celle que vous avez sous les yeux ;)
Maintenant où se trouve-elle dans la série, cela est une autre histoire :)
Est beau ce qui plaît sans concept :)
Speedy Galerie
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Exploration spirale de nombres premiers

Message par djes »

Tu parles des nombres transcendants, de l'infini, de ces séries qui peuvent décrire tout l'univers si on fait fi du temps (et encore). Je ne sais pas s'il existe un thème de recherche sur 'comment retrouver la position de telle série dans tel nombre transcendant', en contournant l'imprévisibilité. Ça devrait être marrant pour un matheux, même si le résultat demanderait sans doute de travailler sur des nombres tellement gigantesques, qu'il faudrait se casser la tête pour trouver une autre solution!

Pour ce qui est de nombres premiers, j'ai fait ce programme parce que justement, je ne sais pas s'il y a un rapport avec les nombres transcendants. Est-ce que la suite est infinie et imprévisible, ou répond-elle à une règle mathématique pour l'instant inconnue? :)
Frenchy Pilou
Messages : 2194
Inscription : jeu. 27/janv./2005 19:07

Re: Exploration spirale de nombres premiers

Message par Frenchy Pilou »

Regardeles nombres "Univers" / Nombres "Normal" ;)
le fait de savoir ou se trouve une série donnée n'a pas trop d'intérêt puisque l'on sait la série que l'on cherche ;)
ce qui serait plus cool serait de trouver une règle qui trouve tout début de série d'une longueur donnée donnant une image codée compréhensible ;)
Se dire qu'il y a toutes les images, que parmi elles la plupart sont du "bruit", que les compréhensibles ont un écart moyen entre elles ;)
Mais cela reste pour l'instant du domaine du doux rêve :)

Pour les nombres premiers oui la suite est infinie, mais on n'a pas encore trouvé de règle absolue (formule) qui les donne tous à part de les tester l'un après l'autre :)
Est beau ce qui plaît sans concept :)
Speedy Galerie
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: Exploration spirale de nombres premiers

Message par graph100 »

Frenchy Pilou a écrit :ce qui serait plus cool serait de trouver une règle qui trouve tout début de série d'une longueur donnée donnant une image codée compréhensible ;)
:lol: :lol: Ce qui reviendrais à coder un programme qui pourrais prédire l'avenir :lol: :lol:

Donc :
cela reste pour l'instant du domaine du doux rêve :)
:mrgreen: :mrgreen: :mrgreen:
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Exploration spirale de nombres premiers

Message par Backup »

@graph100
Ce que pilou dit (il en a deja parlé sur le forum)

c'est qu'une image photo d'une fleurs, ou d'un bateau, bref une images cohérente
est en fait un agencement de pixel bien precis
cette agencement est du coup un nombre precis

donc rien n'empeche de faire un logiciel qui refabrique des images en utilisant un nombre
au hasard (donc un agencement de pixel), et que ce logiciel finisse un jour ou l'autre a afficher une image cohérente , le pape a poil en train de faire de la planche a voile par exemple :lol:

d'ailleurs une machine existe , qui fait ça , ça se nomme une camera
et le recepteur une Television ...

l'un envoie a l'autre un nombre precis , qui reconstitue une image , (un assemblage de pixel cohérent) , et pas un nuage de point aléatoire (la neige bien connu de ceux qui ont connu la Tv analogique .. )
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: Exploration spirale de nombres premiers

Message par graph100 »

oui oui, j'ai bien compris, d'ou ma remarque, en fait j'étais mort de rire en imaginant des exemples du style celui que tu viens de citer... et en imaginant le coté philosophique de la chose :D Comme on pourrais sortir n'importe quelle image, comment savoir si c'est la réalité ou pas.

En plus, il faut admettre que toutes les oeuvre admirées dans le monde entier car créées par 'le génie de l'homme' sont contenues dans ces nombres infinis :mrgreen:
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Répondre