我正在研究 Pst-Solides3d 文档中 4.14.3 给出的示例:与到原点的距离相关的转换。
代码如下
\documentclass[a4paper,10pt]{article}
\usepackage[utf8x]{inputenc}
\usepackage[english]{babel}
\usepackage[english,verbose]{layout}
\usepackage{pstricks-add}
\usepackage{auto-pst-pdf}
\usepackage{multido}
\usepackage{pst-solides3d}
\usepackage{fp}
\begin{document}
\begin{pspicture}(-3,-4)(4,3)
\psset{viewpoint=20 60 20 rtp2xyz,lightsrc=10 15 7,
Decran=20}
\pstVerb{
/gro {
4 dict begin
/M defpoint3d
/a 0.5 def
/b 1 a 3 sqrt mul sub def
/k M norme3d a mul b add def
M k mulv3d
end
} def}%
\psset{linewidth=.02,linecolor=gray}
\psSolid[object=cube,a=3,ngrid=9,transform=gro](0,0,0)%
\end{pspicture}
\end{document}
并相应地变换立方体。我想要的是能够在循环中对过程进行参数化,以使用参数 \a。
\documentclass[a4paper,10pt]{article}
\usepackage[utf8x]{inputenc}
\usepackage[english]{babel}
\usepackage[english,verbose]{layout}
\usepackage{pstricks-add}
\usepackage{auto-pst-pdf}
\usepackage{multido}
\usepackage{pst-solides3d}
\usepackage{fp}
\begin{document}
\multido{\iA=0+1}{15}{%
\FPeval{\iB}{\iA*0.5/15}%
\begin{pspicture}(-3,-4)(4,3)
\psset{viewpoint=20 60 20 rtp2xyz,lightsrc=10 15 7,
Decran=20}
\pstVerb{
/gro {
4 dict begin
/M defpoint3d
/a \iB\space def
/b 1 a 3 sqrt mul sub def
/k M norme3d a mul b add def
M k mulv3d
end
} def}%
\psset{linewidth=.02,linecolor=gray}
\psSolid[object=cube,a=3,ngrid=9,transform=gro](0,0,0)%
\end{pspicture}
\newpage
}
\end{document}
因此参数 a 在 15 个步骤中从 0 变化到 0.5(模 1 增量..)。但是当我在 /a 后放置除数字以外的任何内容时,pst-Solides3d 会不喜欢它。有什么解决办法吗?
为了完全清楚:我的目标是为立方体上的坐标变换制作动画。变换由函数 /gro 给出。目标变换立方体具有参数 /a = 0.5 的变换。/a = 0 根本不会变换立方体。所以我的目标是生成 /a 范围从 0 到 0.5 的图片,即从未变换到完全变换的立方体。然后我将使用 animategraphics 为变换制作动画。
编辑:我已经弄明白了,我所缺少的只是 \iB 之后的 \space。