我正在尝试使用 Tikz 将图形添加到我的 LaTeX 文档中。我制作了一些 2D 和 3D 图表。其中一个图表包含一个 3D 金字塔。我想将文本放在金字塔的正面和侧面。我设法将文本放在了正面。但是将文本放在侧面对我来说是个问题,因为它不是透视的,因此会破坏 3D 体验。
我希望侧面的文本能够旋转,使其看起来与侧面位于同一窗格中。我可以尝试旋转文本,但定位很麻烦。一定有更好的方法可以做到这一点?以某种方式在 z 轴上而不是 x/y 窗格中写文本。
我设法制作了一些东西来说明我的想法。应该有更好的方法来实现这一点。文本显然不具备 3D 感知能力,因此不具备透视能力。此外,文本不了解图形,并且对于较大的文本,它会超出插图的边界,因为它不受边缘的限制。
如有任何建议,我们将不胜感激。提前谢谢您!
\begin{tikzpicture}[scale=0.5]
\example of my pyramid:
\path coordinate (0) at (0,0,0)
% The base layer
coordinate (A) at (-9,0,9)
coordinate (B) at (9,0,9)
% The middle layer
coordinate (C) at (-6,4,6)
coordinate (D) at (6,4,6)
% The top layer
coordinate (E) at (-3.75,7,3.75)
coordinate (F) at (3.75,7,3.75)
coordinate (G) at (0,12,0)
% 3d effect
% The base layer
coordinate (AA) at (-9,0,-9)
coordinate (BB) at (9,0,-9)
% The middle layer
coordinate (CC) at (-6,4,-6)
coordinate (DD) at (6,4,-6)
% The top layer
coordinate (EE) at (-3.75,7,-3.75)
coordinate (FF) at (3.75,7,-3.75);
% Draw lines between points
\draw (A) -- (B) -- (BB);
\draw (C) -- (D) -- (DD);
\draw (E) -- (F) -- (FF);
\draw (A) -- (G) -- (B);
\draw (G) -- (BB);
% Text added to node positioned at center of segment.
\node at (0,2,7.5) {Base of the pyramid};
\node at (0,5.5,4.875) {Middle section};
\node at (0,9,1.875) {Top of the pyramid};
% Rotated text added to node positioned at center of segment.
\node [rotate=45] at (7.5,2,0) {Base};
\node [rotate=45] at (4.875,5,0) {Middle};
\node [rotate=45] at (1.875,9,0) {Top};
\end{tikzpicture}
答案1
和\usetikzlibrary{calc}
\path ($(B)!.5!(D)$) -- node[sloped,xslant=.2] {Base} ($(BB)!.5!(DD)$);
给出
和xslant=.5
答案2
运行xelatex
或latex->dvips->ps2pdf
\documentclass{article}
\usepackage{pst-solides3d}
\begin{document}
\psset{Decran=30,viewpoint=30 -15 10 rtp2xyz,solidmemory}
\begin{pspicture}(-4,-1)(4,4)
\psSolid[object=new,sommets=0 -3 0 %% 0
-3 0 0 %% 1
0 3 0 %% 2
3 0 0 %% 3
0 0 5, %% 4
faces={[3 2 1 0][3 4 0 ][4 3 2][4 2 1][4 1 0]},
% numfaces=all,num=all,
intersectiontype=0,
intersectionplan={[0 0 1 -2] [0 0 1 -3.5]},
intersectionlinewidth=1 1,
intersectioncolor=(bleu) (rouge),
fillcolor=green!20!white,linecolor=green!60!black,
name=P,action=draw*]
\psSolid[object=plan,action=none,definition=solidface,args=P 1,name=P1]
\psSolid[object=plan,action=none,definition=solidface,args=P 2,name=P2]
\psProjection[object=texte,phi=-139,pos=dc,text=Base of the pyramid,plan=P2]
\psProjection[object=texte,phi=-40,pos=uc,text=Top,plan=P1](1.6,1.8)
\psProjection[object=texte,phi=-40,pos=dc,fontsize=12,text=Base of the pyramid,plan=P1](-0.8,-0.8)
\end{pspicture}
\end{document}