平均能量损失

平均能量损失

我正在尝试实现与讨论的内容非常相似的事情 这里

我有以下图像,并且我知道盒子的大小。从西到东(366,534),从南到北(0.00565,10.6),最后一个方向(页面法线)是(0,19.9)。

样本图像

平均能量损失

\documentclass[]{standalone}

\usepackage{tikz}
\usepackage{pgfplots}

\begin{document}

\begin{tikzpicture}
\begin{axis}[3d 
box,xmin=0,xmax=10,ymin=366,ymax=534,
%grid=both,
minor z tick num=1]
\addplot3 graphics[points={%
  ( 0,366,0.00565) => (0, 227)
  (19.9,534,0.00565) => (3804,0)
  ( 0,534,0.00565) => (3951,227)
  ( 0,366,-10.6) => (47,432)
}] {mwe.png};

\end{axis}
\end{tikzpicture}

\end{document}

我的代码正在生成,

在此处输入图片描述

在链接的讨论中有一个 matlab 脚本可以正确获取坐标,而我想这就是我搞砸事情的部分,因为我尝试使用 gimp 获取像素。

除了 Matlab 脚本之外,还有其他可靠的方法来获取像素吗?

或者是我的观点无法通过pgfplots我也承认我不太确定我是否使用了好的点组将坐标映射到像素中。

答案1

正如 @marsupilam 提到的[它也在文档中(我的错)pgfplots]:pgfplots 不支持透视投影 (版本 1.15)

幸运的是,人们可以启用 Paraview 中的所谓功能parallel projection来导出类似于以下的图像,我相信这符合的要求pgfplots

parallel_view

两个图像的框尺寸为:从西到东(366, 534),从南到北(0.00565, 10.6),最后一个方向(页面法线)为(0, 19.9)。

笔记:我重复一下文档再次。如果您使用 GIMP 获取坐标,请注意 GIMP 将左上角视为 (0,0),但 PGFPLOTS 将左下角视为。

平均能量损失

\documentclass[]{standalone}
\usepackage{tikz}
\usepackage{pgfplots}

\begin{document}

\begin{tikzpicture}
\begin{axis}[3d box,
ymin=0,ymax=19.9,
zmin=0.00565,zmax=10.6,
%minor z tick num=1]
\addplot3 graphics[points={%
  (366, 0,   0.00565) => (156, 0)
  (366, 19.9,0.00565) => (0, 478-166)
  (534, 0,   0.00565) => (3399,0)
  (366, 0,   10.6) => (239,478-313)
}]{mwe_parallel.png};

\addplot3+ [only marks] coordinates {
  (366, 0,   0.00565) 
  (366, 19.9,0.00565)
  (534, 0,   0.00565)
  (366, 0,   10.6)
};
\end{axis}
\end{tikzpicture}
\end{document}

蚂蚁结果;

好结果

更新:使用widthaxis 中的或类似选项来缩放 png。它处理了 @marsupilam 评论中的问题。查看更多有关体重秤的信息。

缩放结果将会像这样(也带有更新的颜色);

在此处输入图片描述

答案2

这里,进行一些有趣的彩色调试,

输出

在此处输入图片描述

代码

\documentclass[tikz]{standalone}
\usetikzlibrary{backgrounds}
\usepackage{pgfplots}
\pgfplotsset{compat=1.14}

\begin{document}

\begin{tikzpicture}
  \begin{axis}
    [
      name=myPlot,
      ymin=0,ymax=19.9,
      zmin=0.00565,zmax=10.6,
      minor z tick num=1,
      xtick distance=20,
      ultra thick,
      axis on top,
      3d box=complete,
      %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      xscale=.4, % I think this setting is what you need   %%
      yscale=.9, %                                         %%
      %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    ]
    \addplot3 
    [opacity=.8,]
    graphics
    [
      points=
      {%
        (366, 0,   0.00565) => (156, 0)
        (366, 19.9,0.00565) => (0, 478-166)
        (534, 0,   0.00565) => (3399,0)
        (366, 0,   10.6) => (239,478-313)
      },
    ]
    {mweParallel.jpg};

    \addplot3+ [only marks] coordinates 
    {
      (366, 0,   0.00565) 
      (366, 19.9,0.00565)
      (534, 0,   0.00565)
      (366, 0,   10.6)
    };

    \pgfplotsextra
    {
      \foreach \x in {0,1}
      {
        \foreach \y in {0,1}
        {
          \foreach \z in {0,1}
          {
            \coordinate (a-\x-\y-\z) at (rel axis cs:\x,\y,\z);
          }
        }
      }
    }
  \end{axis}
  \foreach \i in {0,1}
  {
    \foreach \j in {0,1}
    {
      \draw [orange, line width=1mm] (a-\i-\j-0) -- (a-\i-\j-1);
      \draw [yellow, line width=1mm] (a-\i-0-\j) -- (a-\i-1-\j);
      \draw [green!80!black, line width=1mm] (a-0-\i-\j) -- (a-1-\i-\j);
    }
    \fill [opacity=.3,green!80!black,] (a-\i-0-0) -- (a-\i-1-0) -- (a-\i-1-1) -- (a-\i-0-1) ;
    \fill [opacity=.3,yellow,] (a-0-\i-0) -- (a-1-\i-0) -- (a-1-\i-1) -- (a-0-\i-1) ;
    %\fill [opacity=.3,orange,] (a-0-0-\i) -- (a-1-0-\i) -- (a-1-1-\i) -- (a-0-1-\i) ;
  }

\end{tikzpicture}
\end{document}

相关内容