<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Proce55ing | Dr. Goulu</title><link>https://drgoulu.com/tags/proce55ing/</link><atom:link href="https://drgoulu.com/tags/proce55ing/index.xml" rel="self" type="application/rss+xml"/><description>Proce55ing</description><generator>HugoBlox Kit (https://hugoblox.com)</generator><language>fr-FR</language><lastBuildDate>Mon, 03 Oct 2011 00:00:00 +0000</lastBuildDate><image><url>https://drgoulu.com/media/icon_hu_eee4a95885829ab2.png</url><title>Proce55ing</title><link>https://drgoulu.com/tags/proce55ing/</link></image><item><title>Pavages aléatoires</title><link>https://drgoulu.com/2011/10/03/pavages-aleatoires/</link><pubDate>Mon, 03 Oct 2011 00:00:00 +0000</pubDate><guid>https://drgoulu.com/2011/10/03/pavages-aleatoires/</guid><description>&lt;p&gt;Il devient de plus en plus difficile de choisir un carrelage original pour sa salle de bains.&lt;/p&gt;
&lt;p&gt;Depuis le XVème siècle, 17 types de
 réguliers différents sont utilisés dans les décorations de l&amp;rsquo;
. En 1891, le mathématicien russe Evgraf Fedorov démontre que le nombre de pavages réguliers distincts  vaut &amp;hellip; 17
.  Et ce n&amp;rsquo;est qu&amp;rsquo;entre 1968 et 1984 qu&amp;rsquo;on parvient à classifier toutes les formes de pavés possibles en 19 catégories
. Depuis, les carreleurs ne peuvent se distinguer que par des motifs et des couleurs, plus par la géométrie.&lt;/p&gt;
&lt;p&gt;En 1974, le
crée un choc : il est possible de recouvrir le plan avec des pavés de deux formes différentes arrangés selon des règles rigoureuses, mais ne générant pas de motif périodique. En 1994, Radin et Conway en proposent un autre, le &amp;ldquo;
&amp;rdquo;. Voilà pour le XXème siècle.&lt;/p&gt;
&lt;p&gt;En 2011, c&amp;rsquo;est John Shier, un &amp;ldquo;artiste algorithmique&amp;rdquo; qui vient d&amp;rsquo;ouvrir tout grand la porte à une infinité de nouveaux pavages. Sa méthode permettent de couvrir le plan avec des pavés de presque n&amp;rsquo;importe quelles formes, mais de surface décroissantes
,
. Le principe semble tout simple : on place le plus grand pavé au hasard, puis le suivant en taille au hasard dans une surface libre et ainsi de suite.&lt;/p&gt;
&lt;figure class="aligncenter" style="max-width: 420px; width: 100%;"&gt;&lt;a href="http://john-art.com/stat_geom.html" target="_blank" rel="noopener"&gt;&lt;img src="https://drgoulu.com/posts/2011/images/400fcf9e5415a8d1b3b559ecdffe0c43_hu_9da502ea25a62906.webp" srcset="https://drgoulu.com/posts/2011/images/400fcf9e5415a8d1b3b559ecdffe0c43_hu_9da502ea25a62906.webp 320w, https://drgoulu.com/posts/2011/images/400fcf9e5415a8d1b3b559ecdffe0c43_hu_bda96f5d30bf8c8.webp 480w, https://drgoulu.com/posts/2011/images/400fcf9e5415a8d1b3b559ecdffe0c43_hu_456ef22a8d18723d.webp 760w" sizes="(max-width: 640px) 100vw, 420px" alt="Le pavage de John Shier le plus simple" loading="lazy" class="rounded-lg shadow-sm w-full h-auto" data-zoomable /&gt;&lt;/a&gt;&lt;figcaption&gt;Le pavage de John Shier le plus simple&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;Le problème est que si on réduit la taille des pavés trop vite on ne recouvre pas tout le plan, et si on réduit trop lentement, on risque d&amp;rsquo;être &amp;ldquo;coincé&amp;rdquo; à ne pas pouvoir placer un pavé. L&amp;rsquo;astuce consiste à attribuer au i-ème pavé une surface de A0/ic. Dans ce cas, la surface totale vaut :&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
\[mathjax\]$$A_{total}=A_{0}\sum_{i=0}^{\infty}i^{-c}$$&lt;p&gt;On reconnait en passant la
, qui converge pour c&amp;gt;1. Grâce à cette formule, une fois choisi un c, la formule permet de calculer la surface A0 qui garantit qu&amp;rsquo;il ne restera plus un seul espace libre après avoir placé une infinité de pavés. En pratique on obtient d&amp;rsquo;excellent remplissages avec quelques milliers de pavés, un peu de patience et un bon programme. Paul Bourke décrit tout ceci en détail sur une page
agrémentée de magnifiques exemples:&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;Il a même étendu la méthode à la 3D :&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;Pour ma part, j&amp;rsquo;ai réalisé la petite application ci-dessous en
 (disponible aussi
 avec son code source) pour expérimenter un peu cet algorithme que je trouve spectaculaire:&lt;/p&gt;
&lt;hr&gt;
\[processing sketch="RandomTiling"\]&lt;hr&gt;
&lt;p&gt;En pressant sur les touches 0,1,3,4,5,6 vous pouvez changer la forme des pavés à la volée, et la touche espace relance un pavage. Contrairement à Shier et Bourke, je ne pave pas un tore mais un rectangle, en prenant garde à ce que les pavés ne soient pas &amp;ldquo;coupés&amp;rdquo; par les bords. En plus je me suis amusé à implémenter les pavés en forme d&amp;rsquo;étoiles, en prévision d&amp;rsquo;une carte de Noël. Mignon, n&amp;rsquo;est-ce pas ? Bon, il reste pas mal de noir car la détection d&amp;rsquo;intersection entre étoiles est très lente, il faudrait améliorer ça.&lt;/p&gt;
&lt;figure class="aligncenter" style="max-width: 600px; width: 100%;"&gt;&lt;a href="images/ee578774ff1f481e54dd991d9e1d7b9e.png" target="_blank" rel="noopener"&gt;&lt;img src="https://drgoulu.com/posts/2011/images/ee578774ff1f481e54dd991d9e1d7b9e_hu_e7ff54c0d05d293e.webp" srcset="https://drgoulu.com/posts/2011/images/ee578774ff1f481e54dd991d9e1d7b9e_hu_e7ff54c0d05d293e.webp 320w, https://drgoulu.com/posts/2011/images/ee578774ff1f481e54dd991d9e1d7b9e_hu_f815510c03a744e0.webp 480w, https://drgoulu.com/posts/2011/images/ee578774ff1f481e54dd991d9e1d7b9e_hu_4a9d5bbaaa2791b.webp 640w" sizes="(max-width: 640px) 100vw, 600px" alt="stars" loading="lazy" class="rounded-lg shadow-sm w-full h-auto" data-zoomable /&gt;&lt;/a&gt;&lt;figcaption&gt;Géantes rouges et naines bleues&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;&lt;em&gt;ajout du 8/10/11&lt;/em&gt; : j&amp;rsquo;ai présenté hier un 
 décrivant la conception de ce programme.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;edit du 20/9/13&lt;/em&gt; : l&amp;rsquo;applet utilise maintenant Processing.js : drgoulu.com n&amp;rsquo;a plus besoin de Java !&lt;/p&gt;
&lt;p&gt;Il y a encore (ou déjà&amp;hellip;) 2 bugs connus, si ça vous dit de vous y mettre :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;le pavage bloque parfois, surtout avec les triangles ou étoiles, il faut que j&amp;rsquo;ajoute un moyen d&amp;rsquo;ajuster la constante c&amp;hellip;&lt;/li&gt;
&lt;li&gt;des intersections entre cercles et polygones subsistent. Normal, j&amp;rsquo;ai eu la flemme d&amp;rsquo;implanter ça.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Une autre amélioration intéressante serait de remplir l&amp;rsquo;intérieur des pavés avec d&amp;rsquo;autres pavés&amp;hellip;&lt;/p&gt;
&lt;h3 id="références"&gt;Références:&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span id="ref-1"&gt;&lt;/span&gt;Thérèse Eveilleau
&amp;rdquo; avec animations flash&lt;/li&gt;
&lt;li&gt;&lt;span id="ref-2"&gt;&lt;/span&gt;Xavier Hubaut &amp;ldquo;
&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;span id="ref-3"&gt;&lt;/span&gt;John Shier &amp;ldquo;
&amp;quot;, Hyperseeing, summer 2011 issue, pp. 131-140, published by ISAMA (International Society of the Arts, Mathematics, and Architecture).&lt;/li&gt;
&lt;li&gt;&lt;span id="ref-4"&gt;&lt;/span&gt;John Shier &amp;ldquo;
&lt;/li&gt;
&lt;li&gt;&lt;span id="ref-5"&gt;&lt;/span&gt;Paul Bourke &amp;ldquo;
&amp;quot;, July 2011&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>Optimisation de la Joconde</title><link>https://drgoulu.com/2010/06/14/optimisation-de-la-joconde/</link><pubDate>Mon, 14 Jun 2010 00:00:00 +0000</pubDate><guid>https://drgoulu.com/2010/06/14/optimisation-de-la-joconde/</guid><description>&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt=""
srcset="https://drgoulu.com/posts/2010/images/10c3a606506bb2299f7b51b61b0ea16f_hu_8bcd780715f0223d.webp 320w, https://drgoulu.com/posts/2010/images/10c3a606506bb2299f7b51b61b0ea16f_hu_315b0c3a1d12812b.webp 400w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://drgoulu.com/posts/2010/images/10c3a606506bb2299f7b51b61b0ea16f_hu_8bcd780715f0223d.webp"
width="400"
height="400"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
Voici enfin l&amp;rsquo;occasion de consacrer un article marrant au célèbre mais barbant &amp;ldquo;
&amp;rdquo;. J&amp;rsquo;ai réalisé une applet en processing qui dessine Mona Lisa avec une seule ligne brisée zig-zaguant entre 100'000 points sans jamais s&amp;rsquo;entrecouper. De plus la ligne n&amp;rsquo;a ni début ni fin, elle forme un cycle. Autrement dit, on peut dessiner la Joconde comme un cercle déformé, sans lever le crayon&amp;hellip; Voici ce que ça donne ( c&amp;rsquo;est publié aussi 
:&lt;/p&gt;
\[processing\]&lt;p&gt;TSPart.pde&lt;/p&gt;
\[/processing\]&lt;p&gt;Le dessin a initialement été produit par 
, un prof de maths allemand qui étudie l&amp;rsquo; &amp;ldquo;Opt Art&amp;rdquo;, l&amp;rsquo;utilisation de techniques d&amp;rsquo;optimisation dans l&amp;rsquo;art. La
est assez simple:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;on prend une image en &amp;ldquo;niveaux de gris&amp;rdquo;&lt;/li&gt;
&lt;li&gt;on dispose un grand nombre N de points sur l&amp;rsquo;image, resserrés dans les zones sombres, plus espacés dans les zones claires. 
a eu l&amp;rsquo;idée d&amp;rsquo;utiliser l&amp;rsquo;algorithme &amp;ldquo;
&amp;rdquo;
qui fait ça de manière remarquable.&lt;/li&gt;
&lt;li&gt;Ensuite, il suffit de résoudre le problème du voyageur de commerce à N villes pour obtenir le circuit le plus court entre les N points, donc sans intersection.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Quand vous lisez &amp;ldquo;il suffit de..&amp;rdquo;  , il faut vous méfier. C&amp;rsquo;est souvent sous cette formule lapidaire qu&amp;rsquo;on cache l&amp;rsquo;os. En réalité, le problème du voyageur de commerce (&amp;ldquo;Travelling Salesman Problem&amp;rdquo; en anglais, TSP dans la suite) est un problème &amp;ldquo;NP-complet&amp;rdquo;, un de ceux qui nécessite un nombre &amp;ldquo;non polynomial&amp;rdquo; d&amp;rsquo;opérations pour sa résolution, &amp;ldquo;non polynomial&amp;rdquo; étant un euphémisme. En l&amp;rsquo;occurence, il faut en principe mesurer la longueur des N! (N
&amp;hellip;)
possibles passant par les N points pour déterminer lequel est le plus court. Au delà de N=20, on oublie.&lt;/p&gt;
&lt;p&gt;Mais le TSP a un intérêt certain pour beaucoup d&amp;rsquo;applications pratiques dans lesquelles N est bien plus grand, ce qui justifie la recherche d&amp;rsquo;algorithmes efficaces mêmes s&amp;rsquo;ils ne fournissent pas la solution absolument optimale. Le site
est une mine d&amp;rsquo;exemples et d&amp;rsquo;infos sur les progrès de la résolution du TSP. On y trouve également
, un solveur de TSP open source très performant basé sur la
. Il détient le record du plus gros TSP résolu, pour N=85'500 calculé en  135 années de CPU, mais résout des problèmes raisonnables en un temps qui l&amp;rsquo;est aussi. J&amp;rsquo;ai eu l&amp;rsquo;occasion de m&amp;rsquo;en servir pour optimiser le parcours d&amp;rsquo;une perceuse de circuits imprimés où N valait autour de 1000: quelques minutes de calcul permettent d&amp;rsquo;économiser des secondes de travail par circuit. Il existe d&amp;rsquo;ailleurs un
pour résoudre vos (pas trop gros) problèmes de TSP.&lt;/p&gt;
&lt;p&gt;Pour revenir à la Joconde, elle fait l&amp;rsquo;objet d&amp;rsquo;un petit
car il n&amp;rsquo;est pas sur que le chemin affiché dans l&amp;rsquo;image soit le plus court possible entre les 100'000 points définis par R. Bosch. Ce chemin, calculé par Yuichi Nagata avec Concorde a une longueur de 5'757'191 unités, alors qu&amp;rsquo;on a pu déterminer que le chemin ne peut pas être plus court que 5'757'044 unités. Il est donc possible qu&amp;rsquo;il existe un chemin encore plus court de 0.0026% ! Tout ce qu&amp;rsquo;il vous faut pour le trouver, c&amp;rsquo;est le fichier 
, et touiller un peu le code de Concorde ou de son concurrent 
. Ah, et un superordinateur peut être utile aussi.  Si vous trouvez le chemin le plus court, vous gagnerez la somme mirobolante de $100 !&lt;/p&gt;
&lt;p&gt;&lt;em&gt;edit du 20/9/13&lt;/em&gt; : l&amp;rsquo;applet utilise maintenant Processing.js, mais le chargement des données est très lent&amp;hellip;&lt;/p&gt;
&lt;h3 id="références"&gt;Références:&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span id="ref-1"&gt;&lt;/span&gt;Robert Bosch, &amp;ldquo;
&amp;quot;, Math Horizons, February 2006, pages 6&amp;ndash;9.&lt;/li&gt;
&lt;li&gt;&lt;span id="ref-2"&gt;&lt;/span&gt;Adrian Secord, &amp;ldquo;
&amp;rdquo;, 2002, Proceedings of 2nd
, Annecy, p 37-43&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>Proce55ing</title><link>https://drgoulu.com/2008/04/03/processing/</link><pubDate>Thu, 03 Apr 2008 00:00:00 +0000</pubDate><guid>https://drgoulu.com/2008/04/03/processing/</guid><description>&lt;p&gt;
est un langage de programmation, et même un environnement de développement d&amp;rsquo;applications graphiques temps réel interactives. Créé initialement par
et
pour des applications de visualisation de données, Processing est également apprécié de créateurs comme qui en tirent des oeuvres graphiques magnifiques.&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;&lt;em&gt;
de
Cliquez sur l&amp;rsquo;image pour la version interactive&lt;/em&gt;&lt;/p&gt;
\[vimeo 658158\]&lt;p&gt;&lt;em&gt;
de
musique &amp;ldquo;Lovely Head&amp;rdquo; de Goldfrapp&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;La
réalisées avec Proce55ing est réellement impressionnante. On trouve beaucoup d&amp;rsquo;autres
ou sur flickr
ou
.&lt;/p&gt;
&lt;p&gt;
s&amp;rsquo;y est mis aussi et a achevé de me convaincre de regarder Processing de plus près.&lt;/p&gt;
&lt;p&gt;Le langage Processing est fortement inspiré de Java, le système de développement est basé sur Java, et on peut exporter les applications sous forme d&amp;rsquo;applet Java. Pour commencer, on peut se débrouiller sans maitriser cette danse, juste avec des bases de programmation, mais pour faire des choses aussi sophistiquées que les exemples ci-dessus, il faut bien connaitre le graphisme 2D et 3D, voire OpenGL et les maths, mais surtout avoir un talent de graphiste pour que le résultat soit joli.&lt;/p&gt;
&lt;p&gt;Ma première application Processing est une version simplifiée et 2D de ma fameuse
.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;(Mise à jour du 15.1.2011)&lt;/em&gt; : Elle était depuis longtemps sur
, mais je peux enfin l&amp;rsquo;intégrer directement à ce blog :&lt;/p&gt;
\[processing width="600" height="400" file="/wp-content/uploads/2008/04/Galaxy.jar"\]&lt;p&gt;Chargement&lt;/p&gt;
\[/processing\]&lt;p&gt;En pressant sur les touches curseur vous pourrez modifier l&amp;rsquo;ellipsité et la torsion de la galaxie en temps réel. Cette première oeuvre est assez moche, heureusement quelqu&amp;rsquo;un en a beaucoup amélioré l&amp;rsquo;esthétique
.&lt;/p&gt;
&lt;p&gt;Pour vous mettre à Processing vous aussi :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;li&gt;lancez-vous à partir des nombreux exemples fournis&lt;/li&gt;
&lt;li&gt;consultez la liste des
pour éviter de réinventer la roue et devenir un vrai gourou&lt;/li&gt;
&lt;/ol&gt;</description></item></channel></rss>