Tikz/PGF 阴影的转换

Tikz/PGF 阴影的转换

我正在尝试制作一个图形,将角度方向的编码描绘为色调,以使用 HSV 映射来描述复杂函数的域着色。

下面的示例是使用该库的 MWE shadings。唯一的问题是需要将其垂直翻转,以便绿色代表北方角度,紫色代表南方角度。

需要翻转的 HSV 色轮

在 MWE 中,您将看到我将\shadeed 圆括在范围中并尝试 y 反转范围。显然,阴影是在绘制形状后应用于形状的。因此删除yscale=-1没有任何作用。

我查看了着色的源代码color wheel并尝试对其进行修改,但 x86 汇编比 PGF 代码更容易阅读——我无法理解它。一定有一种简单的方法可以做到这一点。

有人可以向我揭示我不知道的关于逆转梯度的愚蠢小论点或建议一种替代方法吗?

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{shadings}

\begin{document}
  \centering
    \begin{tikzpicture}
      \pgfmathsetmacro{\WheelRadius}{3}
      %\begin{scope}[yscale=-1] % ← I would have expected this to work.
        \shade[shading=color wheel, shading angle=-90] [even odd rule]
                (0,0) circle (\WheelRadius)
                (0,0) circle (\WheelRadius/2);
      %\end{scope}
      % Labels at cardinal and ordinal directions.
      \foreach \ang/\lab/\dir in {
        0/0/right,
        1/{\pi/4}/{above right},
        2/{\pi/2}/above,
        3/{3\pi/4}/{above left},
        4/{\pi}/left,
        5/{5\pi/4}/{below left},
        7/{7\pi/4}/{below right},
        6/{3\pi/2}/below} {
        \draw (0,0) -- (\ang * 180 / 4:\WheelRadius.1);
        \node [fill=white] at (\ang * 180 / 4:\WheelRadius.2) [\dir] {\scriptsize $\lab$};
      }

      \draw [thick] (0,0) circle (\WheelRadius);
    \end{tikzpicture}

\end{document}

答案1

由于没有fading transform,我认为唯一的选择是使用transform canvas这样的:

\documentclass[tikz, border=1cm]{standalone}
\usetikzlibrary{shadings}
\begin{document}
\begin{tikzpicture}
\pgfmathsetmacro{\WheelRadius}{3}
\shadedraw[thick, shading=color wheel, shading angle=-90, transform canvas={yscale=-1}, even odd rule]
    (0,0) circle (\WheelRadius)
    (0,0) circle (\WheelRadius/2);
\end{tikzpicture}
\end{document}

色轮

答案2

在此处输入图片描述

我提出了一个不使用库的解决方案shadings。它基于循环(按角度构造颜色),不进行坐标改变。

代码

\documentclass[margin=10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{math}

\begin{document}
\begin{tikzpicture}[evaluate={real \wheelRadius; \wheelRadius = 6;}]
  \foreach \t [evaluate=\t as \h using \t/360] in {0, 1, ..., 359}{%
    \definecolor{tmp}{hsb}{\h, 1, 1}
    \filldraw[tmp, rotate=\t] (0,0)
    -- +(-.5: \wheelRadius) -- +(.5: \wheelRadius ) -- cycle;
  }
  \fill[white] (0,0) circle (\wheelRadius/2);
  
  \draw (0,0) circle (\wheelRadius);
  \foreach \ang/\lab in {%
    0/0, 1/{\pi/4}, 2/{\pi/2}, 3/{3\pi/4}, 4/{\pi},
    5/{5\pi/4}, 6/{3\pi/2}, 7/{7\pi/4}} {
    \draw (0,0) -- (\ang * 180/4: \wheelRadius +.2)
    ([turn]0: 4ex) node[scale=.7] {$\lab$};
  }
\end{tikzpicture}
\end{document}

相关内容