Page 2 sur 3
Publié : dim. 30/janv./2005 15:34
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.
Publié : dim. 30/janv./2005 15:46
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

Publié : dim. 30/janv./2005 16:21
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....
Publié : dim. 30/janv./2005 16:29
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,
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

Publié : dim. 30/janv./2005 16:42
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
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
Publié : dim. 30/janv./2005 19:19
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)
Mais je ne contrôle rien là !
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

Publié : dim. 30/janv./2005 19:21
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
bon j'y retourne
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
Publié : dim. 30/janv./2005 19:28
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?
Publié : dim. 30/janv./2005 19:30
par Backup
Publié : dim. 30/janv./2005 19:34
par Frenchy Pilou
@dobro
Plus de connection ? Mais c'est la fin du monde pour un internaute
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
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
PS petite question
On n'est pas obliger de "finir" un programme par un "END" syntaxique (ou autre)
Publié : dim. 30/janv./2005 19:53
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 !
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 )
y a pas eu de probleme niveau CB avec le purebasic et le site de FRED
pour l'aleatoire je suis d'accord , mais faut bien commencer par quelques choses !
et c'est plus facile a metre en oeuvre !!
d'autre part , j'ai toujours pas trop compris le truc
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
Publié : dim. 30/janv./2005 21:36
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
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
à suivre...
Publié : lun. 31/janv./2005 0:29
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"
la :
http://purebasic.hmt-forum.com/viewtopi ... 1342#21342
Publié : lun. 31/janv./2005 0:43
par Frenchy Pilou
@Dobro
Oui je l'avais vu ce "chant des sphères" musiques célestes s'il en est
Essaie avec les 100 000 premières décimales de pi et pas de fausses notes
je pense qu'il vaut mieux dzipper avant
http://206.145.80.239/zbc/attachment.ph ... entid=4863 50 kb
Ps on ne peut rien envoyer sur le forum ,images, fichiers, en direct....?
Publié : lun. 31/janv./2005 1:06
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 !
