将包含的 2D 图形投影到平面

将包含的 2D 图形投影到平面

一般用途

我想将来自外部来源的图形文件(example.pdf保存在我的计算机上,例如芯片设计)投影到 3D 图形的底部(我可以LaTeX使用 TikZ、pstrick 或 asymptote 绘制)。

我知道它适用于文本字母,请参阅如何将文本投影到平面上?。所以我猜想它也可以与包含的图形一起工作!

使用 TikZ 的示例

我也朝着这个目标迈出了一小步,但我对在 3D 中执行 2D 旋转并不满意。我如何配置命令

/tikz/cm={a, b, c, d, coordinate}

以便执行 3D 旋转?该命令在 tikz-pgf 手册 (v3.0.0,第 363 页) 第 25.3 章中给出。或者有更简单的方法吗?也可以使用 Canvas Transformation...

顺便说一下,我使用

\tdplotsetmaincoords{phi}{theta}

包含在包裹里tikz-3dplot

我的 MWE:

\documentclass[border=5pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{3D,calc}

\begin{document}

\begin{tikzpicture}
\coordinate (chip) at (0,0,0);
\node[cm={1,0,cos(20),sin(20),(0,0)}] at (coordA){\includegraphics[width=20em]{example.pdf}};
\end{tikzpicture}
\end{document}

渐近线

我还想知道是否可以包含带有渐近线的图形。

编辑(不是最小 tikz 示例):

我想让你了解我打算做什么:

\documentclass[border=5pt]{standalone}
\usepackage{tikz,tikz-3dplot}
\usetikzlibrary{calc}

\newcommand{\drawrect}[4]{
    \fill[red!50,opacity=0.5] #1 -- #2 -- #3 -- #4 -- cycle;
}

\begin{document}

\begin{tikzpicture}
% Underlaying graphics:
\node[cm={cos(-20),sin(-20),sin(80),cos(80),(0,0)}]{\includegraphics[width=20em]{example-image.pdf}};
% Position of the box:
\tdplotsetmaincoords{75.3}{55}
\begin{scope}[tdplot_main_coords,scale=1]
    \coordinate (positionA) at (+2.2,0,0);
\end{scope}
% Draw the rotated box:
\tdplotsetmaincoords{75.3}{55+90+9};
\begin{scope}[tdplot_main_coords,scale=1]
    % Rectangle's (side's) half sizes
    \coordinate (RectangleX) at (1.15,0,0);
    \coordinate (RectangleY) at (0,1.15,0);
    \coordinate (RectangleZ) at (0,0,0.2);
    % Center of cube:
    \coordinate (root) at ($(positionA)+(RectangleZ)$);
    % Cube:
    \drawrect
        {($(root)-(RectangleX)-(RectangleY)-(RectangleZ)$)}
        {($(root)+(RectangleX)-(RectangleY)-(RectangleZ)$)}
        {($(root)+(RectangleX)-(RectangleY)+(RectangleZ)$)}
        {($(root)-(RectangleX)-(RectangleY)+(RectangleZ)$)}
    \drawrect
        {($(root)-(RectangleX)-(RectangleY)-(RectangleZ)$)}
        {($(root)+(RectangleX)-(RectangleY)-(RectangleZ)$)}
        {($(root)+(RectangleX)+(RectangleY)-(RectangleZ)$)}
        {($(root)-(RectangleX)+(RectangleY)-(RectangleZ)$)}
    \drawrect
        {($(root)-(RectangleX)-(RectangleY)-(RectangleZ)$)}
        {($(root)-(RectangleX)-(RectangleY)+(RectangleZ)$)}
        {($(root)-(RectangleX)+(RectangleY)+(RectangleZ)$)}
        {($(root)-(RectangleX)+(RectangleY)-(RectangleZ)$)}
    \drawrect
        {($(root)+(RectangleX)+(RectangleY)+(RectangleZ)$)}
        {($(root)+(RectangleX)+(RectangleY)-(RectangleZ)$)}
        {($(root)+(RectangleX)-(RectangleY)-(RectangleZ)$)}
        {($(root)+(RectangleX)-(RectangleY)+(RectangleZ)$)}
    \drawrect
        {($(root)+(RectangleX)+(RectangleY)+(RectangleZ)$)}
        {($(root)+(RectangleX)+(RectangleY)-(RectangleZ)$)}
        {($(root)-(RectangleX)+(RectangleY)-(RectangleZ)$)}
        {($(root)-(RectangleX)+(RectangleY)+(RectangleZ)$)}
    \drawrect
        {($(root)+(RectangleX)+(RectangleY)+(RectangleZ)$)}
        {($(root)-(RectangleX)+(RectangleY)+(RectangleZ)$)}
        {($(root)-(RectangleX)-(RectangleY)+(RectangleZ)$)}
        {($(root)+(RectangleX)-(RectangleY)+(RectangleZ)$)}
    \end{scope}
\end{tikzpicture}
\end{document}

结果是:

使用扩展代码的简单示例

其他应用

它在某种程度上类似于建筑师的平面图。下面是 2D 平面图,上面是简单的 3D 结构。

在此处输入图片描述

答案1

在立方体中,底部是不可见的,这就是我定义自己的平面 P2inner 的原因。需要最新的pst-solides3deps 图像,该图像仅包含基本线条元素,例如 lineto、curveto 和 moveto:

\documentclass[pstricks]{standalone}
\usepackage{pst-solides3d}
\begin{document}

\psset{viewpoint=20 -120 30 rtp2xyz,Decran=20,unitPicture=15,lightsrc=viewpoint}
\begin{pspicture}[solidmemory](-7,-9)(8,3)
\psSolid[object=plan,definition=normalpoint,base=-6 6 -6 6,args={0 0 -4 [0 0.1 1]},
  fillstyle=solid,linecolor=black!15,fillcolor=black!10,name=P2inner]
\psImage[unitPicture=30,file=tiger.eps,origine=0 0 -4,normal=0 0 1,phi=180](-4,0)
\psSolid[object=cube,a=4,name=Cube,linecolor=red,numfaces=all,fontsize=100,
  RotZ=20,action=draw]
\psImage[unitPicture=30,file=tiger.eps,origine=Cube 0 solidcentreface,normal=Cube 0 solidnormaleface,phi=-90]
\psImage[unitPicture=30,file=tiger.eps,origine=Cube 3 solidcentreface,normal=Cube 3 solidnormaleface]
\psImage[unitPicture=30,file=tiger.eps,origine=Cube 2 solidcentreface,normal=Cube 2 solidnormaleface]
\end{pspicture}

\end{document}

在此处输入图片描述

答案2

不确定这是否是你想要的,但调整提供的代码阿兰·马特斯如何将文本投影到平面上?很容易获得

在此处输入图片描述

代码如下:

\documentclass[border=5pt]{standalone}
\usepackage{tikz}
\usepackage{mwe}
\usetikzlibrary{3D,calc}

\begin{document}

\begin{tikzpicture}[x={(0.5cm,0.5cm)}, y={(1cm,0cm)}, z={(0cm,1cm)}]
\begin{scope}[canvas is yx plane at z=0]
\node[draw,transform shape] (a) {\includegraphics[width=20em]{example-image.pdf}};
\end{scope}

\foreach \i in {south west, south east, north east, north west}
\draw[dashed] (a.\i) --++(0,0,2) coordinate(b-\i);

\draw (b-south west)--(b-south east)--(b-north east)--(b-north west)--cycle;

\end{tikzpicture}
\end{document}

相关内容