
라이브러리 를 사용하여 TikZ에서 L 시스템을 만들려고 합니다 lindenmayersystems
.
나는 이 코드를 가지고 있습니다 :
\documentclass[border=1cm]{standalone}
\usepackage{tikz}
\usetikzlibrary{lindenmayersystems}
\pgfdeclarelindenmayersystem{A}{
\rule{A->F[+A][-A]}
}
\begin{document}
\begin{tikzpicture}[scale=10,rotate=90]
\draw
[blue,opacity=0.5,line width=0.5cm,line cap=round]
l-system [l-system={A,axiom=A
,order=4,angle=45,step=0.25cm}];
\end{tikzpicture}
\end{document}
이 코드는 다음과 같은 출력을 생성합니다.
그런데 보시다시피 나무의 윗가지들이 서로 닿아 있습니다. 나는 이런 일이 일어나는 것을 원하지 않습니다. 다음 위키피디아 이미지처럼 모든 단계에서 줄의 크기를 줄여야 합니다.
TikZ에서 이 작업을 수행할 수 있는 방법이 있나요?
답변1
F
한 가지 해결책은 의 값을 줄이는 방식으로 기호를 정의하는 것입니다 \pgflsystemstep
. 즉,
\pgfdeclarelindenmayersystem{A}{
\symbol{F}{\pgflsystemstep=0.6\pgflsystemstep\pgflsystemdrawforward}
\rule{A->F[+A][-A]}
}
다음을 제공합니다.
위 그림의 전체 코드는 다음과 같습니다.
\documentclass{article}
\usepackage{tikz}
\usepackage[active,tightpage]{preview}\PreviewEnvironment{tikzpicture}
\usetikzlibrary{lindenmayersystems}
\pgfdeclarelindenmayersystem{A}{
\symbol{F}{\pgflsystemstep=0.6\pgflsystemstep\pgflsystemdrawforward}
\rule{A->F[+A][-A]}
}
\begin{document}
\foreach \n in {1,...,8} {
\begin{tikzpicture}[scale=10,rotate=90]
\draw (-.1,-.2) rectangle (.4,0.2);
\draw
[blue,opacity=0.5,line width=0.1cm,line cap=round]
l-system [l-system={A,axiom=A
,order=\n,angle=45,step=0.25cm}];
\end{tikzpicture}
}
\end{document}
업데이트
더 나은 해결책: S
배율을 변경하지만 아무것도 그리지 않는 새 기호(예: "배율")를 정의합니다. 장점은 규칙의 어느 부분에서나 사용할 수 있다는 것입니다.
이 접근 방식을 사용하면 다음과 같은 예가 됩니다.
\pgfdeclarelindenmayersystem{A}{
\symbol{S}{\pgflsystemstep=0.6\pgflsystemstep}
\rule{A->SF[+A][-A]}
}
규칙의 일부에서 "크기 조정"이 어떻게 사용될 수 있는지 보여주는 또 다른 예는 다음과 같습니다.
\pgfdeclarelindenmayersystem{A}{
\symbol{S}{\pgflsystemstep=0.5\pgflsystemstep}
\rule{A->F[+A][-A]SA}
}
이는 다음과 같이 사용되었습니다.
\foreach \n in {1,...,6} {
\begin{tikzpicture}[scale=10,rotate=90]
\draw (-.03,-.17) rectangle (.35,0.17);
\draw
[blue,opacity=0.5,thin,line cap=round]
l-system [l-system={A,axiom=A
,order=\n,angle=15,step=0.05cm}];
\end{tikzpicture}
}
생산하다