同一平面上的斑块具有相同的阴影(2)

同一平面上的斑块具有相同的阴影(2)

我正在尝试使用patch table with point meta问题中的“同一平面上的面片具有相同的阴影”但我得到的是同一平面上的三角形,但色调强度不同。首先,我使用 Mathematica 处理数据以获取一组点的色调。

在 Mathematica 中:

R21 = {{0, 0, 0}, {0, 0, 0.436694}, {0, 0.436694, 0.436694}, {0, 
    0.5822, 0.2911}, {0, 0.873387, 0}, {0.291187, 0.5822, 
    0.2911}, {0.436694, 0.436694, 0.436694}, {0.873387, 0, 
    0}, {0.873387, 0, 0.436694}};

R = ConvexHullMesh[R21]

在此处输入图片描述

现在我计算图形中每个三角形的顶点列表,并在最后一列显示其颜色:

lookuptable = 
  AssociationThread[Range[MeshCellCount[R, 0]], 
   Flatten[Nearest[R21 -> Automatic, MeshCoordinates[R]]]];

faces = Partition[
   Lookup[lookuptable, 
    Flatten[MeshCells[R, 2, "Multicells" -> True][[1, 1]]]], 3];
closedfaces = Join[faces, faces[[All, {1}]], 2] - 1;

lsttriangles = {};
Do[x = R21[[closedfaces[[i, 1]] + 1]] - R21[[closedfaces[[i, 2]] + 1]];
  y = R21[[closedfaces[[i, 1]] + 1]] - 
    R21[[closedfaces[[i, 3]] + 1]];
  z = Cross[x, y];
  AppendTo[lsttriangles, 
   Join[Take[closedfaces[[i]], 3], {Abs[z.{1, 2, 3}/Sqrt[z.z]]}]], {i,
    1, Length[closedfaces]}];

其中lsttriangles包含具有强度颜色数据的图形顶点列表。

使用这些数据,我可以用以下代码绘制图形:

\begin{tikzpicture}
        \begin{axis}[view/v=25,view/h=126,xlabel=$a_1$,ylabel=$a_2$,zlabel=$a_3$,
            % colormap/greenyellow,
            colormap={darkblue}{color(1)=(blue!80!black!90) color(2)=(blue!80!black!70) color(3)=(blue!80!black!50) color(4)=(blue!80!black!30)},
            xmin=0,xmax=1,ymin=0,ymax=1,zmin=0,zmax=1, grid=major]
        \addplot3[%xmin=0,xmax=1,
            opacity=0, 
            fill opacity=1,
            table/row sep=\\,
            patch,
            patch type=polygon,
            vertex count=3,
            patch table with point meta={%
            % pt1 pt2 pt3 pt4 pt5 cdata
              0 4   7   3. \\
              7 8   1   2. \\
              8 6   2   3. \\
              6 4   2   3.53553 \\
              8 7   6   2.12132 \\
              7 4   6   2.12132 \\
              4 0   2   1. \\
              0 7   1   2. \\
              0 1   2   1. \\
              1 8   2   3. \\
              }
        ]
        table {
            x y z \\
            0   0   0 \\
            0   0   0.436694 \\
            0   0.436694    0.436694 \\
            0   0.5822  0.2911 \\
            0   0.873387    0 \\
            0.291187    0.5822  0.2911 \\
            0.436694    0.436694    0.436694 \\
            0.873387    0   0 \\
            0.873387    0   0.436694 \\
        };

        \end{axis}
        \end{tikzpicture}

然而,结果却用不同的颜色对同一平面进行着色:

在此处输入图片描述

如何才能使同一平面上的三角形颜色相同?使用 Mathematica 绘制凸包的点可以从中看到InputForm[R]。我对这些点尝试了相同的过程,结果在图中具有类似的效果。

答案1

我认为问题在某种程度上出在 Mathematica 方面。你得到了一个多余的三角形:7 8 1 2.。如果我删除它,我会得到

在此处输入图片描述

\documentclass{article}

\usepackage{pgfplots}
\pgfplotsset{compat=1.16}

\usepgfplotslibrary{patchplots}

\begin{document}

\begin{tikzpicture}
        \begin{axis}[view/v=25,view/h=126,xlabel=$a_1$,ylabel=$a_2$,zlabel=$a_3$,
            % colormap/greenyellow,
            colormap={darkblue}{color(1)=(blue!80!black!90) color(2)=(blue!80!black!70) color(3)=(blue!80!black!50) color(4)=(blue!80!black!30)},
            xmin=0,xmax=1,ymin=0,ymax=1,zmin=0,zmax=1, grid=major]
        \addplot3[%xmin=0,xmax=1,
            opacity=0, 
            fill opacity=1,
            table/row sep=\\,
            patch,
            patch type=polygon,
            vertex count=3,
            patch table with point meta={%
            % pt1 pt2 pt3 pt4 pt5 cdata
              0 4   7   3. \\
              8 6   2   3. \\
              6 4   2   3.53553 \\
              8 7   6   2.12132 \\
              7 4   6   2.12132 \\
              4 0   2   1. \\
              0 7   1   2. \\
              0 1   2   1. \\
              1 8   2   3. \\
              }
        ]
        table {
            x y z \\
            0   0   0 \\
            0   0   0.436694 \\
            0   0.436694    0.436694 \\
            0   0.5822  0.2911 \\
            0   0.873387    0 \\
            0.291187    0.5822  0.2911 \\
            0.436694    0.436694    0.436694 \\
            0.873387    0   0 \\
            0.873387    0   0.436694 \\
        };
% removed       
%              7 8   1   2. \\

% \addplot3[%xmin=0,xmax=1,
%     opacity=1,
%     table/row sep=\\,nodes near coords/.append style={color=red},
%     only marks,nodes near coords=\coordindex
% ]
% table {
%     x y z\\
%             0   0   0 \\
%             0   0   0.436694 \\
%             0   0.436694    0.436694 \\
%             0   0.5822  0.2911 \\
%             0   0.873387    0 \\
%             0.291187    0.5822  0.2911 \\
%             0.436694    0.436694    0.436694 \\
%             0.873387    0   0 \\
%             0.873387    0   0.436694 \\
%         };
\end{axis}
\end{tikzpicture}
\end{document}

您可以通过恢复三角形、恢复注释掉的\addplot并设置来进行自我调试fill opacity=0.6,。这暗示了罪魁祸首。

在此处输入图片描述

原则上,pgfplots 应该隐藏它,但我猜测由于它的所有角都在一些可见的边缘上,所以 pgfplots 决定保留它。

相关内容