我正在尝试重新创建下面的图像,尽可能接近。
重点是底部的周长加上立方体的高度需要为 30。这样得出
30 = 4x + h
所以我希望能够绘制立方体,其中 x 的值会发生变化。以下是我目前所做的
\documentclass{minimal}
\usepackage{pgfplots,tikz}
\usetikzlibrary{shapes,arrows,calc}
\begin{document}
\newcommand\pgfmathsinandcos[3]{%
\pgfmathsetmacro#1{sin(#3)}%
\pgfmathsetmacro#2{cos(#3)}%
}
\begin{tikzpicture}
\pgfmathsetmacro\AngleFuite{30}
\pgfmathsetmacro\coeffReduc{.3}
\pgfmathsetmacro\clen{2}
\pgfmathsinandcos\sint\cost{\AngleFuite}
\begin{scope} [x = {(\coeffReduc*\cost,-\coeffReduc*\sint)},
y = {(1cm,0cm)},
z = {(0cm,1cm)}]
\pgfmathsetmacro{\x}{5} \pgfmathsetmacro{\h}{30-4*\x}
\path coordinate (A) at (-\h/2,\x/2,\x/2)
coordinate (B) at (-\h/2,-\x/2,\x/2)
coordinate (C) at (-\h/2,-\x/2,-\x/2)
coordinate (D) at (-\h/2,\x/2,-\x/2)
coordinate (A1) at (\h/2,\x/2,\x/2)
coordinate (B1) at (\h/2,-\x/2,\x/2)
coordinate (C1) at (\h/2,-\x/2,-\x/2)
coordinate (D1) at (\h/2,\x/2,-\x/2)
coordinate[label=$h$,left=0.65em] (M1) at ($ (B)!.5!(C) $)
coordinate[label=$x$,below=2em] (M2) at ($ (C1)!.5!(C) $)
coordinate[label=$x$,below=1.75em] (M3) at ($ (C1)!.5!(D1) $);
\fill [blue, fill opacity = 0.2] (A)--(B)--(C)--(D) -- cycle;
\fill [blue, fill opacity = 0.3] (C)--(D)--(D1)--(C1) -- cycle;
\fill [blue, fill opacity = 0.2] (A1)--(B1)--(C1)--(D1) -- cycle;
\fill [blue, fill opacity = 0.2] (B1)--(C1)--(C)--(B) -- cycle;
\fill [blue, fill opacity = 0.1] (A1)--(D1)--(D)--(A) -- cycle;
\draw (A) -- (B) -- (C) -- (D) -- (A) -- (A1) -- (B1) -- (C1) -- (D1) -- (A1) ;
\draw (B) -- (B1) ; \draw (C) -- (C1) ; \draw (D) -- (D1) ;
\end{scope}
\end{tikzpicture}
\end{document}
我的主要问题是代码非常混乱。而且仍然不能完全按照我的要求完成。我仍然无法正确旋转立方体,背景线没有阴影,整个坐标系统看起来非常混乱和不专业。如果图片再小一点就更好了,我试过缩放整个图片,但遗憾的是这也缩小了标签。
有没有什么建议可以得到更好的代码,或者改进我的方法?
答案1
运行xelatex
\documentclass[pstricks]{standalone}
\usepackage{pst-solides3d}
\begin{document}
\psset{Decran=15,viewpoint=20 20 50 rtp2xyz,lightsrc=viewpoint}
\multido{\iX=1+1}{7}{%
\begin{pspicture}(-5,-5)(5,13)
\psSolid[object=parallelepiped,
a=\iX,b=a,c=30 a 4 mul sub,
rm=0,incolor=blue!40,hollow,
fillcolor=red!80,
action=draw**]
\rput[r](5,5){\huge$x=\iX$}
\end{pspicture}
\clearpage}
\end{document}