
Estou tendo problemas para começar a desenhar uma linha irregular aleatoriamente, com variação finita, entre dois pontos finais. A random
função que usa variável rnd
eu acho que pode ser usada, por exemplo,Desenhando caminhos aleatórios no TikZ, mas não tenho ideia de como usá-lo para essa finalidade.
Eu uso este ambiente:
\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}
Eu gostaria de recriar isso:
EDIT: Acho que o exemplo de Jesse produz mais o resultado desejado, mas não pode remover segmentos de linha de preenchimento que o cruzam, ao contrário das outras duas soluções.
Como copio uma linha aleatória gerada depois de gerada e mudo sua cor para ter duas linhas aleatórias paralelas?(Então o usuário pode colocar um pouco acima do outro, mas branco e grosso, mas abaixo dele no código. Isso cortará todas as linhas de preenchimento que vão além dele manualmente.) Estou tentandoComando de cópia TikZmas isso desloca toda a imagem para a direita e cria a cópia da linha aleatória ao lado dela.
Responder1
Outra alternativa, inspirada emhttps://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}
ATUALIZAÇÃO: para desenho vertical. Basta mudar as coordenadas na linha de comando conforme mostrado abaixo e um exemplo.
\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);
Responder2
Você pode obter resultados semelhantes usando a biblioteca tikz decorations.pathmorphing
, que permite criar decorações com radom steps
. Além disso, usando a clip
opção em path
você pode cortar as linhas verticais na linha superior de forma aleatória, mas isso deve desenhar toda a região limite do caminho de recorte, portanto, uma linha horizontal na parte inferior foi desenhada, também linhas verticais foram desenhadas à direita e saiu, mas isso vai com o desenho.
\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:
Responder3
Uma solução recomendada com 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}
Atenção
Observe que Rand
não produz mais um número real aleatório entre 0 e 0,5 inclusive. Sua definição foi tacitamente alterada. Agora produz um número real aleatório entre 0 e 1 inclusive. Não está documentado nem anunciado, mas ainda assim é divertido!
O código fornecido acima ainda não foi atualizado, portanto produzirá resultados diferentes. Não tenho tempo para atualizá-lo agora. Desculpe por este inconveniente.
Responder4
Eu sei que é uma pergunta há quase um ano, mas quero compartilhar minha solução. Este é o 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}
Isso produz a seguinte saída: