PureDélire ou Fun potentiel ?

Programmation d'applications complexes
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Ok filperj, c'est bien beau tout ça mais j'ai l'impression que l'unité d'un curseur pourrait bien représenté plusieurs années donc on prendrait des valeurs au hasard. Ca donne des chiffres énormes; va y avoir des difficultés.
Frenchy Pilou
Messages : 2194
Inscription : jeu. 27/janv./2005 19:07

Message par Frenchy Pilou »

@nico
Il faut essayer , c'est sûr que tomber d'emblée sur sur image hyper "nette", serait un sacré coup de bol
C'est encore pour cela que mesurer à la volée un écart moyen serait d'une grande aide.
Il suffirait de se positionner sur une image connue et de "sauter" sur l'environnement possible de la suivante :)
Et par bonds successifs de plus en plus petits de mettre au point la "netteté"
.
Une chose est sûre c'est que toutes ces images existent :)
Il suffit de les débusquer :roll:
Est beau ce qui plaît sans concept :)
Speedy Galerie
Torp
Messages : 360
Inscription : lun. 22/nov./2004 13:05

Message par Torp »

Quelque chose me dit qu'il ya bug dans l'énoncé du problème (si j'ai bien tout compris)....

En gros ce serait faire une grosse boucle qui afficherai successivement toutes les images possibles qu'un écran (par ex. de 800x600x24bits. Qui est un nombre fini!) peut afficher, et comme le dis FliperJ on verrait apparaitre un jour ou l'autre la joconde, la photo de ma grand-mère, .... le passé et le futur de tout ce qui éxiste ou n'existe pas en somme !

En résumé l'infini... Y'a pas comme un bug là?

Ou alors l'infini se résume à un nombre de 2 880 000 chiffres en résolution 800x600....
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

l'affichage des différents écrans n'est pas linéaire , désolé , mais si tu es assez patient et attentif ,tu devrais voir défiler la joconde sur le cheval blanc d'henri IV, :lol:

Code : Tout sélectionner

; --- Initialisation ---
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0
  MessageRequester("Erreur", "Impossible d'initialiser DirectX 7 Ou plus", 0)
  End
EndIf
; --- Plein écran ---
#MaxX= 800
#MaxY = 600
#ScreenDepth = 32
If OpenScreen(#MaxX,#MaxY,#ScreenDepth,"Essai Pathfinding") = 0
  MessageRequester("Erreur", "Impossible d'ouvrir l'écran ", 0)
  End
EndIf
Repeat
  ClearScreen(0,0,0)
  ;/ état du clavier 
  ExamineKeyboard()
  StartDrawing(ScreenOutput())
  For v=0 To #MaxY-1
    For u=0 To #MaxX-1
      Plot(u,v,RGB(Random(255),Random(255),Random(255)))
    Next u
  Next v
  StopDrawing()
  FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
Ton idée est séduisante en tout cas :)
filperj
Messages : 395
Inscription : jeu. 22/janv./2004 1:13

Message par filperj »

L'oeil humain dispose d'un certain nombre de capteurs (j'ai su le nom savant de la chose..), chacun capable de différencier un certain nombre de nuances de couleurs...
Donc le nombre d'images différentes qu'on est capable de percevoir n'est pas infini, et il est sûrement calculable :roll:

Sinon, codé à l'arrache, un prog qui additionne 2 image de 64*64*1 (bicolore noir et blanc, essayez de trouver des images qui passeront bien sous ce format).
Ça fait déjà la somme de 2 entiers sur 4096 bits.

Code : Tout sélectionner



UseJPEGImageDecoder()
UsePNGImageDecoder()

#nbPix=64*64

Dim ImBuf.b(1,#nbPix/8-1)

Procedure.l ChooseImage(NumImg.l)
  File$=OpenFileRequester("Choisissez une image","","bmp,jpg,png|*.bmp;*.pgn;*.jpg;*.jpeg",0)
  If LoadImage(NumImg,File$)
    ResizeImage(NumImg,64,64)
    If StartDrawing(ImageOutput())
      For y=0 To 63
        For x=0 To 56 Step 8
          pixpak=0
          For indx=0 To 7
            pixpak<<1
            coul=Point(x+indx,y)
            If Red(coul)+Blue(coul)+Green(coul)>=3*128
              pixpak|1
              Plot(x+indx,y,$FFFFFF)
            Else
              Plot(x+indx,y,0)
            EndIf
          Next
          ImBuf(NumImg,x/8+y*8)=pixpak
        Next
      Next
      StopDrawing()
      ProcedureReturn 1
    EndIf
  EndIf
EndProcedure

Procedure AddImg()
  For pix=#nbPix/8-1 To 0 Step -1
    som+(ImBuf(0,pix)&255)+(ImBuf(1,pix)&255)
    ImBuf(0,pix)=som
    som>>8
  Next
  If CreateImage(2,64,64) And StartDrawing(ImageOutput())
    For y=0 To 63
      For x=0 To 63
        Plot(x,y,$FFFFFF*((ImBuf(0,y*8+(x>>3))>>(7-(x&%111)))&1))
      Next
    Next
    StopDrawing()
  EndIf
EndProcedure

If InitSprite() And ChooseImage(0) And ChooseImage(1) And OpenWindow(0,0,0,4*64,3*64,#PB_Window_SystemMenu|#PB_Window_MaximizeGadget|#PB_Window_SizeGadget,"Somme d'images") And OpenWindowedScreen(WindowID(),0,0,4*64,3*64,1,0,0)
  AddImg()
  Repeat
    If StartDrawing(ScreenOutput())
      DrawImage(UseImage(0),32,32)
      DrawImage(UseImage(1),160,32)
      Locate(128,64) : DrawText("+")
      Locate(64,128) : DrawText("=")
      DrawImage(UseImage(2),96,100)
      StopDrawing()
      FlipBuffers()
    EndIf
  Until WaitWindowEvent()=#PB_Event_CloseWindow
EndIf

Le chaos l'emporte toujours sur l'ordre
parcequ'il est mieux organisé.
(Ly Tin Wheedle)
Frenchy Pilou
Messages : 2194
Inscription : jeu. 27/janv./2005 19:07

Message par Frenchy Pilou »

@comtois
Bel essai :)
Effectivement si j'attends un petit peu je devrais apercevoir quelque chose !
(si le random ne tourne pas en boucle et ne laisse pas des trous là ou justement se trouve le cheval blanc) :roll:
Mais je ne contrôle rien là ! :D
C'est le "vol de la mouche" à l'aveuglette :)
Il faut "aider" la machine !
A suivre...

@filperj
Bien joué!
Sûr on peu comparer la surface du fond de la rétine avec ses cônes et batonnets à un "écran" !
Bravo ! C'est une surface finie donc on peut donc en calculer le nombre de vue potentiellement "visibles" !

Le truc de se servir d'une images comme "base" de départ est séduisante
Comme cela on n'a pas à chercher un départ au hasard
C'est aussi plus facile pour "stocker" un "écran"
A suivre...
Meci d'essayer ce trip visuel 8)
Dernière modification par Frenchy Pilou le lun. 31/janv./2005 20:59, modifié 3 fois.
Est beau ce qui plaît sans concept :)
Speedy Galerie
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

je suis partie du prg de comtois
pour en faire une version avec image chargée !

je recupere les points de couleurs de l'image
pour ensuite els afficher de facon aleatoire !!

je vais vois si je peux faire un system de glisse
mais je ne garantie rien !!
a savoir que mon dernier jours de connection c'est en principe demain !
(a moins qu 9 tel me coupe ce soir a minuit ! )
donc je serai moins present !!

ça va faire des vacances au Soldat inconnu :D

bon j'y retourne :D

le code pour l'instant

Code : Tout sélectionner


UseJPEGImageDecoder() 
UseJPEGImageDecoder() 
UseTGAImageDecoder() 
UseTIFFImageDecoder() 



 ; --- Initialisation ---
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0
  MessageRequester("Erreur", "Impossible d'initialiser DirectX 7 Ou plus", 0)
  End
EndIf
NomFichier$ = OpenFileRequester("charge une image", "C:\", "*.jpg;*.tiff;*.bmp;*.tga", 0 ) 


If LoadImage(1, NomFichier$) 
  Hauteur = ImageHeight() 
  Largeur = ImageWidth() 
  prof = ImageDepth() 

  Dim couleur (10000,10000)

; --- Plein écran ---


If OpenScreen(800,600,32,"Essai truc biz") = 0
  MessageRequester("Erreur", "Impossible d'ouvrir l'écran ", 0)
  End
EndIf
ImageID = UseImage(1) 

; recup les points de l'image de reference
StartDrawing( ImageOutput()  )
DrawImage(ImageID, 0, 0 , Largeur, Hauteur) 
For h=0 To Hauteur-1
  For l=0 To Largeur-1
    couleur(h,l) = Point(l, h)  
  Next l
Next h
StopDrawing()

; lance l'affichage aleatoires ddes points recupéré
Repeat
  
  ;/ état du clavier
  ExamineKeyboard()
  
  
  StartDrawing( ScreenOutput() ) 
  For h=0 To Hauteur-1
    For l=0 To Largeur-1 
      Plot(Random(Largeur)+1,Random(Hauteur)+1, couleur(h,l) )
    Next l
  Next h
   StopDrawing()

  FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)

EndIf




hardy
Messages : 333
Inscription : mer. 02/juin/2004 13:19
Localisation : Tours

Message par hardy »

a savoir que mon dernier jours de connection c'est en principe demain !
(a moins qu 9 tel me coupe ce soir a minuit ! )
Que t'arrive-t-il donc?
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

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

Message par Frenchy Pilou »

@dobro
Plus de connection ? Mais c'est la fin du monde pour un internaute 8O

Sinon pour le code
Même remarque que pour comtois, le hasard pur n'est pas la solution!
Reafficher aléatoirement les points n'a quasi aucune chance de réafficher quelque chose de plausible puisque justement on "touille" :)
Il faut "diriger" la machine!

Merci de l'essai 8)

En tout cas je vois qu'il est facile de "bricoler" en très peu de lignes des images avec le Pure :)
Mon chèque va bientôt s'envoler vers FEGERSHEIM 8)

PS petite question
On n'est pas obliger de "finir" un programme par un "END" syntaxique (ou autre)
Dernière modification par Frenchy Pilou le lun. 31/janv./2005 21:00, modifié 1 fois.
Est beau ce qui plaît sans concept :)
Speedy Galerie
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

On n'est pas obliger de "finir" un programme par un "END" synthaxique (ou autre)
ben non !!

mais le mettre c'est plus mieux ! :D

Mon chèque va bientôt s'envoler vers FEGERSHEIM Cool
je te conseille de passer par CB sur le site de pure !
car tu pourra recuperer ta version complete des ce soir (telechargement ) :D

y a pas eu de probleme niveau CB avec le purebasic et le site de FRED :D





pour l'aleatoire je suis d'accord , mais faut bien commencer par quelques choses !
et c'est plus facile a metre en oeuvre !! :D

d'autre part , j'ai toujours pas trop compris le truc :D

voici ci dessous le meme prg
un peut modifier et je pense que c'est une bonne base pour debuter !!




Code : Tout sélectionner



UseJPEGImageDecoder() 
UseJPEGImageDecoder() 
UseTGAImageDecoder() 
UseTIFFImageDecoder() 



 ; --- Initialisation ---
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0
  MessageRequester("Erreur", "Impossible d'initialiser DirectX 7 Ou plus", 0)
  End
EndIf
NomFichier$ = OpenFileRequester("charge une image", "C:\", "*.jpg;*.tiff;*.bmp;*.tga", 0 ) 


If LoadImage(1, NomFichier$) 
  Hauteur = ImageHeight() 
  Largeur = ImageWidth() 
  prof = ImageDepth() 

  Dim couleur (10000,10000)

; --- Plein écran ---


If OpenScreen(800,600,32,"Essai truc biz") = 0
  MessageRequester("Erreur", "Impossible d'ouvrir l'écran ", 0)
  End
EndIf
ImageID = UseImage(1) 
StartDrawing( ScreenOutput() ) 
DrawText(" veuillez patienter ...") 
StopDrawing()
FlipBuffers()
; recup les points de l'image de reference

ResizeImage(1, 320, 200) ; redimentionne l'image
Hauteur = ImageHeight()  ; une image plus petite sera plus rapide a traiter !
Largeur = ImageWidth() 

StartDrawing( ImageOutput()  )
DrawImage(ImageID, 0, 0 , Largeur, Hauteur) 
For h=0 To Hauteur-1
  For l=0 To Largeur-1
    couleur(h,l) = Point(l, h)  
  Next l
Next h
StopDrawing()
ClearScreen(0, 0, 0) 
; lance l'affichage aleatoires des points recupérés
Repeat
  
  ;/ état du clavier
  ExamineKeyboard()

  
  StartDrawing( ScreenOutput() )
  For h=0 To Hauteur-1 
    For l=0 To Largeur-1 
      Plot(Random(l),h, couleur(h,l) )
    Next l
  Next h
   StopDrawing()

  FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)

EndIf




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

Message par Frenchy Pilou »

Quelques informations "Physiques"
Tout sur l'oeil
@filperj
Bâtonnets (130 millions) cônes (6-7 millions) sur la rétine
donc grosso modo un "écran de 11 600*11 600 pixels" fortiche l'oeil :D
http://www.essilor.fr/RESSOURCES-SCIENT ... mie01.html


En moyenne, nous ne sommes pas capables de distinguer plus de 350 000 couleurs en même temps
http://www.tsi.enst.fr/tsi/enseignement ... r/rgb.html

200 nuances dans un dégradé de couleur pour qu'il soit perçu de comme continu.
http://www.arnaudfrichphoto.com/calibra ... uleurs.htm

@Dobro
j'ai toujours pas trop compris le truc

Cela va venir, il n'y a pas le feu au lac :)
Si tu regardes mon exemple des 10*10 pixels
Il suffit simplement de "parcourir" cette liste, rien de sorcier :)
Bien sûr le faire ligne après ligne est idiot, il faut le faire avec un "pas" (qui peut varier) c'est "l'accélérateur"

Autre chose, cette "liste triée" est purement conceptuelle, pour des raisons de rapidité il faut peut-être connaître la structure de la mémoire vidéo, et là je doute qu"elle soit simplement organisée comme une liste linéaire bien classée :roll:
à suivre...
Est beau ce qui plaît sans concept :)
Speedy Galerie
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

c'est marrant car sur ce principe y apas longtemps
j'ai fait un programme qui lit des fichier (n'importe quoi)
et joue de la musique en fonction des valeur contenu dans le fichier !

regarde le topic intitulé "Le chant des lettres" :D

la : http://purebasic.hmt-forum.com/viewtopi ... 1342#21342
Frenchy Pilou
Messages : 2194
Inscription : jeu. 27/janv./2005 19:07

Message par Frenchy Pilou »

@Dobro
Oui je l'avais vu ce "chant des sphères" musiques célestes s'il en est 8)

Essaie avec les 100 000 premières décimales de pi et pas de fausses notes :D
je pense qu'il vaut mieux dzipper avant :lol:
http://206.145.80.239/zbc/attachment.ph ... entid=4863 50 kb
:D
Ps on ne peut rien envoyer sur le forum ,images, fichiers, en direct....?
Est beau ce qui plaît sans concept :)
Speedy Galerie
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Ps on ne peut rien envoyer sur le forum ,images, fichiers, en direct....?
non rien
mais tu peux faire afficher des images a partir d'une adresse
ou donner des lien comme tu l'a fait ! :D
Répondre