一般用途
我想将来自外部来源的图形文件(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-solides3d
eps 图像,该图像仅包含基本线条元素,例如 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}