jeudi 12 novembre 2026

PSTricks et l'IA (1)

 Il y a quelque temps, j'avais reçu une demande d'aide concernant un schéma réalisé avec PSTricks, pour lequel l'IA n'avait pas réussi à trouver de solution. Habitué aux bidouillages entre PostScript et PSTricks, j'avais finalement pu proposer une réponse. Cette expérience m'a donné envie d'explorer plus systématiquement les capacités d'une intelligence artificielle, en l'occurrence Claude (Anthropic), à utiliser PSTricks et à concevoir des solutions dans cet environnement.

Je n'ai utilisé que la version gratuite, ce qui limitait mon temps d'utilisation à 10 minutes par jour, parfois même à moins de cinq minutes, selon les disponibilités du moment et mon propre emploi du temps. Je lui ai soumis plusieurs projets et je présente ici celui qui vient enfin d'aboutir : les pavages de la sphère. Cette aventure aura duré un peu plus d'un mois.

Il a fallu à Claude un certain temps pour assimiler la programmation PostScript — et non se contenter de transcrire un code Python — puis comprendre comment l'intégrer à PSTricks. Mais, une fois ces deux étapes franchies, les choses sont allées très vite. Claude propose alors des solutions d'une qualité et d'une efficacité difficilement égalables. C'est tout simplement impressionnant !

Claude effectue des tests avant de proposer une réponse. Cela ne dispense évidemment pas l'utilisateur de vérifier le résultat, ni d'intervenir pour modifier le code, apporter des corrections ou demander de nouvelles fonctionnalités. Mais cette capacité à dialoguer, à corriger et à améliorer progressivement une solution constitue un véritable atout. C'est, à mes yeux, une intelligence authentique !

Bien entendu, tout cela a un coût — et je ne parle pas ici du coût financier. La presse s'en est d'ailleurs largement fait l'écho !

Pour la présentation du projet, j'ai indiqué comme coauteurs Claude (Anthropic) et m.l., mes initiales en minuscules. Si je suis resté le maître d'œuvre de l'ensemble, l'IA a fourni la plus grande partie du travail de programmation PostScript, avec l'appui de Python pour déterminer les caractéristiques géométriques des solides : coordonnées des sommets, définition des faces et maillage par triangulation.

Un aparté sur la question des coauteurs.

On connaît la polémique suscitée par le livre de Thélyson Orélien, C'était ça ou mourir, lorsqu'on a appris que l'auteur avait eu recours à l'IA pour écrire son ouvrage. Pourtant, avant cette révélation, le livre avait reçu de nombreux éloges, notamment de la part de Pierre Assouline, membre du jury Goncourt, ainsi que des participants à l'émission La Grande Librairie, lors de son invitation.

Après la révélation de l'utilisation de l'IA, il est apparu que C'était ça ou mourir devait être retiré des listes de candidats à plusieurs prix, dont le prix Goncourt. Thélyson Orélien aurait peut-être dû indiquer sur la couverture que son livre était le fruit d'une collaboration entre deux coauteurs : l'IA et lui-même.

Peut-on attribuer un prix littéraire à un livre de grande qualité, mais écrit avec l'aide de l'IA ? Puis-je glisser ici, la célèbre citation d'Alfred de Musset : « qu’importe le flacon, pourvu qu’on ait l’ivresse ? ».  Faudrait-il alors couronner deux auteurs ? Je ne suis pas certain que cela corresponde à l'esprit des jurés de ces prix.

Revenons à PSTricks et au package pst-pavage-sphere, développé avec l'aide de Claude (Anthropic). Une question se pose désormais : ce package pourrait-il être accepté sur le CTAN ?
Enfin, j'avoue, le texte ci-dessus a été révisé par ChatGPT.

pst-pavage : pavages de la sphère par des polyèdres

pst-pavage est une extension de PSTricks qui trace le pavage de la sphère associé à un polyèdre : chaque face est projetée sur la sphère et devient un polygone sphérique, dont les côtés sont des arcs de grands cercles. C'est une aide pour réaliser des illustrations destinées à une projection sur écran ou à un document.

Ce que propose le package

  • 35 solides : solides de Platon, d'Archimède et de Catalan, prismes, antiprismes et leurs duaux ;
  • quatre modes de coloriage ;
  • la superposition d'un solide et de son dual ;
  • des faces transparentes, ou supprimées, avec une couleur propre pour l'intérieur ;
  • la numérotation des faces, pour les choisir facilement ;
  • le choix de la couleur et de l'épaisseur des arêtes, le contour facultatif ;
  • des animations, avec le package animate.

Un premier exemple

\documentclass{article}
\usepackage{pst-pavage}
\begin{document}
\begin{pspicture}(-3,-3)(3,3)
  \psPavageSphere[solide=14]
\end{pspicture}
\end{document}

La compilation est celle de tout document PSTricks :

latex   document
dvips   document
ps2pdf  -dALLOWPSTRANSPARENCY  document.ps

L'option -dALLOWPSTRANSPARENCY n'est nécessaire que pour la transparence. Dans un éditeur comme TeXworks ou WinEdt, elle se place dans les arguments de l'outil ps2pdf.

 

Les 35 solides

La clé solide prend une valeur de 0 à 34 : solides de Platon (0 à 4), d'Archimède (5 à 17), de Catalan (18 à 30), puis prisme, antiprisme, bipyramide et trapézoèdre (31 à 34, avec la clé ncotes pour le nombre de côtés). Le solide 14 de l'exemple ci-dessus est l'icosaèdre tronqué, le « ballon de football ».

 

Quatre manières de colorier

La clé coloriage : 0 une teinte par face ; 1 triangles de symétrie en damier ; 2 teinte selon le nombre de côtés ; 3 sphère grise, idéale pour mettre les arêtes en valeur.

\psPavageSphere[solide=14, coloriage=2]

Un solide et son dual


Avec dual=1, le dual est tracé par-dessus : ses arêtes en blanc, celles du solide en noir. Le tétraèdre est son propre dual : on obtient deux tétraèdres imbriqués (stella octangula).

\psPavageSphere[solide=3, coloriage=3, dual=1]
 

Faces transparentes, faces supprimées

Faces transparentes, faces supprimées, couleur de l'intérieur

 


\psPavageSphere[solide=14, coloriage=2, transp=6, opacity=0.3]
\psPavageSphere[solide=14, coloriage=0, sface=8 19 10 4, incolor=yellow]
\psPavageSphere[solide=1, coloriage=0, rAz=35, sface=0, incolor=cyan, arete=blue]
\psPavageSphere[solide=14, coloriage=2, rAz=35, supp=5, incolor=orange]
 
  • transp (par nombre de côtés) et tface (par numéro) rendent des faces transparentes ; opacity règle l'opacité, comme dans PSTricks ;
  • supp (par nombre de côtés) et sface (par numéro) retirent des faces : on voit alors l'intérieur du solide ;
  • incolor donne une couleur aux faces vues de l'intérieur ;
  • plusieurs valeurs sont possibles : transp=5 6, sface=1 2 3, ou même sface={0 1 10 {} for} pour les faces 0 à 10.


 

Numéroter les faces



Pour choisir des faces par leur numéro, il suffit de les afficher d'abord :

\psPavageSphere[solide=14, coloriage=2, numeros=1]
\psPavageSphere[solide=14, coloriage=2, numeros=1, tface=8 19 10 4, opacity=0.3]
 
 

Un fond coloré

Le package ne gère pas de fond : l'outil de PSTricks pour cela est \psframe, dessiné avant la sphère.

\begin{pspicture}(-3,-3)(3,3)
  \psframe*[linecolor=cyan!50](-3,-3)(3,3)
  \psPavageSphere[solide=14]
\end{pspicture}
 

Taille et point de vue

Le rayon se donne comme celui de \pscircle, en unités PSTricks (1 cm par défaut, multiplié par unit) : le défaut rayon=2.8 convient à une fenêtre \begin{pspicture}(-3,-3)(3,3). La vue est une projection orthographique : l'azimut rAz fait tourner le solide autour de l'axe vertical, l'élévation elevation l'incline.

Animer

\documentclass{standalone}
\usepackage{pst-pavage}
\usepackage{animate}
\begin{document}
\begin{animateinline}[autoplay,loop,controls]{20}
  \multiframe{60}{rAz=0+6}{%
    \begin{pspicture}(-3,-3)(3,3)
      \psPavageSphere[rAz=\rAz,solide=15,coloriage=2,elevation=25]%
    \end{pspicture}%
  }
\end{animateinline}
\end{document}
 

Le pas de 6° boucle exactement sur un tour. L'animation se lit dans Adobe Reader ou Acrobat. Avec l'option [export] du package animate, le PDF contient une page par image ; on les extrait avec Ghostscript, puis on assemble un GIF avec ImageMagick :

gswin64c -dNOPAUSE -dBATCH -sDEVICE=png16m -r200 -dGraphicsAlphaBits=4 -sOutputFile=image-%03d.png document.pdf
magick -delay 5 -loop 0 -colors 96 -layers Optimize image-*.png anim.gif

Sous PowerShell, les arguments de Ghostscript doivent être entre guillemets, par exemple "-sOutputFile=image-%03d.png".

 

Téléchargement et documentation

 pst-pavage-sphere.zip

ou

pst-pavage-sphere.zip 

Le package comprend pst-pavage.sty, pst-pavage.tex et pavages-sphere.pro, à placer dans le dossier du document. La documentation illustrée (pst-pavage-doc.pdf, 12 pages) décrit toutes les clés avec des exemples. Un script tetra.bat (Windows) et tetra.ps permettent aussi de produire les images avec Ghostscript seul, sans LaTeX. Les exemples sont à compiler.

 

Licence et crédits

Version 1.0, distribuée sous la licence LPPL (The LaTeX Project Public License).

Auteurs : m.l. et Claude, assistant d'intelligence artificielle développé par Anthropic ; le code a été mis au point au fil d'un dialogue, avec essais sous Windows.

PSTricks est une œuvre de Timothy Van Zandt, popularisée et développée par Denis Girou, maintenue actuellement par Herbert Voss.

Contact : manuel.luque27@gmail.com

mardi 21 novembre 2023

Courbes de dosage pH-métrique acide-base

Courbes de dosage pH-métrique acide-base avec le package `pst-dosage'. d’après l’article de Marc Chapelet : B.U.P. N°668

Il existe une ancienne version de pst-dosage :  

https://melusine.eu.org/syracuse/pstricks/pc/

que j’avais écrite en 1999, mais qui n’est plus utilisable, à moins d’y apporter l’une ou l’autre des corrections suivantes :
Dans l’appel du package, écrire ; \usepackage{pstricks,pst-dosage}

ou modifier le fichier pst-dosage.sty par ce contenu :
\RequirePackage{pstricks}
\ProvidesPackage{pst-dosage}[1999/10/24 package wrapper for PSTricks pst-dosage]
\input pst-dosage.tex
\endinput

L’article de Marc Chapelet est paru dans le bulletin de l’Union des Physiciens de novembre 1984, il est accessible avec le lien suivant :

https://bupdoc.udppc.asso.fr/consultation/article-bup.php?ID_fiche=8847

Dans la première version de `pst-dosage', j'avais adapté et reproduit, avec l'autorisation de l'auteur, son article, on pourra donc éventuellement se reporter à la documentation de la première version.

Cette version n’est plus compatible avec l’ancienne, même si les commandes ont des noms  identiques.

La nouvelle version est accessible ici :

http://manuel.luque.free.fr/pst-dosage/pst-dosage.zip

ou sur Drive : pst-dosage.zip

Quelques images extraites de la documentation ;

Dosage d’un acide fort concentration molaire CA, de volume VA par une base forte de concentration CB (illustration avec pst-labo)


 Dosage d’une base forte de concentration CB, de volume VB par un acide fort de concentration molaire CA.


 





Changer le papier millimétré :

Superposer des courbes

Faire des remarques sur une courbe.

Dosage d’une solution de vinaigre dilué au 1/10 par une solution de soude. Mise en évidence de la zone tampon autour de la demi-équivalence.


lundi 31 juillet 2023

Deux billes reliées par un ressort en chute libre verticale

Les schémas :

C'est un exercice que j'ai trouvé dans deux manuels de physique : 

"Lagrangian Dynamics" de Dare A.Wells (Schaum's Outline Series in Engineering 1967) pages 12-13 (Figure 2.8) et sous le titre "Système de deux masselottes en interaction élastique et en chute libre" exercice E25-1 dans le livre ``Leçons de physique'' de José-Philippe Pérez, Pujol, Lacoute et Desmeule édité par De Boeck en 2011, ce dernier propose une solution mais ne tient pas compte des rayons respectifs des billes.

Le ressort de longueur initiale (à vide) $l_0$ est sans masse et a pour raideur $k$, les deux billes ont pour masses et rayons respectifs $m_1$, $r_1$ et et $m_2$, $r_2$.

À l'origine des dates $t=0$ le système est en équilibre, le ressort est étiré par le poids de la bille 2.
\[
m_2g=k\Big(\big(z_2(0)-z_1(0)\big)-(r_1+r_2)-l_0\Big)
\]
$z_1(0)=0$ du fait du choix de l'origine de l'axe, on en déduit $z_2(0)$ :
\[
z_2(0)=(r_1+r_2)+l_0+\frac{m_2g}{k}
\]
et la position du centre de masse du système :
\[
z_G(0)=\frac{m_2}{m_1+m_2}\Big((r_1+r_2)+l_0+\frac{m_2g}{k}\Big)
\]
À un instant $t$ quelconque, la longueur du ressort vaut :
\[
l(t)=z_2(t)-z_1(t)-(r_1+r_2)
\]
et son allongement(ou compression) :
\[
\Delta l(t)=l(t)-l_0
\]
La relation fondamentale de la dynamique appliquée à chacune des deux billes donne :
\[
m_1\ddot{z_1}=\hphantom{-}k\big((z_2-z_1)-(r_1+r_2)-l_0\big) + m_1g
\]
\[
m_2\ddot{z_2}=-k\big((z_2-z_1)-(r_1+r_2)-l_0\big) + m_2g
\]
\begin{equation}
\ddot{z_1}=\hphantom{-}\frac{k}{m_1}\big((z_2-z_1)-(r_1+r_2)-l_0\big) + g
\end{equation}
\begin{equation}
\ddot{z_2}=-\frac{k}{m_2}\big((z_2-z_1)-(r_1+r_2)-l_0\big) + g
\end{equation}
on choisit comme variable  $Z=z_2-z_1$, $\ddot{Z}=\ddot{z_2}-\ddot{z_1}$.
\[
\ddot{Z}=-k\Big(Z-(r_1+r_2)-l_0\Big)\Big(\frac{1}{m_1}+\frac{1}{m_2}\Big)
\]
En posant $\mu=\dfrac{m_1m_2}{m_1+m_2}$, l'équation différentielle en $Z$ s'écrit :
\[
\ddot{Z}+\frac{k}{\mu}Z=\frac{k}{\mu}\big((r_1+r_2)+l_0\big)
\]
$\omega_0^2=\dfrac{k}{\mu}$
\[
\ddot{Z}+\omega_0^2Z=\omega_0^2(r_1+r_2+l_0)
\]
Compte-tenu des conditions initiales : $Z(0)=z_2(0)$ et $\dot{Z}(0)=0$, la solution de cette équation est :
\[
Z(t)=\frac{m_2g}{k}\cos\omega_0t+r_1+r_2+l_0
\]
On peut en déduire $z_1(t)$ et $z_2(t)$, sachant que :
\[
z_G(t)=\frac{m_1z_1(t)+m_2z_2(t)}{m_1+m_2}
\]
d'où
\[
z_1(t)=z_G(t)-\frac{m_2}{m_1+m_2}Z(t)
\]
Et que :
\[
z_G(t)=\frac{1}{2}gt^2+z_G(0)
\]
\[
z_2(t)=z_1(t)+Z(t)=z_G(t)+\frac{m_1}{m_1+m_2}Z(t)
\]

Le package "pst-massspring" ne comprend qu'une seule commande \psMS[options], dont les options et leurs valeurs par défaut sont les suivantes :

  1. t=0 : le temps en secondes ;
  2. m1=0.5 : masse de (1) en kg ;
  3. m2=2 : masse de (2) en kg ;
  4. k=7.5 : constante de raideur N/m ;
  5. l0=5 : longueur initiale du ressort.

Les rayons sont calculés à partir des masses (on suppose que toutes deux sont en acier). Ce package a été écrit pour créer des animations, en voici deux, la première avec les valeurs par défaut.


 La deuxième avec m1=m2=1 et k=10


Les fichiers sont compris dans l'archive .zip qui comprend aussi les packages pst-massspring et pst-ressort(ce dernier contient de nombreux autres exemples sur ce site).

Chute-libre-de-deux-masses-reliees-par-un-ressort.zip

ou sur drive 

Chute-libre-de-deux-masses-reliees-par-un-ressort.zip

La compilation des fichiers s'effectue avec la procédure classique pour PSTricks, par exemple :

LaTeX  pst-massspring-anim1.tex

dvips  pst-massspring-anim1.dvi

ps2pdf  pst-massspring-anim1.ps

convert   -delay 5 -density 100x100 -alpha remove pst-massspring-anim1.pdf[1-1000]  -loop 0  pst-massspring-anim1.gif

 

 

 

 

samedi 24 juin 2023

Couple d'al-Tusi, version de John Goodman

 Suite de https://pstricks.blogspot.com/2023/06/theoreme-de-la-hire-avec-pstricks.html

Pour remplacer l'engrenage intérieur de La Hire, John Goodman propose un train d'engrenages composé de 3 roues, avec l'avantage de pouvoir aussi modifier l'amplitude des oscillations.

https://en.wikipedia.org/wiki/Tusi_couple 

https://equation-of-time.info/introduction-1

 Voici 3 simulations réalisées avec PSTricks utilisant les idées de John Goodman, dont les fichiers sont ici :

http://manuel.luque.free.fr/LaHireTheorem/GoodmanTusiCouple.zip

ou

GoodmanTusiCouple.zip 

Ils sont à compiler par la procédure habituelle, voir l'exemple de : 

https://pstricks.blogspot.com/2023/06/theoreme-de-la-hire-avec-pstricks.html

 


 


La roue jaune est deux fois plus épaisse, elle peut donc rouler sur la roue fixe et entrainer au-dessus la roue bleue.

samedi 17 juin 2023

Théorème de La Hire avec PSTricks

 C'est une illustration du théorème de la Hire : 

https://fr.wikipedia.org/wiki/Th%C3%A9or%C3%A8me_de_La_Hire

d'après la maquette réalisée par Alexandre Clair et déposée au musée des Arts et Métiers :

arts-et-metier-Alexandre Clair 

il existe déjà de nombreuses et belles illustrations, en particulier en 3D de ce mécanisme de transformation d'un mouvement circulaire uniforme en un mouvement rectiligne sinusoïdal, mais bon il manquait celle réalisée avec PSTricks ! Les fichiers sont ici :

 http://manuel.luque.free.fr/LaHireTheorem/LaHireTheorem.zip

ou

LaHireTheorem.zip 

On compile  avec la séquence habituelle :

                     LaTeX LaHireTheorem.tex

                     dvips LaHireTheorem.dvi

                    ps2pdf  LaHireTheorem.ps

et pour le Gif :

 convert   -delay 5 -density 100x100 -alpha remove  LaHireTheorem.pdf  -loop 0  LaHireTheorem.gifLaHireTheorem.tex

On pourra modifier le nombre de dents(pourvu qu'elles restent dans le rapport 2/1) et que les roues conservent les rayons initiaux, ainsi :

\pstgears[Z1=36,Z2=18,m=0.2,

donne :






lundi 29 mai 2023

Deux ampoules à décanter et leur support pour pst-labo

 Le tube de la version précédente était peut-être un peu trop long, voici la nouvelle version  et un nouveau modèle d'ampoule que l'on trouve couramment dans les laboratoires.

Les options ont été revues en utilisant celles de pst-labo pour les aspects des deux phases, les explications sont dans le document pdf inclus dans l'archive zip.

Les fichiers sont ici :

http://manuel.luque.free.fr/SeparatyFunnel/SeparatyFunnel-v2.zip 

ou sur Drive :

Separaty Funnel v2

Les modèles :


Pour l’ampoule la commande est : \pstSeparateFunnel[[options] et pour le support \pstSupport.
Les options des ampoules à décanter(ce sont les valeurs par défaut qui sont indiquées), qui sauf
[OpenTap] et [separateFunnelType=1] sont déjà dans pst-labo : 

  1. [separateFunnelType=1], type d’ampoule (1 ou 2) ;
  2. Le booléen [bouchon] : true par défaut, ce booléen sera position à [bouchon=false] pour permettre l’écoulement d’un liquide ;
  3. Le booléen [OpenTap] : true par défaut pour le robinet ouvert, [OpenTap=false] pour le robinet fermé ;
  4. [niveauLiquide1=11] : niveau de la phase inférieure ;
  5. [niveauLiquide2=12] : niveau de la phase supérieure.

Pour les aspects des deux phases, il y a deux styles :
\newpsstyle{AqueoPhase}{linestyle=none,fillstyle=solid,fillcolor={[cmyk]{0.216,0.03,0,0}}}
\newpsstyle{OrganicPhase}{linestyle=none,fillstyle=solid,fillcolor={[cmyk]{0.2,0.1,0.5,0}}}
Pour représenter une ampoule vide, il faut mettre les deux liquides au même niveau 4 : [niveauLiquide1=4,niveauLiquide2=4]

Quelques images extraites de la documentation :







On pourra ajuster la hauteur de l'ampoule afin qu'elle s'ajuste au mieux dans le support avec l'astuce suivante :

\rput(0,0.4){\pstSeparateFunnel[OpenTap=false,bouchon,aspectLiquide2=OrganicPhaseMagenta,linewidth=0.07]}



mardi 16 mai 2023

Ampoule à décanter et son support pour pst-labo

 La nouvelle version avec deux types d'ampoules est ici :

https://pstricks.blogspot.com/2023/05/deux-ampoules-decanter-et-leur-support.html

 Suite à une remarque de Nicolas Le Boulaire ayant noté qu’il manquait une ampoule à décanter dans la verrerie proposée, en voici un modèle. Support et ampoule sont distincts.

Les fichiers et les explications  des deux commandes sont ici :

http://manuel.luque.free.fr/SeparatyFunnel/SeparatyFunnel.zip

ou

 ampoule à décanter + support

Quelques extraits de la documentation.

Pour l’ampoule la commande est : \pstSeparateFunnel[[options] et pour le support \pstSupport.
Commençons par les options de l’ampoule à décanter, qui sauf [OpenTap] sont déjà dans pst-labo : 

  1. Le booléen [bouchon] : true par défaut, ce booléen sera position à [OpenTap=false] pour permettre l’écoulement d’un liquide ;
  2. Le booléen [OpenTap] : true par défaut pour le robinet ouvert, [OpenTap=false] pour le robinet fermé ;
  3. [niveauLiquide1=11] : niveau de la phase inférieure (on ne descendra pas au-dessous de -1 (voir le schéma du corps de l’ampoule) ;
  4. [niveauLiquide2=12] : niveau de la phase supérieure (on n’ira pas au-dessus de 15).