我们如何绘制 3D 夹层?

我们如何绘制 3D 夹层?

我想勾勒出这幅图

在此处输入图片描述

但我无法绘制那些弯曲的夹层。这是我的代码:

\documentclass[dvipsnames,svgnames,x11names,border=5pt]{standalone}
\usepackage{pgfplots}
\usepackage{tikz,tikz-3dplot}
\usetikzlibrary{calc,3d}
\usepackage{graphicx}

\begin{document} 

\begin{tikzpicture} 

%\useasboundingbox (0.5,0,0) rectangle (10,8,0);

 %Glass
\filldraw[ball color=black!50!gray,shading angle=5, fill opacity=0.7, line join=round, draw=none] (1.25,1.2,0) -- (9.75,1.2,0) -- (9.75,1.5,0) --(1.25,1.5,0)--cycle;   

\shade[ball color=black!50!gray,shading angle=165, fill opacity=0.7, line join=round, draw=none]  (1.25,1.5,0) --(9.75,1.5,0) -- (8,3.7,0) -- (3,3.7,0) -- cycle;


%ITO
\filldraw[ball color=blue!80!green,shading angle=5, fill opacity=0.7, line join=round, draw=none] (1.65,2,0) rectangle (10.19,3,2.2);
\shade[ball color=blue!80!green,shading angle=5, fill opacity=0.7, line join=round, draw=none] (1.635,2.15,0) --(9.36,2.15,0) -- (8.03,3.81,0) -- (2.97,3.81,0) --cycle;

%NiO
\filldraw[ball color=green!50!black!80!blue,shading angle=5, fill opacity=0.7, line join=round, draw=none] (1.9,2.5,0) rectangle (9.93,3.5,2.2);
\shade[ball color=green!50!black!80!blue,shading angle=5, fill opacity=0.7, line join=round, draw=none] (1.885,2.65,0) --(9.1,2.65,0) -- (8.03,3.925,0) -- (2.97,3.925,0) --cycle;


\end{tikzpicture}

\end{document}

另外,我想拥有这些颜色并且旋转我的对象与该示例图像相同,但我无法在乳胶中完成它们!请帮助修改并完成此代码。

答案1

这是另一种方法。

Tikz 不提供线框

虽然 3D 软件包确实提供了一些到 3 个轴 x、y 和 z 的映射,但它不是线框。也就是说,您无法构建线框并根据需要旋转 3D 绘图并填充区域等。它根本不是为此目的而制作的(目前还不是?)。

因此,如果您可以使用 3D-CAD 工具或可以执行此操作的 3D 动画工具,只需使用它,导出为 pdf、png 等,然后通过包将其graphicx作为普通图像包含在内。

您还可以在节点文本中进行导入,如下所示:

\node at (0,0) {\includegraphics ...};

以艺术家的方式去对待

因此,作为一名艺术家,您只需简单地勾勒出草图,同时将 3D 幻觉考虑进去即可。

这意味着您还可以在 2D 中绘制预先旋转的平面纸张,就像艺术家看到的那样。

对于弧形薄片,下面的代码可以给你一个开始。它还不完美,你可以引入你的球和阴影效果。

因此,您需要做的就是为单个工作表导出合理的坐标,例如使用Paint.net或类似的程序:

坐标

让我们回顾一下要点

基本思想是提供"\pics",它只绘制一张曲面片(在预先感知的 3D 到 2D 映射中),放置您需要的数量并影响它们的颜色。

因此,弯曲的薄板应像

 \begin{tikzpicture}
    \pic at (0,0)     {curv={red!70/red!100/red!60}};
    \pic at (-.1,-.3) {curv={orange!70/orange!100/orange!60}};
    ...
 \end{tikzpicture}

因此pic被称为curv并且它接受3 parameters(对于颜色),我想用来分隔/

接下来,定义codefor pic curv,例如在单独的\tikzset语句中:

\tikzset{
    pics/curv/.style args={#1/#2/#3}{% accept 3 color fills
      code={
        % ~~~ sheet ~~~~~~~~
        \draw[fill=#1] (2.2,-1.4) to [out=170, in=-60] (1.2,-.5)
...
      }
    }
}

语法有点不同,因为我传递了 3 个参数作为参数args

to [in=,out=]您也可以使用贝塞尔方法,而不是通过角度来定义曲率.. controls ..

就是这样。

为了产生幻觉,下面我稍微旋转了第三张纸,但为此目的最好定义一个单独的弯曲纸。

还要注意的是,通过选择视角关闭黑色顶页您发布的图纸可能已经过时,您可能需要将图片剪辑到右侧,或根据需要扩展图纸。

结果和代码

结果

请注意,为了保持幻觉,我将\pics 稍微向左下方移动了。

\documentclass[10pt,border=3mm,tikz]{standalone}
\usepackage{tikz}


\tikzset{
    pics/curv/.style args={#1/#2/#3}{% accept 3 color fills
      code={
        % ~~~ sheet ~~~~~~~~
        \draw[fill=#1] (2.2,-1.4) to [out=170, in=-60] (1.2,-.5)
        -- (0,0) 
        to [out=280,in=140] (.6,-.9) 
        -- (2,-1.5) -- (2.2,-1.5) -- cycle;
        
        % ~~~ thickness top ~~~
        \draw[fill=#2] (0,0) -- ++(50:1mm) -- ++(1.2,-.5)
        -- ++(-140:1mm) -- cycle;
        
        % ~~~ thickness side ~~~
        \draw[fill=#3] (2.2,-1.4) to [out=170, in=-60] (1.2,-.5) -- 
        ++(50:1mm) to [out=-60,in=170] (2.2,-1.3) -- cycle;
      }
    }
}

\begin{document}

 \begin{tikzpicture}
    \pic at (0,0)     {curv={red!70/red!100/red!60}};
    \pic at (-.1,-.3) {curv={orange!70/orange!100/orange!60}};
    \pic[rotate=4] at (-.2,-.7) {curv={blue!70/blue!100/blue!60}};
 \end{tikzpicture}
\end{document}

答案2

color map这并不是试图精确地重现您帖子的屏幕截图,而是一种相对容易地生成此类“图层”的方法。您可以通过调整、绘图函数和循环参数等来自定义外观。

\documentclass[tikz,border=2mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\begin{document}
\begin{tikzpicture}
    \begin{axis}[xmin=-1,xmax=0,ymin=-1,ymax=0,
        hide axis, 
        view={-45}{45}]
        \pgfplotsinvokeforeach{1,2,3,7,11,15}{
        \addplot3[surf,shader=interp,domain=-1:0,domain y=-1:0,point meta=#1+z] {0.1*#1+#1*0.1*x*x}; 
        }
    \end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容