在 3D 图中添加外部图形作为平面

在 3D 图中添加外部图形作为平面

我正在尝试将外部图像添加为 3D 图中的倾斜平面。倾斜应使用 pgfplots 完成。

期望的输出如下所示: 期望输出

最小工作示例插入图像的未倾斜版本,如下所示。

MWO 输出

如果无法使用 pgfplots 倾斜图像,我还可以保存每个 y 和 z 坐标的强度数据。那么如何从表中添加数据呢?

\documentclass{standalone}
\usepackage{pgfplots}

\begin{document}
\begin{tikzpicture}
\begin{axis}[
enlargelimits=false,
axis on top,
axis equal image,
xmin=0,xmax=4,
ymin=-1,ymax=1,
zmin=-1,zmax=1,
xlabel=$x$,ylabel=$y$,zlabel=$z$,
view={-20}{30},
xtick={0, 3},
]
\addplot3 graphics [
xmin=3,xmax=3,
ymin=-1,ymax=1,
zmin=-1,zmax=1,
] {test_img.jpg};
\end{axis}
\end{tikzpicture}
\end{document}

答案1

我不确定 pgfplots 是否支持此功能。如果支持,则通过选项points,我保留了该选项,但在代码中进行了注释,因为我无法使图片变换。但是,可以使用 3d 库来变换和放置图片。

\documentclass{standalone}
\usepackage{pgfplots}
\usetikzlibrary{3d,calc}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
enlargelimits=false,
axis on top,
axis equal image,
xmin=0,xmax=4,
ymin=-1,ymax=1,
zmin=-1,zmax=1,
xlabel=$x$,ylabel=$y$,zlabel=$z$,
view={-20}{30},
xtick={0, 3},
]
\path (axis cs:0,0,0) coordinate (O) (axis cs:1,0,0) coordinate (X)  
(axis cs:0,1,0) coordinate (Y) (axis cs:0,0,1) coordinate (Z)
 (axis cs:3,0,0) coordinate (P)  ;
% \addplot3 graphics [points={
% (3,-1,-1) => (0,0)
% (3,1,1) => (8,5)
% (3,-1,1) => (0,5)
% (3,1,-1) => (8,0) 
% (3,0,0) => (4,2.5) 
% }
% ] {example-image-duck};
\end{axis}
 \begin{scope}[x={($(X)-(O)$)},y={($(Y)-(O)$)},z={($(Z)-(O)$)},
    canvas is yz plane at x=0,transform shape]
  \path (P) node{\includegraphics[width=2cm,height=2cm]{example-image-duck}};
 \end{scope}
\end{tikzpicture}
\end{document}

在此处输入图片描述

axis您也可以在环境中拥有它。

\documentclass{standalone}
\usepackage{pgfplots}
\usetikzlibrary{3d,calc}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
enlargelimits=false,
axis on top,
axis equal image,
xmin=0,xmax=4,
ymin=-1,ymax=1,
zmin=-1,zmax=1,
xlabel=$x$,ylabel=$y$,zlabel=$z$,
view={-20}{30},
xtick={0, 3},
]
\path (axis cs:0,0,0) coordinate (O) (axis cs:1,0,0) coordinate (X)  
(axis cs:0,1,0) coordinate (Y) (axis cs:0,0,1) coordinate (Z)
 (axis cs:3,0,0) coordinate (P)  
 [x={($(X)-(O)$)},y={($(Y)-(O)$)},z={($(Z)-(O)$)},
    canvas is yz plane at x=0,transform shape]
   (P) node{\includegraphics[width=2cm,height=2cm]{example-image-duck}};
\end{axis}
\end{tikzpicture}
\end{document}

相关内容