dimanche 25 septembre 2016

Opérations sur les surfaces implicites avec PSTricks

Les opérations sur les solides (CSG - Constructive Solid Geometry) : fusion, intersection et différences, sont traitées de façon très efficace par POV-Ray. Sur le site de Friedrich A. Lohmueller dédiée à POV-Ray, Friedrich a écrit sur le sujet un cours très complet et joliment illustré :


On ne peut pas obtenir des résultats équivalents à ceux de POV-Ray avec PSTricks, mais en utilisant uniquement des surfaces implicites, on peut expérimenter les opérations booléennes sur ces surfaces. J’ai indiqué quelques références, mais vous trouverez sans peine sur le internet d’autres documents.
 Quelques images :
Fusion de 2 sphères
Intersection de 2 sphères
Différence entre un pseudo-cube et une sphère

Différence entre deux demi-sphères

Différence entre un plan et une sphère
Les blobby molécules

Le package a été mis-à-jour, il est contenu dans l'archive avec tous les exemples.

mardi 20 septembre 2016

Représentation des surfaces implicites avec PSTricks - 2

Quelques autres exemples de représentation de surfaces implicites avec la commande : \psImplicitSurface :

Le dossier zippé ci-dessous contient tous les fichiers et exemples (1) et (2) du package :

dimanche 18 septembre 2016

Représentation des surfaces implicites avec PSTricks

\psImplicitSurface est une commande additionnelle à ‘pst-solides3d’ permettant de représenter les surfaces implicites. Si vous ne connaissez pas la définition de ce type de surface, le Wikipedia en fait un exposé assez complet : https://en.wikipedia.org/wiki/Implicit_surface
Cette commande utilise l’algorithme “Marching Cubes”, tel qu’il est décrit par Paul Bourke :

http://paulbourke.net/geometry/polygonise/
c’est donc une adaptation en postscript incorporée à PSTricks.
Cette commande s’utilise très simplement car elle ne comprend qu’une option : [surface=tore]. ’surface’ doit être la définition de la surface étudiée. Le fichier “pst-implicitsurface.pro” contient la définition d’un certain nombre de surfaces, par exemple pour le tore, nous avons :
 /tore {
/plagesXYZ[% min max dx
[-2.0 2.0 0.2]
[-2.0 2.0 0.2]
[-1.0 1.0 0.2]
] def
/function {% x y z => isovalue
3 dict begin
/z exch def /y exch def /x exch def
1 x dup mul y dup mul add sqrt sub dup mul z dup mul add 0.25 sub % = 0
end
} def
} def
Les plages de variations des variables (x, y, z) et le pas de chacun de ces intervalles. Ensuite, c’est la définition de la fonction représentative de la surface à étudier. Toutes les nouvelles surfaces créées doivent suivre le même modèle. Cette commande peut utiliser toutes les options de pst-solides3d pour la représentation de la surface.
Voici quelques exemples, certains utilisent les surfaces déjà définies :

Les fichiers doivent être placés dans un même répertoire.

mercredi 7 septembre 2016

Les courbes de Bézier rationnelles quadratiques avec PSTricks (2)

Il s’agit d’une conversion en PSTricks de certaines figures qui illustrent les articles et cours de Lionel Garnier, comme par exemple :
Vous savez qu'il existe déjà une commande pour ces courbes de Bézier quadratiques dans le package ‘pst-bezier’ :
Cependant la commande de ce package ne permet pas l’emploi de variables calculées en postscript, ce qui est nécessaire lorsqu’on veut développer les étapes conduisant à déterminer toutes les caractéristiques de la conique. C’est pourquoi ce document comprend 2 commandes : \psCBRQ[w=w0 w1 w2](P0)(P1)(P2) qui est presque identique à celle du package, mais les valeurs des poids sont insérées dans la variable w, qui est l’un des paramètres de la commande.
La deuxième commande \psEtapesCBRQ[options](P0)(P1)(P2) est liée à un paramètre qui détermine l’étape de calcul concernée :[etape=1(ou 2 ou 3)], il y en a trois.
La mise en forme du schéma est délicate et on ne peut pas prévoir toutes les situations qui donneraient une figure  claire avec les symboles bien positionnés. C’est pourquoi il y a une deuxième option : [conique=\Parabole] ou \Ellipse ou \Hyperbole qui appelle un groupe de commandes dédiées à l’une des coniques en particulier. C’est donc à l’intérieur de ces commandes qu’il faudra aller faire des ajustements suivants les cas.
Le document pdf et source est ici :
Quelques images qui illustrent les différentes étapes vers les caractéristiques de la conique :
Parabole rationnelle quadratique de Bézier.
Ellipse
Hyperbole




jeudi 1 septembre 2016

Les courbes de Bézier rationnelles quadratiques

Le package pst-bezier traitait uniquement des courbes de Bézier polynomiales. Cependant, s'il est parfait pour l'interpolation, il ne peut modéliser que des arcs de parabole.
Il vient d'être complété par une commande sur les courbes de Bézier rationnelles quadratiques, lesquelles jouent un rôle fondamental pour la modélisation d'arcs de coniques. L'utilisation de points massiques permet de généraliser les courbes de Bézier classiques et de modéliser des demi-cercles, des demi-ellipses, des demi-paraboles, des branches d'hyperboles dans le plan affine euclidien. Avec cette nouvelle commande les points de contrôle de la courbe de Bézier sont soit des points pondérés de poids non nul, soit des vecteurs que l'on affecte d'un poids nul.
À partir d'une courbe de Bézier quadratique donnée, il est possible de déterminer la nature et les caractéristiques de la conique définie par cette courbe.
Cette nouvelle approche des courbes de Bézier est issue de la thèse de Jean-Paul Bécar et des travaux de Lionel Garnier et de ses collègues. La documentation du package comprend un exposé sur ces courbes de Bézier rationnelles quadratiques ainsi que des références de documents récents.


La documentation comprend 2 animations incluses dans le pdf, voici une adaptation de l'une d'elles au format Gif :

L'animation suivante de Lionel Garnier, illustre les différentes étapes  servant à déterminer les caractéristiques de la parabole de Bézier polynomiale. Chaque image affiche les différents résultats obtenus à chaque étape, par applications successives d'un changement de paramètre homographique(cliquez sur le lien pour lancer l'animation) :
Le cas suivant illustre les différentes étapes  servant à déterminer les caractéristiques de la parabole de Bézier non polynomiale(cliquez sur le lien pour lancer l'animation).
Sur ce dernier exemple, voici quelques explications de Lionel Garnier :
En fait, si ω0=ω1=ω2, via la formule du binôme de Newton, le dénominateur disparaît par simplification avec la valeur du poids du numérateur : la courbe est donc polynomiale et l'arc de parabole est borné. Si nous avons ω0=ω2=1 et ω1=-1, nous obtenons le complémentaire de l'arc précédent, le dénominateur s'annule pour t=1/2 et la courbe de Bézier est rationnelle.
En fait, les courbes de Bézier les plus utilisées sont les courbes polynomiales, mais les points à l'infini ne sont jamais atteints. Le modèle rationnel avec les points massiques est beaucoup plus riche puisque les points à l'infini sont atteignables et nous pouvons modéliser des arcs de coniques propres (bornées ou non) ainsi que les arcs non bornés de paraboles.
Cependant, la commande du package ne permet pas d'accéder aux caractéristiques de la conique. Une commande supplémentaire (qui hélas n'est pas compatible avec celle du package) permet d'obtenir les caractéristiques d'une parabole ou d'une ellipse (foyer et directrice de la parabole, centre, grand axe et petit axe pour l'ellipse) : il reste à traiter le cas de l'hyperbole. C'est une adaptation des fichiers Pov-Ray de Lionel Garnier.





Les fichiers concernant ces dernières images et l'animation Gif sont dans l'archive :


samedi 13 août 2016

Les cyclides de Dupin avec pst-solides3d (5)

Dans son livre “Mathématiques pour la représentation géométrique, la représentation 3D et la synthèse d’images” (éditions Ellipses), Lionel Garnier définit ainsi une surface parallèle à une cyclide (CD4) : «La surface parallèle, de paramètre ε, à une CD4 de paramètres a, c et μ est la CD4 de paramètres a, c et μ + ε.», en voici une illustration, la cyclide mère est représentée en totalité, tandis que la surface parallèle est coupée par le plan vertical de symétrie.

 Le fond est dû à  Thomas Söll ;
http://pstricks.blogspot.fr/2012/11/paysages-au-crepuscule-peints-avec.html

Cette animation a aussi été réalisée avec le package animate d'Alexander Grahn, en voici le listing à compiler pour en produire le pdf contenant l'animation.

\documentclass{article}
\usepackage[a4paper,margin=2cm]{geometry}
\usepackage[latin1]{inputenc}
\usepackage{times,mathtime}
\usepackage[T1]{fontenc}
\usepackage{pst-solides3d,pst-plot}
\usepackage{pst-slpe}
\usepackage{amsmath}
\usepackage{animate}
\title{Les cyclides de Dupin avec pst-solides3d (5)}
\date{13 août 2016}
\author{manuel.luque27@gmail.com}
\begin{document}
Dans son livre ``\textit{Mathématiques pour la représentation géométrique, la représentation 3D et la synthèse d'images}'' (éditions Ellipses), Lionel Garnier définit ainsi une surface parallèle à une cyclide (CD4) :
<<\textit{La surface parallèle, de paramètre $\epsilon$, à une CD4 de paramètres $a$, $c$ et $\mu$ est la CD4 de paramètres $a$, $c$ et $\mu+\epsilon$.}>>, en voici une illustration, la cyclide \textit{mère} est représentée en totalité, tandis que la surface parallèle est coupée par le plan vertical de symétrie.
\begin{center}
\begin{animateinline}[controls,palindrome,
                     begin={\begin{pspicture}(-6,-4)(8,6)},
                     end={\end{pspicture}}]{20}% 20 images/s
\multiframe{35}{r=4.5+0.25}{%
\psset[pst-solides3d]{viewpoint=100 70 40 rtp2xyz,Decran=30,lightsrc=viewpoint}
\psset{solidmemory}
\psframe[fillstyle=ccslope,sloperadius=14.3,slopeangle=-90,slopebegin=blue!10!white,slopeend=blue!10!black,
slopecenter={0.5 0},slopesteps=2000,linewidth=0pt,fading=true,startfading=0,endfading=1](-6,-4)(8,6)
\psset{linewidth=0.01,linecolor=blue}
\pstVerb{/a1 9 def /c1 3 def /mu 4 def /b1 a1 dup mul c1 dup mul sub sqrt def}%
\defFunction[algebraic]{CyclideDupin}(u,v){(mu*(c1-a1*cos(u)*cos(v))+b1^2*cos(u))/(a1-c1*cos(u)*cos(v))} % x
                                          {(b1*sin(u)*(a1-mu*cos(v)))/(a1-c1*cos(u)*cos(v))} % y
                                          {(b1*sin(v)*(c1*cos(u)-mu))/(a1-c1*cos(u)*cos(v))} % z
\psSolid[object=surfaceparametree,
         function=CyclideDupin,name=cyclide1,action=none,
         base=0 2 pi mul 0 2 pi mul,ngrid=36 36,
         fillcolor=red!50,incolor=white](0,0,0)
\defFunction[algebraic]{CyclideDupin2}(u,v){(mu2*(c2-a2*cos(u)*cos(v))+b2^2*cos(u))/(a2-c2*cos(u)*cos(v))} % x
                                          {(b2*sin(u)*(a2-mu2*cos(v)))/(a2-c2*cos(u)*cos(v))} % y
                                          {(b2*sin(v)*(c2*cos(u)-mu2))/(a2-c2*cos(u)*cos(v))} % z
\pstVerb{/a2 9 def /c2 3 def /mu2 \r\space def /b2 a2 dup mul c2 dup mul sub sqrt def}%
\psSolid[object=surfaceparametree,
         function=CyclideDupin2,
         base=-1 pi mul 0  0 2 pi mul,ngrid=24 36,linecolor=blue,name=cyclide2,action=none,
         fillcolor=yellow!50,incolor=white](0,0,0)
\psSolid[object=fusion,base=cyclide1 cyclide2]
}
\end{animateinline}
\end{center}
\end{document} 


jeudi 11 août 2016

Les cyclides de Dupin avec pst-solides3d (4)

Une animation analogue à celle réalisée précédemment avec Pov-Ray, mais cette fois-ci avec pst-solides3d :
Le fichier à compiler pour obtenir les images :
gif-tore-cyclide-spheres.tex