Karl
ist eine Liste zufällig generierter Knoten unter \curvepnodes
Verwendung parametrischer Punkte in RPN (ich weiß nicht, wie man sie rand
in algebraischen Ausdrücken verwendet). Die Anzahl der Elemente der Liste ist \Karlnodecount + 1
oder plotpoints
.
In der Dokumentation sehe ich nur, \psnline
dass die Liste mit einem geraden Liniensegment zwischen zwei aufeinanderfolgenden Knoten verbunden werden soll. Um den Pfad zu schließen, rufe ich \closepath
inside auf \pscustom
.
- Leider sieht das Schlussliniensegment nicht glatt aus.
- Anstatt eines geraden Liniensegments möchte ich ein gekrümmtes verwenden. Die Verwendung
\psparametricplot[plotstyle=curve]
hilft ein wenig, aber das abschließende Segment ist immer noch problematisch.
\documentclass[pstricks]{standalone}
\usepackage{pst-plot,pst-node}
\psset
{
fillstyle=solid,
fillcolor=gray,
linearc=2pt,
}
\begin{document}
\begin{pspicture}(-3,-3)(3,3)
\curvepnodes[plotpoints=40]{0}{360}{/R rand 1001 mod 1000 div 1.5 add def R t cos mul R t sin mul}{Karl}
\pscustom
{
\psnline(0,\Karlnodecount){Karl}
\closepath
}
\end{pspicture}
\end{document}
Ich habe auch versucht, \multido
und zu verwenden, \curveto
aber es \curveto
werden 3 Punkte pro Aufruf benötigt (zwei davon sind Kontrollpunkte einer Bézierkurve).
Wie zeichnet man aus einer Liste von Knoten eine geschlossene, glatte Kurve?
Antwort1
\documentclass{article}
\usepackage{pst-node,multido}
\SpecialCoor
\pstVerb{1234 srand}
\def\PlotImage#1{% #1: no of points
\pstVerb{ /Step 360 #1 div def } \def\randompath{}
\multido{\i=0+1}{#1}{%
\xdef\randompath{\randompath(! Rand 2 mul 1 sub 2.5 add \i\space Step mul PtoC )}}%
\begin{pspicture}[showgrid=false](-3,-3)(3,3)
\psset{fillstyle=solid,fillcolor=black!20}
\expandafter\psccurve\randompath
\psset{linecolor=red,opacity=0.4,fillcolor=blue!40}
\expandafter\psccurve\randompath
\end{pspicture}}
\begin{document}
\PlotImage{36} \PlotImage{142}
\end{document}
Antwort2
Entschuldigung, ich kenne PSTricks nicht, aber zum Vergleich ist dies das Metapost-Äquivalent zu Jakes TikZ-Lösung:
\starttext
\startMPpage[offset=3mm]
path p;
p := for i = 0 step 10 until 350 : (1 randomized 1)*dir(i) .. endfor cycle;
draw p scaled 1cm;
\stopMPpage
\stoptext
Antwort3
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{hobby}
\begin{document}
\pgfmathsetseed{2}
\edef\randompath{}
\foreach \theta in {0,10,...,350} {
\pgfmathsetmacro\r{rnd+1}
\xdef\randompath{\randompath (\theta:\r) ..}
}
\begin{tikzpicture}[use Hobby shortcut]
\expandafter\draw\randompath cycle;
\end{tikzpicture}
\end{document}
Antwort4
Die bombensichere Lösung.
\documentclass[pstricks]{standalone}
\usepackage{pst-node,pst-plot}
\psset{fillstyle=solid,fillcolor=gray}
\def\points{}
\pstVerb{realtime srand}
\def\N{25}
\begin{document}
\begin{pspicture}(-3,-3)(3,3)
\curvepnodes[plotpoints=\N]{0}{360}{rand 16 mod 15 div 1.5 add t PtoC}{P}
\multido{\i=0+1}{\Pnodecount}{\xdef\points{\points (P\i)}}
\expandafter\psccurve\points
\end{pspicture}
\end{document}