|
#1 - 13-04-2012 18:52:43
- w9Lyl6n
- Professionnel de Prise2Tete
- Enigmes résolues : 26
- Messages : 220
RGB attack!! une énigme innformatique
Bonjours à tous, aujourd'hui une énigme mathématique informatique Je vous rassure tout de suite, aucune connaissance en programmation n'est requise, tout est expliqué...
J'aime bien écrire de petit algorithmes qui génère des images... souvent le résultat est assez imprévisible et on peut faire de très belles découvertes
Ici mon idée était de remplir l'écran en partant du centre puis de remplir les pixels en spiral jusqu'à ce que l'écran soit plein:
La couleur de chaque nouveau pixel étant le mélange du pixel précédent et du pixel de la ligne du dessous, plus une petite composante aléatoire, pour rompre la monotonie
Le calcul du mélange est le suivant: Chaque couleur est couleur est décrite par un entier c < 100x100x100 de cette manière:
où R,V,B sont des entiers compris entre 0 et 99, ils représentent l'intensité des couleurs Rouge Verte et Bleu.
le mélange s'obtient en faisant la moyenne de chaque composente:
R'' = (R+R')/2 + r V'' = (V+V')/2 + v B'' = (B+B')/2 + b où r,v,et b sont des nombres entiers aléatoire compris entre -5 et 5
Note importante: en informatique une division d'entier renvoi en fait le quotient de la division (le résultat est donc entier) exemple 159/10 = 15.
L'entier représentant la couleur mélangé est donc :
c'' = R''x10000 + V''x100 + B''
Voici le résultat de l'algorithme:
Tout commence bien, l'image se génère lentement, une spirale coloré apparait, son rayon est de plus en plus grand jusqu'à ce que...Mais!? Qu'est ce que c'est que ces comètes rouges vertes et bleus ??!! Est ce la manifestation du chaos inhérent à tout système complexe? Ou plus probablement les prémisses du bug du 12 décembre 2012 annoncé par les Mayas?
J'attends vos hypothèses Spoiler : [Afficher le message] bien sûr il existe aussi une explication parfaitement logique
#2 - 13-04-2012 19:10:29
- Nombrilist
- Expert de Prise2Tete
- Enigmes résolues : 10
- Messages : 568
RGB attack!! une énigme niformatique
A un moment, des arcs noirs apparaissent. Autrement dit, "c" vaut zéro. Par conséquent, la couleur du premier pixel situé directement au dessus de l'arc noir est désignée aléatoirement et la couleur des pixels qui le suivent est conditionnée par ce premier pixel. D'où les trainées unicolores.
#3 - 13-04-2012 19:35:12
- Memento
- Professionnel de Prise2Tete
- Enigmes résolues : 30
- Messages : 176
rgb attack!! une énigmz informatique
Pour le moment je n'ai pas d'idée, mais c'est joli
#4 - 13-04-2012 19:41:56
- SHTF47
- Imprnnçbl de Prs2Tt
- Enigmes résolues : 39
- Messages : 1629
- Lieu: Autre nom du colin
rgb attack!! ube énigme informatique
D'une, c'est très beau ! Je me souviens que je faisais des dessins aléatoirement programmés sur ma calculatrice graphique au lycée Les courbes paramétrées, etc...
De deux, ta formulation : R'' = (R+R')/2 + r V'' = (V+V')/2 + v B'' = (B+B')/2 + b ...me fait immédiatement penser à celle qu'on utilise pour tracer la fameuse fractale du triangle de Sierpinski.
On définit au départ les coordonnées planes des trois sommets du triangle, puis on part d'un point au hasard du plan, et on trace le point suivant comme étant le milieu du segment formé par le point actuel et un des trois sommets tiré au hasard. Une fois que les calculs convergent vers un des points de la fractale, on n'en sort plus.
J'ai l'impression que c'est ce qui se passe ici aussi... j'ai bon ?
La musique est une mathématique sonore, la mathématique une musique silencieuse. [Edouard HERRIOT]
#5 - 13-04-2012 21:10:04
- w9Lyl6n
- Professionnel de Prise2Tete
- Enigmes résolues : 26
- Messages : 220
RGB attack!! une énigme nformatique
Nombrilist : il y a de l'idée mais "c" n'est pas nécessairement nul pour qu'il y ait apparition d'une comète. En y regardant de près, on peut voir par exemple une comètes verte dans la queue d'une comète rouge.
Memento :
SHTF : il y aurait effectivement convergence vers une couleur dont on ne sortirait plus, si il n'y avait pas les trois composantes aléatoires petit r, petit g et petit b introduites exprès faire dévier la moyenne petit à petit et varier les couleurs.
#6 - 14-04-2012 14:04:56
- Christian91
- Passionné de Prise2Tete
- Enigmes résolues : 0
- Messages : 89
- Lieu: 91
rgb attaxk!! une énigme informatique
Bonjour
Bon je ne suis pas (encore) un habitué de P2T, aussi il me semble que l'énoncé de l'énigme ne donne pas tous les éléments nécessaires à sa résolution. Il est évident que (R",V",B") est la couleur du pixel courant dans la construction de la spirale, (R,V,B) celle du pixel précédent, et (R',V',B') celle du pixel de la ligne du dessous. On devine que la ligne du dessous est la ligne voisine côté centre. Mais quel est donc ce pixel de la ligne du dessous ? D'après l'image ce pixel n'est pas unique. Comment est construite la spirale ? Quelle forme est donnée aux pixels (pour moi un pixel c'est un point, ça ne se remplit pas) ? Il n'est pas dit quoi faire quand (R+R')/2 + r donne un résultat en dehors de l'intervalle [0, 99] : on tronque, on retire un autre r ou bien on prend le modulo ? Bon cette dernière question fait peut être partie de l'énigme … Désolé pour ce pinaillage, mais sans ça je bloque.
#7 - 14-04-2012 14:41:43
- w9Lyl6n
- Professionnel de Prise2Tete
- Enigmes résolues : 26
- Messages : 220
rgb attack!! une énigle informatique
Christian :Oui effectivement l'énoncé est un peu évasif, en fait je n'ai pas voulu trop le charger, il est déjà long.
Voilà donc quelques précisions:
_On dispose d'une fonction qui rend la couleur "c" d'un pixel aux coordonné x y: pixel_color (x,y)
_Un pixel à colorier est situé à une coordonné du type (r*cos(t),r*sint(t)) arrondis à la coordonné entière la plus proche. La couleur du pixel de la ligne du dessous est donc : c' = pixel_color ((r-1)*cos(t),(r-1)*sint(t))
_On extrait manuellement les composante R, V et B dans l'intervalle [0,99] tel que : _On fait les calculs de R'',V'' et B'' exactement comme indiqué et on les recompose tel quel, sans aucune vérification supplémentaire, pour obtenir c''.
_On enregistre la valeur de c'' qui deviendra le "c" pour le calcul du prochain pixel.
_En pratique, l’échantillonnage des points le long de la spirale fait qu'on tombe plusieurs fois sur certains pixels après arrondis des coordonnés. Dans ce cas on saute le pixel et on garde la valeur du c'' précédemment calculé pour le prochain calcul.
Voilà, j'espère que ça éclairera votre lanterne
#8 - 15-04-2012 00:59:57
- rivas
- Elite de Prise2Tete
- Enigmes résolues : 48
- Messages : 1106
- Lieu: Jacou
RGB attack!! une énigme informatiuqe
Amusant comme énigme.
Ma toute première pensée est que c'est un problème d'overflow ou plutôt d'underflow d'entiers en l'occurence. En informatique les ruptures de continuité des phénomènes est très souvent liée au mécanisme de débordements d'entiers.
Parenthèse: Un entier informatique est représenté en binaire par un certain nombre de bits (chiffres binaires). Si on représente un entier avec 8 bits et si on prend comme convention qu'il n'est pas signé (toujours positif) on peut représenter les entiers de 0 à 255 (2^8-1). Avec les même 8 bits, en dédiant un des bits à la représentation du signe, on peut représenter les entiers de -128 à 127. Que se passe-t-il lorsqu'on approche de la limite? En écrivant en binaire 255+1: 1111 1111+1=1 0000 0000 Or seuls les 8 bits les plus à droites sont stockées donc en arithmétique binaire à 8 bits non signés: 255+1=0 phénomène appelé overflow et 0-1=255, underflow.
Ici ce n'est pas tout à fait le même phénomène qui s'applique mais très proche. Il s'applique sur une tranche avec en plus une retenue qui déborde sur le codage de la couleur suivante.
Le phénomène est du à la petite partie aléatoire que l'on ajoute et surtout que l'on soustrait (lorsqu'elle est négative). Si les 2 points qui entrent en compte dans le calcul du nouveau point sont presque noirs et que le résultat de la moyenne est donc codée 000102 par exemple et que la partie aléatoire que l'on ajoute à la composante B est -4 le nouveau pixel à pour couleur 000098. Et on voit que du presque noir est devenu bleu très lumineux.
On le voit très bien dans le dessin, les comètes apparaissent dans le sens du calculs sur une ligne de la spirale juste après une zone sombre. Suivant le report de la retenue on peut obtenir n'importe quelle couleur: 010101 - 4 pour le rouge donne: 010101-40000=-29899 mais en arithmétique informatique cela donne: -29899+1000000=970101 soit du rouge très brillant. 010101 - 4 pour le vert donne: 010101-400=9701 soit du vert très brillant Et de même pour le bleu.
Je suis quasiment sûr que c'est la raison de ces comètes. C'est vraiment très visible sur le dessin.
Merci encore.
Edit: bien sûr le phénomène peut se cumuler sur 2 ou 3 composantes simultanément et donner des comètes d'autres couleur mais uniquement des combinaisons des 3 couleurs R, V, B. On voit très bien une comète mauve (R+B) dans la queue d'un comète rouge créée par un débordement du bleu alors que le rouge reste fort... On voit des comètes orange dans du vert (orange=V+R en info).
#9 - 15-04-2012 10:45:44
- w9Lyl6n
- Professionnel de Prise2Tete
- Enigmes résolues : 26
- Messages : 220
RRGB attack!! une énigme informatique
rivas : Bravo, tu as compris le phénomène... Petite question : Est ce que tu saurais expliquer pourquoi le dépassement ne se fait que dans un seul sens, du foncé vers le claire? Et comment modifier simplement la formule du mélange des couleurs pour équilibrer les dépassements dans chacun des deux sens?
#10 - 15-04-2012 13:33:26
- rivas
- Elite de Prise2Tete
- Enigmes résolues : 48
- Messages : 1106
- Lieu: Jacou
rgb attack!! unr énigme informatique
Je ne suis pas d'accord qu'il n'y a pas de dépassement dans l'autre sens. Il n'y a aucune raison qu'il n'y en ait pas et d'ailleurs si tu regardes bien tu vois nettement des points clairs isolés dans du sombre. Pour moi cela veut dire qu'il y a eu transition du sombre vers le clair (F->C) puis dès le point suivant la transition inverse du clair vers le foncé (C->F).
Mais c'est beaucoup plus rare.
En effet, le long de la spirale, la suite a tendance à beaucoup plus décroitre qu'à croitre. Regardons ce qui se passe pour le deuxième point après une transition F->C. Le deuxième point est déjà beaucoup plus sombre. Il y a plusieurs raisons: -Le fait de faire une moyenne: il faut donc que l'autre point qui entre dans la moyenne soit aussi très proche d'un maximum sinon le nouveau point est déjà loin du maximum (1). -Le fait de faire une moyenne d'entiers: celle-ci est une fois sur deux en moyenne inférieure de 0,5 à la vraie moyenne car elle est arrondie vers le bas. -Il se peut qu'il y ait une légère asymétrie dans la façon de tirer la partie aléatoire.
Donc après une transition F->C, celle-ci décroit assez vite et n'est plus à portée d'une transition dans l'autre sens C->F. Dès qu'elle est en dessous de 95 ce n'est plus possible. C'est aussi pour cela que les points brillants sont isolés car la deuxième transition doit apparaitre très vite après la première sans quoi elle n'est plus possible.
A propos du point noté (1) ci-dessus, cela explique que les comètes qui durent le plus longtemps le long de la spirale sont celles qui sont épaisses car la moyenne sur le deuxième tour de spirale se fait entre valeurs proches.
#11 - 15-04-2012 14:35:13
- w9Lyl6n
- Professionnel de Prise2Tete
- Enigmes résolues : 26
- Messages : 220
RGB attack!! uen énigme informatique
rivas : je ne suis pas d'accord que tu ne sois pas d'accord avec moi Si il n'est pas impossible théoriquement qu'il y ait un dépassement claire->foncé, en pratique on n'en observe pratiquement pas (personnellement je n'en trouve pas)
En fait, tu donnes tout les éléments de la réponse (pour le tirage aléatoire en revanche, je fait confiance à la fonction pour être de moyenne nulle). Mais tu n'en tires pas les bonnes conclusions: tu sous estimes ton deuxième tiret, dont l'effet à long terme explique l'environnement "sombre" qui influe comme décrit au point (1) en tirant rapidement la moyenne vers le bas à chaque transition sombre->claire.
En modifiant légèrement le tirage aléatoire, on peut annuler l'asymétrie, et même l'inverser.
#12 - 15-04-2012 14:42:09
- rivas
- Elite de Prise2Tete
- Enigmes résolues : 48
- Messages : 1106
- Lieu: Jacou
rgb attavk!! une énigme informatique
Je suis pas d'accord uniquement sur ton assertion qu'il n'y a pas de transition C->F. Comment expliques-tu les points isolés alors? Ce sont bien des transitions C->F juste après un F->C. Pourquoi dis-tu que tu n'en vois pas?
Je pense que nous sommes d'accord sur le reste. Je ne sous-estime pas du tout le point 2, au contraire. c'est bien pour cela que je le cite et je suis tout-à-fait d'accord que c'est à cause de lui que le décor est globalement sombre.
J'ai oublié de répondre sur l'inversion de la tendance. Je pense qu'on peut le faire simplement en modifiant le tirage aléatoire pour ne pas aller de -5 à 5 mais de -5 à -1 et de 95 à 99 (le 0 ne servant à rien).
On peut peut-être aussi compenser l'effet de l'arrondi par le tirage aléatoire en tirant les nombres de -4 à +6 plutôt que de -5 à +5.
#13 - 15-04-2012 14:56:26
- w9Lyl6n
- Professionnel de Prise2Tete
- Enigmes résolues : 26
- Messages : 220
RGB attack!! une énnigme informatique
Ah oui! je les avais oublié ceux la
Remarque précédente: En pratique, l’échantillonnage des points le long de la spirale fait qu'on tombe plusieurs fois sur certains pixels après arrondis des coordonnés. Dans ce cas on saute le pixel et on garde la valeur du c'' précédemment calculé pour le prochain calcul.
J'ajoute à ça que calquer une spirale sur un quadrillage ne marche pas très bien en pratique: Il faut trouver un compromis entre faire une spirale très serré pour ne sauter aucun point, quitte à faire exploser la complexité en repassant 5 ou 6 fois par pixel en moyenne, ou alors on accepte que quelques point reste en blanc, tant pis
Pour les modifications du tirage aléatoire, elle me semble un peu brutale non? l'effet à compenser est très léger
#14 - 15-04-2012 15:55:24
- w9Lyl6n
- Professionnel de Prise2Tete
- Enigmes résolues : 26
- Messages : 220
rgn attack!! une énigme informatique
Edit: En considérant le pire des cas (quand l'inclinaison est de 45°) j'ai pu recalibrer la spirale pour qu'elle passe 2 fois en moyenne par chaque point mais sans en oublier aucun: il suffit de s'arranger pour que les pixels de la spirale (comme sur le premier dessin) soit de coté racine(2)/2 pixels.
#15 - 16-04-2012 11:41:52
- rivas
- Elite de Prise2Tete
- Enigmes résolues : 48
- Messages : 1106
- Lieu: Jacou
RGB attack!! une énige informatique
As-tu essayé cet algo pour tracer ta spirale? http://fr.wikipedia.org/wiki/Algorithme … d%27Andres Il suffit de tracer des cercles concentriques en partant toujours du même point, par exemple sur l'axe des x et augmenter le rayon de 1 à chaque tour. Ca permettrait d'éviter les trous et de ne pas passer plusieurs fois par le même point.
D'autre part pour l'ajustement, tu as raison, j'étais un peu brutal. Pour être plus précis, une fois sur deux, la moyenne est 0,5 trop petite soit un décalage de -0,25. Il faut donc que la valeur aléatoire permettent de compenser cela. En admettant que la variable soit centrée correctement, il faut donc un intervalle de 0,5 plus grand sur la partie positive, soit un tirage de -5 à +5,5 au lieu de -5 à +5. Ceci n'étant pas possible en entier, il faudrait faire comme suit (avec tes notations): r valeur aléatoire entre -10 et 11. R'' = (R+R'+r)/2
Et idem pour les autres.
Pour les points isolés et la transition C->F, j'ai regardé ton dessin en zoom et il y a bien des points totalement isolés et NON blancs (donc pas des points sauté par l'algo). Il reste possible que leur isolement vienne de l'algo mais ça serait vraiment bizarre. De plus rien dans les formules n'empêche cette transition de se produire (même si sa probabilité est très faible).
#16 - 16-04-2012 15:41:47
- w9Lyl6n
- Professionnel de Prise2Tete
- Enigmes résolues : 26
- Messages : 220
RGB attack!! une énigme ifnormatique
Merci pour l'algo je vais essayer de l'implémenté, ça sera beaucoup plus beau que de passer par des flottants avec des cos et des sin...
Pour la modification de la fonction de mélange, tu as fais exactement comme moi, bravo.
Quant au débat sur les points isolés, j’attends d'avoir implémenté la nouvelle version de l'algo, parce qu'avec l'ancienne les cercles de la spirale pouvaient être discontinues, à cause les pixels déjà remplis qui étaient sautés.
#17 - 16-04-2012 16:49:30
- rivas
- Elite de Prise2Tete
- Enigmes résolues : 48
- Messages : 1106
- Lieu: Jacou
rgb attzck!! une énigme informatique
Merci à toi. C'était sympa comme sujet.
#18 - 18-04-2012 12:29:05
- NickoGecko
- Elite de Prise2Tete
- Enigmes résolues : 49
- Messages : 1821
RGB attack!! une énigme nformatique
Bonjour,
Je me suis penché sur le sujet, mais pourrais-tu STP détailler ta génération d'une spirale en coordonnées cartésiennes ou polaires ?
en polaires : > le pas d'incrémentation de l'angle > celui du rayon en continu fonction de l'angle, ou par "sauts" discontinus tous les 2 Pi ?
J'essaye de colorier des cases Excel et pas des pixels, mais cela me fait partir dans une spirale "carrée" ....
Sinon, intuitivement, les phénomènes ne sont-ils pas justement dûs au croisement d'une matrice orthogonale des pixels de l'écran et d'une spirale ? Sans parler du fait qu'il y a en fait trois couches (R,G,B) de pixels ...
Merci, à suivre !
Il aurait pu pleuvoir, con comme il est ! (Coluche)
#19 - 18-04-2012 14:00:07
- w9Lyl6n
- Professionnel de Prise2Tete
- Enigmes résolues : 26
- Messages : 220
rgb attack!! une énigme ibformatique
NickoGecko : ne te prend pas la tête avec la spirale, elle est là pour faire joli. La première version de mon algo était linéaire et faisait déjà apparaitre le même phénomène:
Je vous passe même le programme en Ocaml:
La fonction de mélange des couleurs est optimisée pour mélanger les deux couleurs d'un coup, mais elle est complètement équivalente à celle que j'ai donné précédemment.
#20 - 24-04-2012 12:07:34
- w9Lyl6n
- Professionnel de Prise2Tete
- Enigmes résolues : 26
- Messages : 220
RGB atttack!! une énigme informatique
Il est l'heure de donner la solution, merci aux participants (256 heures, même pour une énigme informatique, c'était peut être un peu long )
On trouve déjà toutes les réponses dans ma conversation avec rivas (encore bravo ) mais je vais tout de même tout résumer ici:
i) Quelques constats: _ globalement, en s'éloignant du centre, la spirale s’assombrie _ des sauts de couleur d'une des 3 couleurs de base apparaissent aux endroit où la couleur est très sombre, le saut de couleur s'étale ensuite grâce à la fonction de mélange formant la queue de la comète.
ii) Explications _ Les sauts de couleur: ils viennent du fait qu'un seul entier codes en même temps les trois composantes Rouge,Verte, et Bleu. A chaque passage de retenu dans un sens ou dans l'autre (exemple : 99+3=02 je retient 1, 03-5=98 je retient 1) il est normale d'observer un saut brutale de couleur. _ Les sauts de couleurs majoritaires du foncé vers le claire : ils sont dû à la couleur sombre prédominante: comme les couleurs proche sont mélangés entre elles en permanence, toutes les couleurs claires sont rapidement dilué dans le sombre. Cela empêche pratiquement les dépassement claire->sombre. _ L'assombrissement: il vient directement de la formule du mélange. Plus précisément: A chaque division par 2 dans la moyenne (R+R')/2, le résultat est arrondi à l'entier inférieur. Donc une fois sur deux quand R+R' est impair, on perd 0.5 de luminosité (pareille pour V+V' et B+B'). Donc en moyenne, chaque composante s’assombrit de 1/4 à chaque mélange. Conséquence : après un rayon d'environ 4 fois l'intensité au centre d'une composante en pixels (4*99 au maximum), les première comète apparaissent.
iii) Correction de l'assombrissement
Il suffit de modifier la fonction de mélange, en se servant de la composante aléatoire ajouté pour compasser les 1/4 d'assombrissement. On peut facilement ajouter 1/2 en plus en tirant r, v et b entre -5 et 6 (moyenne (-5+6)/2=1/2) mais c'est trop, on inverserait le phénomène avec un éclaircissement.
La solution est de faire passer le tirage aléatoire dans la parenthèse de la moyenne, ainsi une fois sur deux il compense directement l'erreur d'arrondie en prenant l'arrondie à la valeur supérieur: R'' = (R+R'+r)/2 où r est tiré entre -10 et 11 idem pour V et B.
Voilà ce que l'on peut obtenir:
A noter que la dernière spirale est en fait celle obtenu avec la variante du procédé la plus proche de l'énigme, pour les autres affin d'augmenter l'effet de spirale, les couleurs "de la ligne du dessous" pour le mélange sont prises 2 pixels en amont dans le sens direct.
rivas :finalement je n'ai pas utilisé l'algo d'Andres pour les cercles, cela compliquait trop les choses (le sens de tracé varies suivant les portions du cercle, et il est difficile de récupérer des pixels du cercle du dessous).
#21 - 24-04-2012 23:38:44
- rivas
- Elite de Prise2Tete
- Enigmes résolues : 48
- Messages : 1106
- Lieu: Jacou
RGB attack!! une énigme informatiqu
Merci de ce résumé détaillé et de cette énigme que j'ai trouvée intéressante.
La dernière image me fait vraiment penser à du van Gogh...
#22 - 26-04-2012 14:58:49
- Nombrilist
- Expert de Prise2Tete
- Enigmes résolues : 10
- Messages : 568
RGB attaack!! une énigme informatique
A quand un algorithme de peinture à 10 millions d'euros ?
#23 - 26-04-2012 22:52:31
- golgot59
- Elite de Prise2Tete
- Enigmes résolues : 48
- Messages : 1494
- Lieu: Coutiches
RGB attack!! une énigm einformatique
Comme souvent, très très intéressant !
J'ai quand même une petite question : Sur le tout premier graphique issu de l’algorithme, on voit effectivement de jolies comètes apparaître, mais on voit aussi un peu plus dans les coins revenir la spirale colorée... Quid ?
#24 - 26-04-2012 23:33:15
- w9Lyl6n
- Professionnel de Prise2Tete
- Enigmes résolues : 26
- Messages : 220
rgv attack!! une énigme informatique
golgot59 : la fonction pixel_color renvoie la couleur blanche (la couleur de l'arrière plan) si on lui demande la couleur d'un pixel en dehors de la fenêtre, ce qui explique que les couleurs soient éclaircies dans les coins de la fenêtre. On observait aussi la même chose sur les 3 derniers exemples avant que je les recadre.
#25 - 27-04-2012 02:16:28
- golgot59
- Elite de Prise2Tete
- Enigmes résolues : 48
- Messages : 1494
- Lieu: Coutiches
RGB attac!! une énigme informatique
Lol, OK. Merci pour l'explication !
Mots clés des moteurs de recherche
|
|