
Ich habe Probleme, mit dem Zeichnen einer zufällig unregelmäßigen Linie mit endlicher Variation zwischen zwei Endpunkten zu beginnen. Die random
Funktion, die Variablen verwendet, rnd
kann meiner Meinung nach beispielsweise verwendet werden,Zeichnen von zufälligen Pfaden in TikZ, aber ich habe keine Ahnung, wie ich es für diesen Zweck verwenden soll.
Ich verwende diese Umgebung:
\documentclass[12pt]{article} % SIZE OF FONT AND ITS LAYOUT ON EACH PAGE.
\usepackage[top = 1in, bottom = 1in, left = 1in, right = 1in]{geometry} % MARGINS.
\usepackage{amsmath, booktabs, graphicx, setspace}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{tikz,tkz-graph,tikz-cd} % DIAGRAMS.
\usetikzlibrary{arrows, calc, decorations.markings}
\begin{document}
\begin{figure}[h]
\begin{center}
\begin{tikzpicture}[scale=1.8,auto]
% replace with randomly ragged line \draw [-,line width=1pt] (0,2) edge (2,2);
\draw [-,line width=1pt,dashed] (0,0) edge (0,2);% solid left boundary
\draw [-,line width=1pt,white] (0,0) edge (8,0);% solid lower boundary
\draw [-,line width=1pt,dashed] (8,0) edge (8,2);% solid right boundary
% make a vertical rule fill; how? How would I make a tiled rule fill, in case that looks better?
\end{tikzpicture}
\end{center}
\caption{CAPTION GOES HERE}
\label{fig:FIGURE NAME GOES HERE}
\end{figure}
\end{document}
Ich würde das hier gerne nachbauen:
BEARBEITEN: Ich denke, dass Jesses Beispiel am ehesten das gewünschte Ergebnis liefert, es aber im Gegensatz zu den anderen beiden Lösungen die Füllliniensegmente, die es kreuzen, nicht entfernen kann.
Wie kopiere ich eine generierte Zufallslinie nach ihrer Generierung und ändere ihre Farbe, sodass ich zwei parallele Zufallslinien habe?(Dann kann der Benutzer eine leicht über der anderen platzieren, aber weiß und dick, aber im Code darunter. Dadurch werden alle darüber hinausgehenden Fülllinien manuell abgeschnitten.) Ich versucheTikZ-KopierbefehlAllerdings verschiebt sich dadurch das gesamte Bild nach rechts und es entsteht eine Kopie der zufälligen Linie daneben.
Antwort1
Eine weitere Alternative, inspiriert vonhttps://tex.stackexchange.com/a/126179/34618
Code
\documentclass[tikz,border=1cm]{standalone}
%\usepackage{tikz}
\usetikzlibrary{calc}
\newcommand\irregularline[2]{%
let \n1 = {rand*(#1)} in
+(0,\n1)
\foreach \a in {0.1,0.2,...,#2}{
let \n1 = {rand*(#1)} in
-- +(\a,\n1)
}
} % #1=seed, #2=length of horizontal line
\begin{document}
\begin{tikzpicture}
\draw[blue] (0,0) \irregularline{0.1cm}{6} -- (6,0)--(6,-2) --(0,-2) -- (0,0);
\foreach \t in {0,0.1,...,6} {\draw (\t,0) -- (\t,-2);}
\draw[red] (0,2) \irregularline{2mm}{6};
\end{tikzpicture}
\end{document}
UPDATE: für vertikales Zeichnen. Man vertauscht einfach die Koordinaten in der Kommandozeile wie unten und in einem Beispiel dargestellt.
\newcommand\irregularliney[2]{%
let \n1 = {rand*(#1)} in
+(\n1,0)
\foreach \a in {0.1,0.2,...,#2}{
let \n1 = {rand*(#1)} in
-- +(\n1,\a)
}
} % #1=seed, #2=length
\draw[yellow,thick] (0,0) \irregularliney{0.1cm}{6} -- (0,6)--(-2,6) --(-2,0) -- (0,0);
Antwort2
Sie können ein ähnliches Ergebnis mit der Tikz-Bibliothek erzielen decorations.pathmorphing
, mit der Sie Dekorationen erstellen können radom steps
. Mit der clip
Option path
können Sie außerdem die vertikalen Linien an der oberen Linie beliebiger Form ausschneiden. Dies sollte jedoch den gesamten Randbereich des Beschneidungspfads zeichnen. Daher wurde unten eine horizontale Linie gezeichnet und rechts und links wurden auch vertikale Linien gezeichnet, was jedoch mit der Zeichnung zusammenhängt.
\documentclass[12pt]{article}
\usepackage{tikz}
\usetikzlibrary{decorations.pathmorphing}
\begin{document}
\begin{figure}\centering
\begin{tikzpicture}
\begin{scope}[gray,thick]
\draw (-0.1,-0.5) -- (-0.1,-1) (-0.1,-1.5) -- (-0.1,-2) (-0.1,-2.5) -- (-0.1,-3);
\draw (10.1,-0.5) -- (10.1,-1) (10.1,-1.5) -- (10.1,-2) (10.1,-2.5) -- (10.1,-3);
\end{scope}
\path[draw,clip,decoration={random steps,segment length=2pt,amplitude=2pt}] decorate {(0,0) -- (10,0)} |- (0,-3.5);
\foreach \x in {0,0.1,...,10} {
\draw (\x,1) -- (\x,-3.5);
}
\end{tikzpicture}
\end{figure}
\end{document}
Ergebnis:
Antwort3
Eine empfohlene Lösung mit PSTricks.
\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-node,pst-plot}
\pstVerb{realtime srand}
\psset{linejoin=1}
\def\N{30}
\begin{document}
\begin{pspicture}(6,5)
\psline(6,0)
\curvepnodes[plotpoints=\N]{0}{6}{t 5 Rand 2 mul sub}{A}
\psnline[linecolor=red](0,\Anodecount){A}
\multido{\i=0+1}{\N}{\psline(A\i|0,0)(A\i)}
\end{pspicture}
\end{document}
Animiert
\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-node,pst-plot}
\pstVerb{realtime srand}
\psset{linejoin=1}
\def\N{30}
\begin{document}
\psLoop{10}{%
\begin{pspicture}(6,3)
\psline(6,0)
\curvepnodes[plotpoints=\N]{0}{6}{t 3 Rand 2 mul sub}{A}
\psnline[linecolor=red](0,\Anodecount){A}
\multido{\i=0+1}{\N}{\psline(A\i|0,0)(A\i)}
\end{pspicture}}
\end{document}
Aufmerksamkeit
Beachten Sie, dass Rand
keine zufällige reelle Zahl zwischen 0 und 0,5 (einschließlich) mehr erzeugt wird. Die Definition wurde stillschweigend geändert. Jetzt erzeugt es eine zufällige reelle Zahl zwischen 0 und 1 (einschließlich). Es ist weder dokumentiert noch angekündigt, aber es macht trotzdem Spaß!
Der oben angegebene Code wurde noch nicht aktualisiert und erzeugt daher eine andere Ausgabe. Ich habe im Moment keine Zeit, ihn zu aktualisieren. Entschuldigen Sie die Unannehmlichkeiten.
Antwort4
Ich weiß, dass die Frage schon fast ein Jahr alt ist, aber ich möchte meine Lösung mit Ihnen teilen. Dies ist der Code:
\documentclass[tikz,margin=5pt,12pt]{standalone}
\usepackage{xparse}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\NewDocumentCommand{\irregularline}{%
O {2mm} % Amplitude of irregularity. Optional. Default value = 2mm
m % First point
m % Second point
D <> {20} % Number of peaks. Optional. Default value = 20
}{{%
\coordinate (old) at #2;
\foreach \i in {1,2,...,#4}{
\draw (old) -- ($ ($#2!\i/(#4+1)!#3$) + (0,#1*rand) $) coordinate (old);
}
\draw (old) -- #3;
}}
% Examples
\irregularline{(0,0)}{(5,5)}
\irregularline[1mm]{(1,0)}{(6,5)}
\irregularline[1mm]{(2,0)}{(7,5)}<100>
\end{tikzpicture}
\end{document}
Das erzeugt die folgende Ausgabe: