изменить цвет точки в полярных координатах tikz

изменить цвет точки в полярных координатах tikz

В настоящее время я борюсь с изменением цвета отдельных точек в полярных координатах. Я хочу создать визуализацию для цветового пространства HSV с помощью цилиндра.

БлагодаряHSV-затенение конуса в pgfplotsЯ узнал, что можно использовать point meta={symbolic={Hsb=v,u,u}}для получения нужного цвета непосредственно из текущих координат.

Но когда я меняю его на цилиндр, я получаю много

Missing number, treated as zero.
<to be read again> 
LaTeX
Illegal unit of measure (pt inserted).
<to be read again> 
LaTeX

ошибки.

Мой текущий код:

\documentclass[tikz,border=3mm]{standalone} 
\usepackage{pgfplots}

\begin{document} 
\begin{axis}[axis equal, data cs=polar]
    
    \addplot3 [surf,
                domain=0:1,
                y domain=0:180,
               samples=20, %number of samples taken
               z buffer=sort,
               shader=interp,
               variable=\u,
               variable y=\v,
               point meta={symbolic={Hsb=u,v,v}}] % the origin of my errors
        (
            {v/2},
            {sin(v/2)},
            {u}
        );
    
    \end{axis}
\end{document}

Я думаю, что причиной проблем может быть мой хакерский способ создания цилиндра, но я не могу в этом разобраться.

заранее спасибо

решение1

Я вижу, что вы исправили свой MWE, включив mesh/color input = explicit mathparse,! Для потомков, также была проблема с HSB "S" для насыщенности, которая требует значения в [0,1], которому вы передавали \vв [0,180].

Ради интереса, если вам нужен полный цилиндр, вы можете изменить домен:

\documentclass[tikz,border=3mm]{standalone} 
\usepackage{pgfplots}
\pgfplotsset{compat=newest}

\begin{document} 
\begin{tikzpicture}
    \begin{axis}[axis equal, data cs=polar]
    \addplot3 [
        surf,
        domain = 0:1,
        y domain = 0:360,
        samples = 20, %number of samples taken
        z buffer = sort,
        shader = interp,
        variable = \u, variable y = \v,
        mesh/color input = explicit mathparse,
        point meta={symbolic={Hsb=v,1,u}},
        ] 
        ({v/2},{sin(v/2)},{u});
    \end{axis}    
\end{tikzpicture}
\end{document}

Открытый цилиндр с окраской HSB А если вам нужен полуцилиндр с полным спектром цветов, просто удвойте оттенок:

\documentclass[tikz,border=3mm]{standalone} 
\usepackage{pgfplots}
\pgfplotsset{compat=newest}

\begin{document} 
\begin{tikzpicture}
    \begin{axis}[axis equal, data cs=polar]
    \addplot3 [
        surf,
        domain = 0:1,
        y domain = 0:180,
        samples = 20, %number of samples taken
        z buffer = sort,
        shader = interp,
        variable = \u, variable y = \v,
        mesh/color input = explicit mathparse,
        point meta={symbolic={Hsb=2*v,1,u}},
        ] 
        ({v/2},{sin(v/2)},{u});
    \end{axis}    
\end{tikzpicture}
\end{document}

Открытый сверху полуцилиндр с окраской HSB

решение2

Я снова посмотрел на код изHSV-затенение конуса в pgfplotsи обнаружил, что мне не удалось добавить mesh/color input=explicit mathparseнекоторые параметры оси.

Рабочий код:

\documentclass[tikz,border=3mm]{standalone} 
\usepackage{pgfplots}

\begin{document} 
\begin{tikzpicture}

    \begin{axis}[axis equal, data cs=polar, mesh/color input=explicit mathparse] % the solution to my problem
    
    \addplot3 [surf,
                domain=0:1,
                y domain=0:180,
               samples=20, %number of samples taken
               z buffer=sort,
               shader=interp,
               variable=\u,
               variable y=\v,
               point meta={symbolic={Hsb=v,1,u}}]
        (
            {v/2},
            {sin(v/2)},
            {u}
        );
    
    \end{axis}
    
\end{tikzpicture}
\end{document}

скомпилированныйImage

Связанный контент