원통형 요소로 구성된 배열을 구현해야 합니다. 그러나 아래 코드는 직선 실린더(코드 크레딧은 이 링크로 이동합니다) 대신에 실린더를 주기적으로, 예를 들어 정현파 방식으로 변조하고 싶습니다.이 링크의 경우와 유사. 하지만 성공할 수는 없을 것 같았습니다. 실린더 수를 하나에서 그 이상으로 늘릴 수도 없었습니다.(이 질문은 이전 질문과 이어집니다.슈뢰딩거의 고양이는 아주 좋은 대답을 했습니다). 이 질문에서는 출력이 어느 정도 다릅니다.
\documentclass[border=2mm]{standalone}
\usepackage{xcolor}
\definecolor{mycolor}{RGB}{8,108,131}
\usepackage{tikz}
\usetikzlibrary{positioning}
\usetikzlibrary{backgrounds}
\usetikzlibrary{shapes.geometric}
\usetikzlibrary{calc}
\tikzset{cylinder end fill/.style={path picture={
\pgftransformshift{\centerpoint}%
\pgftransformrotate{\rotate}%
\pgfpathmoveto{\beforetop}%
\pgfpatharc{90}{-270}{\xradius and \yradius}%
\pgfpathclose
\pgfsetfillcolor{#1}%
\pgfusepath{fill}}
}}
\begin{document}
\begin{tikzpicture}
\begin{scope}[on background layer]
\path let \p1=(0.2,8.4),
\n1={atan2(\y1,\x1)},\n2={veclen(\y1,\x1)} in
node[cylinder, rotate=270,
minimum height=0.85*\n2,minimum width=1cm,aspect=1.0,
cylinder end fill=red,
left color=red!30,right color=black,middle color=red!80, opacity=0.7,
draw] at (0.8,4.7) {1};
\end{scope}
\end{tikzpicture}
\end{document}
답변1
이는 올바른 방향으로 나아가는 단계일 수도 있고 아닐 수도 있습니다.
\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{decorations}
\newcounter{icoord}
\pgfkeys{/tikz/.cd,
curved cylinder/.cd,
radius/.store in=\CurvedCylinderRadius,
radius=10pt,
step/.store in=\CurvedCylinderStep,
step=1pt,
shade/.style={left color=red!30,right color=black,middle color=red!80}
}
\pgfdeclaredecoration{curved cylinder}{initial}
{%
\state{initial}[width=\CurvedCylinderStep,next state=cont] {%
\pgfmoveto{\pgfpoint{\CurvedCylinderStep}{\CurvedCylinderRadius}}%
\pgfpathlineto{\pgfpoint{0.3\pgflinewidth}{\CurvedCylinderRadius}}%
\setcounter{icoord}{0}%
\pgfcoordinate{lastup-\number\value{icoord}}{\pgfpoint{1pt}{\CurvedCylinderRadius}}%
\pgfcoordinate{lastdown-\number\value{icoord}}{\pgfpoint{1pt}{-1*\CurvedCylinderRadius}}%
}
\state{cont}[width=\CurvedCylinderStep]{%
\stepcounter{icoord}%
\pgfcoordinate{lastup-\number\value{icoord}}{\pgfpoint{\CurvedCylinderStep}{\CurvedCylinderRadius}}
\pgfcoordinate{lastdown-\number\value{icoord}}{\pgfpoint{\CurvedCylinderStep}{-1*\CurvedCylinderRadius}}
\pgfcoordinate{tmpup}{\pgfpoint{\CurvedCylinderStep+0.3pt}{\CurvedCylinderRadius}}
\pgfcoordinate{tmpdown}{\pgfpoint{\CurvedCylinderStep+0.3pt}{-1*\CurvedCylinderRadius}}
\pgfmathanglebetweenlines{\pgfpointanchor{lastup-\the\numexpr\value{icoord}-1}{center}}%
{\pgfpointanchor{lastup-\number\value{icoord}}{center}}%
{\pgfpointanchor{Y}{center}}%
{\pgfpointanchor{O}{center}}%
\pgfmathsetmacro\myshadingangle{\pgfmathresult}%
\path[curved cylinder/shade,shading angle=\myshadingangle]
(lastup-\the\numexpr\value{icoord}-1)
-- (tmpup) to[out=180,in=180] (tmpdown) -- (lastdown-\the\numexpr\value{icoord}-1)
to[out=180,in=180] cycle;%
\pgfmoveto{\pgfpointanchor{lastup-\the\numexpr\value{icoord}-1}{center}}%
\pgfpathlineto{\pgfpointanchor{lastup-\number\value{icoord}}{center}}%
\pgfmoveto{\pgfpointanchor{lastdown-\the\numexpr\value{icoord}-1}{center}}%
\pgfpathlineto{\pgfpointanchor{lastdown-\number\value{icoord}}{center}}%
}
\state{final}[width=\CurvedCylinderStep]
{ % perhaps unnecessary but doesn't hurt either
\pgfmoveto{\pgfpointdecoratedpathlast}
\fill (tmpup) to[out=0,in=0] (tmpdown) to[out=-180,in=-180] cycle;
}
}
\begin{document}
\begin{tikzpicture}[scale=1]
\path (0,0) coordinate (O) (0,1) coordinate (Y);
\draw[decorate,decoration=curved cylinder,curved cylinder/radius=1cm]
(0,0) to[out=90,in=-90] (1,4) to[out=90,in=-90] (0,8);
\draw[decorate,decoration=curved cylinder,
curved cylinder/radius=1cm,
curved cylinder/shade/.style={left color=blue!30,right
color=black,middle color=blue!80},looseness=0.7]
(4,0) to[out=90,in=-90] (5,4) to[out=90,in=-90] (4,8);
\end{tikzpicture}
\end{document}
또는
\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{decorations}
\newcounter{icoord}
\pgfkeys{/tikz/.cd,
curved cylinder/.cd,
radius/.store in=\CurvedCylinderRadius,
radius=10pt,
step/.store in=\CurvedCylinderStep,
step=1pt,
shade/.style={left color=red!30,right color=black,middle color=red!80}
}
\pgfdeclaredecoration{curved cylinder}{initial}
{%
\state{initial}[width=\CurvedCylinderStep,next state=cont] {%
\pgfmoveto{\pgfpoint{\CurvedCylinderStep}{\CurvedCylinderRadius}}%
\pgfpathlineto{\pgfpoint{0.3\pgflinewidth}{\CurvedCylinderRadius}}%
\setcounter{icoord}{0}%
\pgfcoordinate{lastup-\number\value{icoord}}{\pgfpoint{1pt}{\CurvedCylinderRadius}}%
\pgfcoordinate{lastdown-\number\value{icoord}}{\pgfpoint{1pt}{-1*\CurvedCylinderRadius}}%
}
\state{cont}[width=\CurvedCylinderStep]{%
\stepcounter{icoord}%
\pgfcoordinate{lastup-\number\value{icoord}}{\pgfpoint{\CurvedCylinderStep}{\CurvedCylinderRadius}}
\pgfcoordinate{lastdown-\number\value{icoord}}{\pgfpoint{\CurvedCylinderStep}{-1*\CurvedCylinderRadius}}
\pgfcoordinate{tmpup}{\pgfpoint{\CurvedCylinderStep+0.3pt}{\CurvedCylinderRadius}}
\pgfcoordinate{tmpdown}{\pgfpoint{\CurvedCylinderStep+0.3pt}{-1*\CurvedCylinderRadius}}
\pgfmathanglebetweenlines{\pgfpointanchor{lastup-\the\numexpr\value{icoord}-1}{center}}%
{\pgfpointanchor{lastup-\number\value{icoord}}{center}}%
{\pgfpointanchor{Y}{center}}%
{\pgfpointanchor{O}{center}}%
\pgfmathsetmacro\myshadingangle{\pgfmathresult}%
\path[curved cylinder/shade,shading angle=\myshadingangle]
(lastup-\the\numexpr\value{icoord}-1)
-- (tmpup) to[out=180,in=180] (tmpdown) -- (lastdown-\the\numexpr\value{icoord}-1)
to[out=180,in=180] cycle;%
\pgfmoveto{\pgfpointanchor{lastup-\the\numexpr\value{icoord}-1}{center}}%
\pgfpathlineto{\pgfpointanchor{lastup-\number\value{icoord}}{center}}%
\pgfmoveto{\pgfpointanchor{lastdown-\the\numexpr\value{icoord}-1}{center}}%
\pgfpathlineto{\pgfpointanchor{lastdown-\number\value{icoord}}{center}}%
}
\state{final}[width=\CurvedCylinderStep]
{ % perhaps unnecessary but doesn't hurt either
\pgfmoveto{\pgfpointdecoratedpathlast}
\fill (tmpup) to[out=0,in=0] (tmpdown) to[out=-180,in=-180] cycle;
}
}
\begin{document}
\begin{tikzpicture}[scale=1]
\path (0,0) coordinate (O) (0,1) coordinate (Y);
\draw[decorate,decoration=curved cylinder,curved cylinder/radius=1cm
,looseness=0.7]
(0,0) foreach \X in {1,2,3}
{to[out=90,in=-90] ++ (1,4) to[out=90,in=-90] ++(-1,4)};
\draw[decorate,decoration=curved cylinder,
curved cylinder/radius=1cm,
curved cylinder/shade/.style={left color=blue!30,right
color=black,middle color=blue!80},looseness=0.7]
(6,0) foreach \X in {1,2,3}
{to[out=90,in=-90] ++ (-1,4) to[out=90,in=-90] ++(1,4)};
\end{tikzpicture}
\end{document}
완전한 장식은 아니지만 dimension too large
오류를 쉽게 찾을 수 있습니다.