我正在尝试将 2D 高斯嵌入到 tikz-3dplot 中,但在转换坐标系时遇到了问题。作为一个简化的示例,我在 pgflots 中绘制了一个平面,\addplot3
并将该图嵌入到 tikz-3dplot 中:
\documentclass[landscape]{standalone}
\usepackage{pgfplots}
\usepackage{tikz}
\usepackage{tikz-3dplot}
\begin{document}
\tdplotsetmaincoords{70}{155}
\pgfmathdeclarefunction{normal}{4}{%
%\pgfmathparse{x+y}
\pgfmathparse{1}
}
\resizebox{\textwidth}{!}{%
\begin{tikzpicture}[tdplot_main_coords]
% receiver
\pgfmathsetmacro\minx{-5}
\pgfmathsetmacro\maxx{5}
\pgfmathsetmacro\miny{-5}
\pgfmathsetmacro\maxy{5}
\pgfmathsetmacro\nextx{\minx+1}
\pgfmathsetmacro\nexty{\miny+1}
\pgfmathsetmacro\z{0}
\foreach \x in {\minx,\nextx,...,\maxx}
{
\foreach \y in {\miny,\nexty,...,\maxy}
{
\draw[gray] (\x,\miny,\z) -- (\x,\maxy,\z);
\draw[gray] (\minx,\y,\z) -- (\maxx, \y,\z);
}
}
\draw[->, very thick,red] (-2,-3,0) -- (1,-3,0) node [above] {$x$};
\draw[->, very thick,blue] (-2,-3,0) -- (-2,0,0) node [above] {$y$};
\draw[->, very thick,green] (-2,-3,0) -- (-2,-3,3) node [above] {$z$};
\begin{axis}[
anchor={south east}, view={155}{20}, samples=10, xlabel={X}, ylabel={Y},
zlabel={Z}, width=10cm,height=10cm,
xmin=-5,xmax=5,ymin=-5,ymax=5,zmin=-5,zmax=5
]
\addplot3[surf]{normal(0,0,0.2,0.2)};
\end{axis}
\end{tikzpicture}
}
\end{document}
这似乎有效,尽管我不确定轴是否真的对齐了。但是,我无法概括变换;每当我更改时\tdplotsetmaincoords
,我都需要通过反复试验找到合适的变换,但通常会完全失败。
从 tikz-3dplot 坐标到 pgfplots 坐标的一般变换是什么?有没有办法做到这一点而不显式计算变换?
到目前为止,我的猜测是,对于tdplotsetmaincoords{x}{y}
,我需要设置view={y}{?}
。
答案1
在其默认配置中,pgfplots
可以自由缩放图像,使其看起来合适:默认值为 ,scale mode=auto
归结为scale mode=stretch to fill
。顾名思义,stretch to fill
可能会扭曲单位向量之间的角度,尽管图像在内部仍然是正确的。
这对于你的轴来说也是如此:pgfplots
只需要尊重width
和heigth
作为约束,并且将重新缩放单位向量。为了将它们与(外部)坐标系对齐,您将需要使用scale mode=scale uniformly
或需要显式设置轴向量(选项x=(exx,exy)
及其变体)。请参阅 pgfplots 参考手册中的“缩放选项”部分和提到的选项。
正如您在问题中所述,您还需要确定如何映射\tdplotsetmaincoords
到 接受的角度view
。我的答案目前不涵盖这部分信息(因为没有时间仔细考虑)。在没有仔细考虑细节的情况下,我猜你需要一些“交换参数和/或在某些角度上添加 90 的倍数”的组合。