如何对显示中的图形进行 3D 旋转

如何对显示中的图形进行 3D 旋转

我有一堆 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}

在此处输入图片描述

相关内容