我正在使用 3d 库在 z=0 平面上放置一个圆圈,还有其他东西。我想让这个圆圈呈放射状褪色,但结果并不像我预期的那样,因为褪色与距离原点的距离不成比例。我该怎么办?
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{3d,fadings}
\tikzfading [name=radialfade, inner color=transparent!0, outer color=transparent!100]
\begin{document}
\begin{tikzpicture} [x={(-0.3535,-0.3535cm)}, y={(1cm,0cm)}, z={(0cm,1cm)}, scale=3]
\begin{scope} [canvas is xy plane at z=0]
\fill [blue, path fading=radialfade] circle (1);
\end{scope}
\draw[-latex] (-1,0,0) -- (1,0,0) node [left] {$x$};
\draw[-latex] (0,-1,0) -- (0,1,0) node [below] {$y$};
\draw[-latex] (0,0,-0.5) -- (0,0,0.5) node [left] {$z$};
\end{tikzpicture}
\end{document}
答案1
正如 Andrew Stacey 在一些评论中提到的,TikZ 不是一个真正的 3D 系统 - 而径向衰落是一种二维构造。
您需要一些 3d 投影算法来计算颜色。
一种可能性是样本这样的投影并在采样点之间进行插值。TikZ 不直接支持此功能(因为它涉及更复杂的阴影),但您可以使用pgfplots
及其surf
绘图处理程序来获得效果:
编辑:我没有意识到您明确询问了示例的轴方向向量。我将它们添加到答案中。
\documentclass{standalone}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.7} % *EDIT*: this improves scale uniformly.
\begin{document}
\begin{tikzpicture}
\begin{axis}[axis on top,
axis lines=center,
min=-1,max=1,
colormap={somename}{color=(white) color=(blue)},
% *EDIT*: this here respects your choice of unit vectors.
% scale uniformly computes one common scaling factor
% and chooses limits such that the image fulfills the
% prescribed width/height as best as possible.
x={(-0.3535cm,-0.3535cm)}, y={(1cm,0cm)}, z={(0cm,1cm)}, scale mode=scale uniformly,
]
\addplot3[surf,
shader=interp,
%z buffer=sort, % only for complete sphere
samples=30,
domain=-1:0, % -1:1 is a complete sphere. -1:0 half
y domain=0:2*pi,
variable=\t,
point meta=t^2]
({sqrt(1-t^2) * cos(deg(y))},
{sqrt( 1-t^2 ) * sin(deg(y))},
0);% use 't' here to draw the sphere
\end{axis}
\end{tikzpicture}
\end{document}
这个想法是使用球体参数化形式 (x(t,y), y(t,y), 0),即固定 z=0。关键point meta
是定义颜色数据。我认为这t
是正确的选择,但t^2
看起来更好。surf,shader=interp
关键是将采样的参数图绘制为带有插值颜色的表面。
颜色图使用 RGB 颜色插值。transparent
您的示例中有什么?我colormap
使用blue
和定义了一个white
。
编辑:如果您使用的是 pgfplots 1.7 或更高版本,则可以将新功能patch type sampling
与更高阶的补丁(如)结合使用patch type=bicubic
。这允许重建具有平滑(更)边界的几何图形。
以下示例由\usepgfplotslibrary{patchplots}
和
patch type sampling, patch type=bicubic,
samples=10,% CF reduced because bicubic is smooth anyway