Discussion:
Lissage de courbe sous Tikz
(trop ancien pour répondre)
ADelmotte
2012-11-04 09:26:24 UTC
Permalink
Bonjour,

Voulant développer un logo personnel sur base d'un dessin chinois (circonvolutions appelées Cinq nuages de félicité ; cette courbe, gravées sur un plateau, interrompue à un endroit et remplie d'encens, servait d'horloge [voir Robert Van Gulik dans un roman des enquêtes du juge Ti]).

Je l'avais d'abord créée en pstricks puis en tikz.
Cependant je remarque que la courbe avec pstricks est plus souple, régulière que celle produite par tikz.
Pour celui-ci, en changeant la tension l'arrondi s'améliore jusque 0.6 puis se dégrade de nouveau.

Je suppose aussi que je pourrais définir un \tickzset, comme discuté dans un file récent.

Comment remédier à cela ?

Tout autre commentaire est bienvenu.

Merci

Avec Tikz
\usepackage{tikz}
\usetikzlibrary{topaths,calc}
---------------------
\begin{tikzpicture}[line width=3pt,scale=0.45]
\draw[color=yellow,fill=yellow] plot coordinates {(5.6,7.5)(-5.6,7.5)(-8.9,-3.0)(0.1,-9.4)(8.9,-2.8)};
\foreach \angle in {72,144,216,288,360}
\draw[rotate=\angle,color=green,fill=yellow]
plot[smooth,tension=0.7] coordinates {%
(5.6,7.5)(3.3,11.1)(0,12.3)(-3.4,11.2)(-5.6,7.5)};
\foreach \angle / \couleur in {18/green,90/red,162/blue,234/black,306/orange}
\draw[rotate=\angle,color=\couleur] plot[smooth,tension=0.6] coordinates {%
(1.3,-1.45)(2.0,-1.0)(4.1,-3.4)(6.8,-4.4)(9.5,-3.3)%
(11.0,0)(10.4,2.5)(8.2,4.1)(5.5,2.5)(5.0,0)%
(5.8,-1.3)(7.3,-1.7)(8.1,-1.2)(8.7,0)(8.5,1.0)%
(7.8,1.4)(7.5,0)(6.9,-0.4)(6.3,0)(6.4,1.8)%
(7.8,2.9)(9.3,2.0)(9.8,0)(8.8,-2.3)(6.9,-3.2)%
(4.9,-2.4)(3.7,0)(3.5,1.8)(2.45,0.6)(1.55,0.95)};
\end{tikzpicture}

Avec pstricks
\usepackage{graphicx}
-----------------------
\resizebox{10cm}{10cm}{%
\psset{xunit=0.4mm,yunit=0.4mm}
\noindent\begin{pspicture}(-115,-115)(115,115)
\psset{linestyle=none}
\psset{linestyle=solid,linewidth=3pt,linecolor=green,fillstyle=solid,fillcolor=yellow}
\pscurve
(56,75)(33,111)(0,123)(-34,112)(-56,75)
(-56,75)(-95,66)(-117,38)(-117,2)(-89,-30)
(-89,-30)(-92,-70)(-72,-100)(-38,-111)(1,-94)
(1,-94)(39,-109)(72,-100)(93,-71)(89,-28)
(89,-28)(116,3)(117,38)(96,67)(54,75)
\multido{\i=18+72}{5}{%
\psset{linestyle=solid,linewidth=3pt,linecolor=black}
\rput{\i}(0,0){%
\pscurve
(15,-16)(13,-14.5)(20,-10)(41,-34)(68,-44)(95,-33) %(10,-15)
(110,0)(104,25)(82,41)(55,25)(50,0)
(58,-13)(73,-17)(81,-12)(87,0)(85,10)
(78,14)(75,0)(69,-4)(63,0)(64,18)
(78,29)(93,20)(98,0)(88,-23)(69,-32)
(49,-24)(37,0)(35,18)(24.5,6)(15.5,9)%8.5)%(19.5,20.5)
}%
}%
\end{pspicture}%
}

--
Alain
Paul Gaborit
2012-11-04 11:27:41 UTC
Permalink
À (at) Sun, 4 Nov 2012 01:26:24 -0800 (PST),
Post by ADelmotte
Voulant développer un logo personnel sur base d'un dessin chinois
(circonvolutions appelées Cinq nuages de félicité ; cette courbe,
gravées sur un plateau, interrompue à un endroit et remplie d'encens,
servait d'horloge [voir Robert Van Gulik dans un roman des enquêtes du
juge Ti]).
Je l'avais d'abord créée en pstricks puis en tikz.
Cependant je remarque que la courbe avec pstricks est plus souple,
régulière que celle produite par tikz. Pour celui-ci, en changeant la
tension l'arrondi s'améliore jusque 0.6 puis se dégrade de nouveau.
L'algorithme de "lissage" fournit par l'option 'smooth' de la commande
'plot' de TikZ est vraiment très basique et ne donne des résultats
acceptables qu'avec une série de points bien réparties (équidistants sur
la courbe) et sans variation brutale de courbure.
Post by ADelmotte
Je suppose aussi que je pourrais définir un \tickzset, comme discuté
dans un file récent.
Là, en l'occurrence, je ne vois pas en quoi cela pourrait servir.
Post by ADelmotte
Comment remédier à cela ?
Vous pouvez utiliser la bibliothèque TikZ 'hobby' qui implémente
l'algorithme de lissage utilisé par metaplot (et sans doute par PSTrikcs
mais je n'en suis pas sûr). Le temps de calcul est un peu plus long
(c'est TeX qui résoud le système d'équations pour faire le lissage) mais
le résultat sera sûrement plus conforme à vos attentes.

(La bibliothèque 'hobby' n'est disponible que dans les distributions
récentes comme TeXLive 2012 par exemple.)

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{hobby}
\begin{document}
\begin{tikzpicture}[line width=3pt,scale=0.45]
\draw[color=yellow,fill=yellow]
plot coordinates
{(5.6,7.5)(-5.6,7.5)(-8.9,-3.0)(0.1,-9.4)(8.9,-2.8)};

\foreach \angle in {72,144,216,288,360} {
\draw[rotate=\angle,color=green,fill=yellow]
(5.6,7.5) to[curve through={(3.3,11.1) .. (0,12.3) .. (-3.4,11.2)}]
(-5.6,7.5);
}

\foreach \angle/\couleur
in {18/green,90/red,162/blue,234/black,306/orange}{
\draw[rotate=\angle,color=\couleur]
(1.3,-1.45)
to[curve through={
(2.0,-1.0).. (4.1,-3.4) .. (6.8,-4.4).. (9.5,-3.3) ..%
(11.0,0).. (10.4,2.5) .. (8.2,4.1) .. (5.5,2.5) .. (5.0,0) .. %
(5.8,-1.3) .. (7.3,-1.7) .. (8.1,-1.2) .. (8.7,0) .. (8.5,1.0) ..%
(7.8,1.4).. (7.5,0) .. (6.9,-0.4) .. (6.3,0) .. (6.4,1.8) ..%
(7.8,2.9) .. (9.3,2.0) .. (9.8,0) .. (8.8,-2.3) .. (6.9,-3.2) ..%
(4.9,-2.4) .. (3.7,0) .. (3.5,1.8) .. (2.45,0.6)
}]
(1.55,0.95);
}
\end{tikzpicture}
\end{document}
--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
ADelmotte
2012-11-04 15:34:47 UTC
Permalink
Post by Paul Gaborit
À (at) Sun, 4 Nov 2012 01:26:24 -0800 (PST),
[...]
Post by Paul Gaborit
Vous pouvez utiliser la bibliothèque TikZ 'hobby' qui implémente
l'algorithme de lissage utilisé par metaplot (et sans doute par PSTrikcs
mais je n'en suis pas sûr). Le temps de calcul est un peu plus long
(c'est TeX qui résoud le système d'équations pour faire le lissage) mais
le résultat sera sûrement plus conforme à vos attentes.
(La bibliothèque 'hobby' n'est disponible que dans les distributions
récentes comme TeXLive 2012 par exemple.)
J'ai TeXLive 2012, remise à jour il y a deux jours, et j'ai bien la bibliothèque hobby dernière version, mais elle n'est pas trouvée à la compilation.
J'ai fait un refresh namedatabase dans tlmgr mais sans résultat.

Merci cependant pour la solution.

--
Alain
unknown
2012-11-04 17:04:30 UTC
Permalink
Post by ADelmotte
Post by Paul Gaborit
À (at) Sun, 4 Nov 2012 01:26:24 -0800 (PST),
[...]
Post by Paul Gaborit
Vous pouvez utiliser la bibliothèque TikZ 'hobby' qui implémente
l'algorithme de lissage utilisé par metaplot (et sans doute par PSTrikcs
mais je n'en suis pas sûr).
Non. Ce n'est pas le même algorithme. Je ne suis pas sûr à 100 % mais
cela donnera le même résultat pour des courbes fermées et j'en suis sûr
à 100% cela ne donnera pas le même résultat pour des courbes ouvertes
(sauf cas dégénérés bien entendus).
D'ailleurs, même avec la bibliothèque TikZ hobby, on n'a pas
exactement le hobby de MEAFONT/METAPOST. C'est expliqué en fin de
documentation mais c'est vraiment du détail : on a quasiment la même
chose qu'avec METAFONT/METAPOST.
Post by ADelmotte
Post by Paul Gaborit
[...]
(La bibliothèque 'hobby' n'est disponible que dans les distributions
récentes comme TeXLive 2012 par exemple.)
J'ai TeXLive 2012, remise à jour il y a deux jours, et j'ai bien la
bibliothèque hobby dernière version, mais elle n'est pas trouvée à la
compilation. J'ai fait un refresh namedatabase dans tlmgr mais sans
résultat.
C'est qu'il y a une feinte de cow-boy. La bibliothèque hobby est une
bibliothèque TikZ, appelée avec \usetikzlibrary{hobby} et cette commande
appelle le fichier tikzlibraryhobby.code.tex si j'ai bien compris le
fonctionnement de TikZ à ce niveau (pas sûr).
Cela dit, un texdoc hobby donnait une partie de ces renseignements :-)

Jean-Côme Charpentier
--
<mpg> [...] si on fait par exemple \let~\egroup [...]
<Jean-Côme> Pouf ! J'ai la preuve, Joss s'est réincarné. Tu le fais
souvent \let~\egroup ? Je demande cela parce que je suis en
train de faire un tri dans les personnes que je peux encore
fréquenter sans avoir honte. Et si on fait
\catcode`\}=13
\let}\egroup
ça passe mieux ? :-)
-+- in fr.comp.text.tex -+-
ADelmotte
2012-11-04 19:48:46 UTC
Permalink
Post by unknown
Post by ADelmotte
J'ai TeXLive 2012, remise à jour il y a deux jours, et j'ai bien la
bibliothèque hobby dernière version, mais elle n'est pas trouvée à la
compilation. J'ai fait un refresh namedatabase dans tlmgr mais sans
résultat.
C'est qu'il y a une feinte de cow-boy. La bibliothèque hobby est une
bibliothèque TikZ, appelée avec \usetikzlibrary{hobby} et cette commande
appelle le fichier tikzlibraryhobby.code.tex si j'ai bien compris le
fonctionnement de TikZ à ce niveau (pas sûr).
Cela dit, un texdoc hobby donnait une partie de ces renseignements :-)
J'aurais dû être plus précis : j'ai un dossier
C:\texlive\2012\texmf-dist\tex\latex\hobby
dans lequel il y a le fichier tikzlibraryhobby.code.tex ainsi que pgflibraryhobby.code.tex et hobby.code.tex (et pml3array.sty).

Il semble donc que la liste des fichiers de TeXLive ne se met pas à jour.

--
Alain
unknown
2012-11-05 18:35:07 UTC
Permalink
Post by ADelmotte
Post by ADelmotte
J'ai TeXLive 2012, remise à jour il y a deux jours, et j'ai bien la
bibliothèque hobby dernière version, mais elle n'est pas trouvée à la
compilation. J'ai fait un refresh namedatabase dans tlmgr mais sans
résultat.
C'est qu'il y a une feinte de cow-boy. [...]
\usetikzlibrary{hobby} et cette commande
appelle le fichier *tikzlibraryhobby.code.tex* [...]
J'aurais dû être plus précis : j'ai un dossier
C:\texlive\2012\texmf-dist\tex\latex\hobby dans lequel il y a le
fichier tikzlibraryhobby.code.tex ainsi que pgflibraryhobby.code.tex
et hobby.code.tex (et pml3array.sty).
Soit je ne comprends pas quelque chose d'essentiel, soit, au
contraire tout est pour le mieux dans le meilleur des mondes. En tous
cas, chez moi, il y a exactement ces fichiers (et pas plus) exactement
au même endroit.
Post by ADelmotte
Il semble donc que la liste des fichiers de TeXLive ne se met pas à jour.
Et donc il ne semble rien du tout. Je vais faire pour vous ce que je
n'ai quasiment jamais fait : un ECM en TikZ... tadaaaa :

\documentclass{minimal}
\usepackage{tikz}
\usetikzlibrary{hobby}
\begin{document}
\begin{tikzpicture}
\draw (0,0) to[curve through={(6,4) .. (4,9) .. (1,7)}] (3,5);
\end{tikzpicture}
\end{document}

Bon j'exagère, j'ai juste pris un exemple de la doc de hobby.

\documentclass{minimal}
\usepackage{tikz}
\usetikzlibrary{hobby}
\begin{document}
\begin{tikzpicture}
\draw (0,0) .. (6,4) .. (4,9) .. (1,7) .. (3,5) .. cycle;
\end{tikzpicture}
\end{document}

Est-ce que cet ECM fonctionne chez vous ? Et si non, quel est le
message d'erreur ?

Jean-Côme Charpentier
--
Si ça peut te rassurer je pense comme toi. Si ça peut ne pas te
rassurer, il est clair que je suis psychorigide.
-+- fterraza in fr.comp.text.tex -+-
ADelmotte
2012-11-05 20:14:56 UTC
Permalink
[...]
Post by unknown
Post by ADelmotte
Il semble donc que la liste des fichiers de TeXLive ne se met pas à jour.
Et donc il ne semble rien du tout. Je vais faire pour vous ce que je
\documentclass{minimal}
\usepackage{tikz}
\usetikzlibrary{hobby}
\begin{document}
\begin{tikzpicture}
\draw (0,0) to[curve through={(6,4) .. (4,9) .. (1,7)}] (3,5);
\end{tikzpicture}
\end{document}
Est-ce que cet ECM fonctionne chez vous ? Et si non, quel est le
message d'erreur ?
Si je le compile avec TeXmaker ce premier ECM fonctionne (le deuxième a des erreurs.)

Mais si je le compile avec TeXworks le module hobby n'est pas trouvé :
(c:/texlive/2011/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzli
brarytopaths.code.tex)))
! I can't find file `tikzlibraryhobby.code.tex'.
<argument> ...nput tikzlibrary\***@temp .code.tex
\catcode `\@ =\csname tikz...
l.3 \usetikzlibrary{hobby}

(Press Enter to retry, or Control-Z to exit)
Please type another input file name
! Emergency stop.
<argument> ...nput tikzlibrary\***@temp .code.tex
\catcode `\@ =\csname tikz...
l.3 \usetikzlibrary{hobby}

! ==> Fatal error occurred, no output PDF file produced!
Transcript written on LaTeX4.log.

NB. La solution que Paul avait donnée pour les nuages de félicité fonctionne sous TeXmaker !!

Il faudra donc que je regarde du côté de TeXworks.

Merci,

--
Alain
Paul Gaborit
2012-11-06 09:07:38 UTC
Permalink
À (at) Mon, 5 Nov 2012 12:14:56 -0800 (PST),
Post by ADelmotte
Post by unknown
Est-ce que cet ECM fonctionne chez vous ? Et si non, quel est le
message d'erreur ?
Si je le compile avec TeXmaker ce premier ECM fonctionne (le deuxième a des erreurs.)
Normal. Le premier est correct. Le second n'est pas complet (il y a une
option spéciale pour utiliser la syntaxe '..').
Post by ADelmotte
(c:/texlive/2011/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzli
brarytopaths.code.tex)))
[...]
Post by ADelmotte
Il faudra donc que je regarde du côté de TeXworks.
Facile : votre TeXworks est configuré pour utiliser TeXLive 2011 alors
que TeXmaker utilise bien la dernière version (2012) !
--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
ADelmotte
2012-11-06 16:18:55 UTC
Permalink
Post by Paul Gaborit
À (at) Mon, 5 Nov 2012 12:14:56 -0800 (PST),
Facile : votre TeXworks est configuré pour utiliser TeXLive 2011 alors
que TeXmaker utilise bien la dernière version (2012) !
Correct, et la version de TeXworks fournie par TeXLive fonctionnait.

Le chemin général pointait bien vers 2012, mais pour certains outils, dont pdflatex, le chemin complet (vers 2011) était donné et non pas seulement le nom du programme (pdflatex.exe), ce qui suffit.

Merci,

--
Alain

Continuer la lecture sur narkive:
Loading...