使用参数坐标计算网格的颜色

使用参数坐标计算网格的颜色

问题:有没有办法使用參數參數(而不是绝对的xy)里面mathparse用来计算的颜色surf

动机:我要绘制的函数具有非常困难的逆,所以这不是一个选择。

代码示例: 代码

\documentclass{standalone}
\usepackage{pgfplots}
\begin{document}
    \begin{tikzpicture}
        \begin{axis}[view={0}{90},domain=0:1,shader=interp,
            mesh/color input=explicit mathparse]
            \addplot3 [surf, point meta={symbolic={Hsb=x,y,1}}]
                      (x,y,1);
        \end{axis}
    \end{tikzpicture}
\end{document}

生产

在此处输入图片描述

而如果我绘制(x,y*.5+.5,1)而不是(x,y,1),我会得到

在此处输入图片描述

我希望颜色取决于原始的xy,而不是xy*.5+.5

希望有人能理解我的问题。提前谢谢大家!

答案1

原来\x商店參數參數。据我所知,这没有记录。因此,这个技巧将来可能会失效。

我希望下面这个复杂的例子能证明我的观点:圆环的切点颜色不同。因此颜色不是其位置的函数。

\documentclass[border=9,tikz]{standalone}
\usepackage{pgfplots}\pgfplotsset{compat=1.14}
\begin{document}

\pgfmathdeclarefunction{X}{0}{%
    \pgfmathparse{
        y<121?
            cos(x)*(3+cos(3*y))
            :
            (y<139?
                inf
                :
                (y<261?
                    4+cos(x)*(3+cos(3*y))
                    :
                    (y<279?
                        inf
                        :
                        8+cos(x)*(3+cos(3*y))
                    )
                )
            )
    }%
}
\pgfmathdeclarefunction{Y}{0}{%
    \pgfmathparse{
        y<121?
            sin(x)*(3+cos(3*y))
            :
            (y<139?
                inf
                :
                (y<261?
                    sin(3*y)
                    :
                    (y<279?
                        inf
                        :
                        sin(x)*(3+cos(3*y))
                    )
                )
            )
    }%
}
\pgfmathdeclarefunction{Z}{0}{%
    \pgfmathparse{
        y<121?
            sin(3*y)
            :
            (y<139?
                inf
                :
                (y<261?
                    sin(x)*(3+cos(3*y))
                    :
                    (y<279?
                        inf
                        :
                        sin(3*y)
                    )
                )
            )
    }%
}

\tikz[cap=round,join=round]{
    \begin{axis}[axis equal,
                 %shader=interp,
                 mesh/color input=explicit mathparse]
        \addplot3[surf,unbounded coords=jump,
                  domain  =0:360,samples  =27,
                  domain y=0:400,samples y=41,
                  z buffer=sort,
                  point meta={symbolic={Hsb=\x,.5+cos(3*\y)/3,1}}]
            (X,Y,Z);
    \end{axis}
}

示例取自https://tex.stackexchange.com/a/365790/51022。您的问题正是我在写那个答案时想问的。

相关内容