
샘플 포인트가 극좌표계, 즉 데카르트 그리드 대신 등거리 동심원에 있는 다음 플롯을 어떻게 변경할 수 있습니까?
\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{
compat=newest,
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
domain=-10:10,
samples=20,
xmin=-10,xmax=10,
ymin=-10,ymax=10,
zmin=-20,zmax=20,
point meta=z,
height=20cm,
width=15cm,
view={45}{45}
]
\pgfplotsinvokeforeach{-20,0,20}{
\begin{scope}
\clip plot[smooth cycle,variable=\t,domain=0:355] ({7*cos(\t)},{7*sin(\t)},#1);
\addplot3[quiver,-stealth,
quiver={
u={-y/(x^2+y^2)},
v={x/(x^2+y^2)},
w={0},
scale arrows=10,
colored=mapped color
},
]
(x,y,#1);
\end{scope}
}
\draw[ultra thick] (0,0,-20) -- (0,0,20);
%
\end{axis}
\end{tikzpicture}
\end{document}
답변1
이것은~ 아니다진지한 대답. 내가 하고 싶었던 것은 누군가가 화살통을 해킹할 수 있는지 알아내는 것뿐이었습니다. 어느 정도 가능할 것 같습니다.
\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{
compat=newest,
}
\begin{document}
\makeatletter
\pgfplotsset{quiver/tikz to/.code={\def\pgfplotsplothandlerquiver@vis@path##1{%
%\pgfpathmoveto{##1}%
\pgfplotsaxisvisphasetransformcoordinate\pgfplots@quiver@u\pgfplots@quiver@v\pgfplots@quiver@w
\pgfplotsifcurplotthreedim{%
\pgfcoordinate{quiver@from}{\pgfplotsqpointxyz\pgfplots@current@point@x\pgfplots@current@point@y\pgfplots@current@point@z}%
}{%
\pgfcoordinate{quiver@from}{\pgfplotsqpointxy\pgfplots@current@point@x\pgfplots@current@point@y}%
}%
\pgfplotsifcurplotthreedim{%
\pgfcoordinate{quiver@target}{\pgfplotsqpointxyz\pgfplots@quiver@u\pgfplots@quiver@v\pgfplots@quiver@w}%
}{%
\pgfcoordinate{quiver@target}{\pgfplotsqpointxy\pgfplots@quiver@u\pgfplots@quiver@v}%
}%
\pgfpathmoveto{\pgfpointanchor{quiver@from}{center}}%
\tikzset{insert path={(quiver@from) to
(quiver@target)}}%
}}}%
\makeatother
\begin{tikzpicture}
\begin{axis}[
domain=-10:10,
samples=20,
xmin=-10,xmax=10,
ymin=-10,ymax=10,
zmin=-20,zmax=20,
point meta=z,
height=20cm,
width=15cm,
view={45}{45}
]
\pgfplotsinvokeforeach{-20,0,20}{
\begin{scope}
%\clip plot[smooth cycle,variable=\t,domain=0:355] ({7*cos(\t)},{7*sin(\t)},#1);
\addplot3[quiver,-stealth,
quiver={every arrow/.append style={every to/.style={bend right=15}},
u={-y/(x^2+y^2)},
v={x/(x^2+y^2)},
w={0},
scale arrows=10,
colored=mapped color,
tikz to
},
x filter/.expression={x*x+y*y<9 || x*x+y*y > 49 ? nan:x},
]
(x,y,#1);
\end{scope}
}
\draw[ultra thick] (0,0,-20) -- (0,0,20);
%
\end{axis}
\end{tikzpicture}
\end{document}
이것은 당신이 염두에 둔 결과를 얻을 수 없다는 것을 의미하지 않습니다. 이는 다른 접근 방식이 더 쉬울 수도 있다는 의미일 수도 있습니다. 예를 들어,
\documentclass{article}
\usepackage{pgfplots}
\usetikzlibrary{3d,arrows.meta,bending}
\pgfplotsset{
compat=newest,
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
domain=-10:10,
samples=20,
xmin=-10,xmax=10,
ymin=-10,ymax=10,
zmin=-20,zmax=20,
point meta=z,
height=20cm,
width=15cm,
view={45}{45}
]
\pgfplotsinvokeforeach{-20,0,20}{\begin{scope}[canvas is xy plane at z=#1]
\foreach \X in {3,...,7}
{\foreach \Y in {1,...,20}
{\edef\temp{\noexpand\draw[semithick,-{Stealth[bend]},
color of colormap=500+25*#1]
(\Y*18:\X) arc[start angle=\Y*18,end angle=\Y*18+9,radius=\X];}
\temp}}
\end{scope}}
\draw[ultra thick] (0,0,-20) -- (0,0,20);
%
\end{axis}
\end{tikzpicture}
\end{document}
답변2
여기에 대한 아이디어는 다음과 같습니다@슈뢰딩거의 고양이일부 수정 사항과 함께 원래 게시물의 벡터 필드에 적용됨
- 나는 화살이 휘어지는 것을 원하지 않았다
- 반경이 증가함에 따라 그리드 밀도가 증가합니다.
- 더 나은 읽기를 위해 극변수의 이름을 변경했습니다.
- 약간의 외관상의 변화
\documentclass{article}
\usepackage{pgfplots}
\usetikzlibrary{3d,arrows.meta,bending}
\pgfplotsset{
compat=newest,
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
domain=-10:10,
samples=20,
xmin=-5,xmax=5,
ymin=-5,ymax=5,
zmin=-26,zmax=26,
point meta=z,
height=20cm,
width=15cm,
view={45}{30},
%axis lines=none
]
\pgfplotsinvokeforeach{-20,0,20}{\begin{scope}[canvas is xy plane at z=#1]
\foreach \PHI in {1,...,4}{
\foreach \R in {0,50/\PHI,...,349}{
\edef\temp{\noexpand\draw[very thick,-{Stealth[scale=0.5]},opacity=0.5,
color of colormap=500+25*#1]
(\R:\PHI) -- ++({1*sin(\R)/\PHI},{-1*cos(\R)/\PHI});
}
\temp}
}
\end{scope}
\foreach \PHI in {1,...,4}{
\edef\temp{\noexpand\draw[dotted,opacity=0.5,
color of colormap=500+25*#1]
(0,0,#1) circle (\PHI);
}
\temp
}
}
\draw[ultra thick] (0,0,-40) -- (0,0,40);
%
\end{axis}
\end{tikzpicture}
\end{document}
산출: