
У меня возникли проблемы с началом рисования случайной рваной линии с конечными вариациями между двумя конечными точками. Функцию, random
которая использует переменную, rnd
я думаю, можно использовать, например,Рисование случайных путей в TikZ, но я понятия не имею, как его использовать для этой цели.
Я использую эту среду:
\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}
Я хотел бы это воссоздать:
ПРАВКА: Я думаю, что пример Джесси в основном даёт требуемый результат, но он не может удалить пересекающие его сегменты линии заливки, в отличие от двух других решений.
Как скопировать сгенерированную случайную линию после ее генерации и изменить ее цвет, чтобы получить две параллельные случайные линии?(Затем пользователь может разместить одну немного выше другой, но белую и толстую, но ниже ее в коде. Это вручную обрежет все линии заливки, выходящие за ее пределы.) Я пытаюсьКоманда копирования TikZно это смещает всю картинку вправо и создает копию случайной линии рядом с ней.
решение1
Другая альтернатива, вдохновленнаяhttps://tex.stackexchange.com/a/126179/34618
Код
\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}
ОБНОВЛЕНИЕ: для вертикального рисования. Просто переключаем координаты в командной строке, как показано ниже и в примере.
\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);
решение2
Похожий результат можно получить с помощью библиотеки tikz decorations.pathmorphing
, которая позволяет создавать украшения с помощью radom steps
. Также, используя clip
опцию в , path
можно вырезать вертикальные линии по верхней линии случайной формы, но это должно нарисовать всю граничную область контура обрезки, поэтому была нарисована горизонтальная линия внизу, а также вертикальные линии справа и слева, но это соответствует рисунку.
\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}
Результат:
решение3
Рекомендуемое решение с 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}
Анимированный
\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}
Внимание
Обратите внимание, что Rand
больше не выдает случайное действительное число от 0 до 0,5 включительно. Его определение было молчаливо изменено. Теперь он выдает случайное действительное число от 0 до 1 включительно. Он не документирован и не анонсирован, но он все еще забавен!
Код, указанный выше, еще не обновлен, поэтому он даст другой результат. У меня нет времени обновлять его прямо сейчас. Извините за неудобства.
решение4
Я знаю, что это вопрос почти годовой давности, но я хочу поделиться своим решением. Вот код:
\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}
Это даст следующий результат: