![如何对显示中的图形进行 3D 旋转](https://linux22.com/image/255788/%E5%A6%82%E4%BD%95%E5%AF%B9%E6%98%BE%E7%A4%BA%E4%B8%AD%E7%9A%84%E5%9B%BE%E5%BD%A2%E8%BF%9B%E8%A1%8C%203D%20%E6%97%8B%E8%BD%AC.png)
我有一堆 2D 图形,我喜欢使用 latex 将它们并排显示。由于图形数量很多,我无法水平显示它们。为此,我希望可以选择稍微旋转每个图形,以便在有限的空间内显示所有图形。(就像我们在 Microsoft Word 中的选项一样)
答案1
仅适用于latex->dvips->ps2pdf
\documentclass{article}
\usepackage{pst-3d,graphicx,multido}
\pagestyle{empty}
\begin{document}
\pspicture(12,5)
\multirput[lb](0.25,0)(2.5,0){5}{%
\psAffinTransform{0.7 0.3 0 1 0 0}{\includegraphics[scale=0.5]{xyz}}}
\endpspicture
\end{document}
0.7 0.3 0 1 0 0
是变换矩阵的六个值。请参见http://en.wikipedia.org/wiki/Transformation_matrix
答案2
你是指这样的吗?z 轴倾斜 10°,如果你愿意,你可以计算更大的值。
代码
\documentclass[parskip]{scrartcl}
\usepackage[margin=15mm]{geometry}
\usepackage{tikz}
\usetikzlibrary{3d}
\begin{document}
\begin{tikzpicture}[x={(1cm,0cm)},y={(0cm,1cm)},z={(0.985cm,0.174cm)}]
\foreach \x in {1,...,5}
\node[canvas is zy plane at x=3*\x,draw,fill=white] at (0,0) {\includegraphics{book}};
\end{tikzpicture}
\end{document}
输出
编辑1:现在具有不同大小的不同图片,这些图片会自动正确间隔,并且可以轻松更改 z 轴的方向和长度:
代码
\documentclass[parskip]{scrartcl}
\usepackage[margin=15mm]{geometry}
\usepackage{tikz}
\usetikzlibrary{3d}
\begin{document}
\newcommand{\zangle}{20}
\newcommand{\zlength}{0.707}
\pgfmathsetmacro{\zx}{\zlength*cos(\zangle)}
\pgfmathsetmacro{\zy}{\zlength*sin(\zangle)}
\xdef\nextx{0}
\begin{tikzpicture}[x={(1cm,0cm)},y={(0cm,1cm)},z={(\zx cm,\zy cm)}]
\foreach \f [count=\x] in {book,book2,book03,bookfour,book5}
{ \pgfmathsetmacro{\scalef}{1-\x/10}
\node[canvas is zy plane at x=\nextx,draw,fill=white,above right] (temp) at (0,0) {\includegraphics[scale=\scalef]{\f}};
\path (temp.east);
\pgfgetlastxy{\tempx}{\tempy}
\pgfmathsetmacro{\newx}{(\tempx+3)/28.453}
\xdef\nextx{\newx}
}
\end{tikzpicture}
\end{document}
输出
答案3
赫伯特 (Herbert) 的回答中已经使用了“引入”\multirput
来代替“那个”。\multido
\documentclass[pstricks,border=0pt]{standalone}
\usepackage{pst-3d,graphicx,multido}
\begin{document}
\multido{\n=1+1}{5}
{
\begin{pspicture}(4,3)
\multirput[bl](0,0)(0.62,0){\n}{\psAffinTransform{0.7 0.3 0 1 0 0}{\includegraphics[scale=0.246]{parishilton}}}
\end{pspicture}
}
\end{document}
答案4
有点晚了,但是这是使用 TikZ 的另一种方法:
\documentclass[tikz, border=3mm]{standalone}
\begin{document}
\begin{tikzpicture}
\foreach \x in {1,...,5} {
\begin{scope}[cm={1,0.3,0,1,(\x,0)}]
\node[transform shape, draw, red, ultra thick, inner sep=0.2mm] {
\includegraphics[width=2cm]{fz.jpg}
};
\end{scope}
}
\end{tikzpicture}
\end{document}