В настоящее время я борюсь с изменением цвета отдельных точек в полярных координатах. Я хочу создать визуализацию для цветового пространства 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}
А если вам нужен полуцилиндр с полным спектром цветов, просто удвойте оттенок:
\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}
решение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}