TikZ,3d 库和圆形淡入淡出

TikZ,3d 库和圆形淡入淡出

我正在使用 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

在此处输入图片描述

相关内容