
Tengo problemas para empezar a dibujar una línea irregular aleatoria, con variación finita, entre dos puntos finales. Creo que la random
función que usa una variable se puede usar, por ejemplo,rnd
Dibujar caminos aleatorios en TikZ, pero no tengo idea de cómo usarlo para este propósito.
Yo uso este entorno:
\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}
Me gustaría recrear esto:
EDITAR: Creo que el ejemplo de Jesse produce más el resultado requerido, pero no puede eliminar los segmentos de línea de relleno que lo cruzan, a diferencia de las otras dos soluciones.
¿Cómo copio una línea aleatoria generada después de generarla y cambio su color para tener dos líneas aleatorias paralelas?(Luego, el usuario puede colocar uno ligeramente encima del otro, pero blanco y grueso, pero debajo en el código. Esto recortará todas las líneas de relleno que vayan más allá manualmente).Comando de copia TikZpero esto desplaza toda la imagen hacia la derecha y crea la copia de la línea aleatoria al lado.
Respuesta1
Otra alternativa, inspirada enhttps://tex.stackexchange.com/a/126179/34618
Código
\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}
ACTUALIZACIÓN: para dibujo vertical. Uno simplemente cambia las coordenadas en la línea de comando como se muestra a continuación y en un ejemplo.
\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);
Respuesta2
Puedes obtener resultados similares usando la biblioteca tikz decorations.pathmorphing
, que te permite crear decoraciones con radom steps
. Además, usando la clip
opción path
puede cortar las líneas verticales en la línea superior de forma aleatoria, pero esto debería dibujar toda la región límite del trazado de recorte, por lo tanto, se ha dibujado una línea horizontal en la parte inferior y también se han dibujado líneas verticales a la derecha. y se fue pero esto va con el dibujo.
\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}
Resultado:
Respuesta3
Una solución recomendada con 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}
Animado
\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}
Atención
Tenga en cuenta que Rand
ya no produce un número real aleatorio entre 0 y 0,5 inclusive. Su definición había sido modificada tácitamente. Ahora produce un número real aleatorio entre 0 y 1 inclusive. No está documentado ni anunciado, ¡pero sigue siendo divertido!
El código proporcionado anteriormente no se ha actualizado aún, por lo que producirá un resultado diferente. No tengo tiempo para actualizarlo ahora. Perdón por las molestias.
Respuesta4
Sé que fue una pregunta de hace casi un año, pero quiero compartir mi solución. Este es el código:
\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}
Eso produce el siguiente resultado: