Tikz:弧线(和径向颜色渐变)后的移动坐标

Tikz:弧线(和径向颜色渐变)后的移动坐标

基本上,我想创建一个类似于该图底部杆的插图:

拉紧杆的图片

遵循答案这里这里,下面是我尽力尝试的代码。有两个问题:

  1. 在两次尝试中,向左移动均未按预期工作。我预计第一个圆弧以 2*4cm 直径 = (8cm, 0) 结束,然后移动 -2cm -> (6cm, 0),然后第二个圆弧以 6cm-2*2cm 直径 = (2cm, 0) 结束
  2. 我希望颜色渐变径向传播,而不是仅仅从上到下。

代码:

\documentclass{standalone}
\usepackage{tikz}

\begin{document}
\begin{tikzpicture}

\shade[thin, draw=black, top color=blue,bottom color=red] 
(0cm,0cm) arc (0:180:4cm) -- +(-2cm,0) arc (180:0:2cm) -- cycle;

\shade[thin, draw=black, top color=blue,bottom color=red] 
(0cm,0cm) arc (0:180:4cm) coordinate (a) -- ([xshift=-2cm]a) arc (180:0:2cm) -- cycle; 

\end{tikzpicture}
\begin{document}

tikz 结果

答案1

编辑:

  • 第一个问题(请每个问题提出一个问题 :-) )

    如果我正确理解了你的问题,那么你尝试获取以下图像:

在此处输入图片描述

我交换 s 的起点/终点arc,并将坐标 (0,0) 移动到图像中间:

\documentclass[tikz, margin=3mm]{standalone}

\begin{document}
    \begin{tikzpicture}
\shade[thin, draw=black, top color=blue,bottom color=red]
(-4,0) arc (180:0:4cm) -- +(-2,0) arc (0:180:2cm) -- cycle;
    \end{tikzpicture}
\end{document}
  • 第二个问题

    这不是一件容易的事。暂时我无法找到令人满意的解决方案arc。简单地用 替换top color=blue,bottom color=redinner color=red, outer control=blue不能给出应有的结果radial gradient color

    解决这个问题的一个方法是利用放射状阴影按照提议梅·斯尼普在下面的评论中。到目前为止,我只能说这种方式的解决方案需要不同的方法来绘制图像:

    \documentclass[tikz, margin=3mm]{standalone}
    
    \tikzset{
      ring shading/.code args={from #1 at #2 to #3 at #4}{
        \def\colin{#1}
        \def\radin{#2}
        \def\colout{#3}
        \def\radout{#4}
        \pgfmathsetmacro{\proportion}{\radin/\radout}
        \pgfmathsetmacro{\outer}{.8818cm}
        \pgfmathsetmacro{\inner}{.8818cm*\proportion}
        \pgfmathsetmacro{\innerlow}{\inner-0.01pt}
        \pgfdeclareradialshading{ring}{\pgfpoint{0cm}{0cm}}%
        {
          color(0pt)=(white);
          color(\innerlow)=(white);
          color(\inner)=(#1);
          color(\outer)=(#3)
        }
        \pgfkeysalso{/tikz/shading=ring}
      },
    }
    
    \begin{document}
    \begin{tikzpicture}
    \clip  (-4,0) rectangle + (8,4);
    \shade[draw,ring shading={from red at 2 to blue at 4}]
      (0,0) circle (2) circle (4);
    \end{tikzpicture}
    \end{document}
    

这使:

在此处输入图片描述

  • 三色渐变着色,如评论中所问

    它稍微复杂一些,因为我由两个圆圈对组成,其中第二个圆圈绘制在背景层上。为此,您需要\usetikzlibrary{backgrounds}在文档前言中添加,然后在文档正文中写入例如:

    \begin{document}
    \begin{tikzpicture}
    \def\lok{(-4,0) arc (180:0:4cm) -- +(-2,0) arc (0:180:2cm) -- cycle}
    \draw \lok;
    \clip \lok;
    \shade[ring shading={from red at 2 to white at 2.9}]
      (0,0) circle (2) circle (2.9);
        \begin{scope}[on background layer]
    \clip \lok;
    \shade[ring shading={from white at 3.1 to blue at 4}]
      (0,0) circle (3.1) circle (4);
        \end{scope}
    \end{tikzpicture}
    \end{document}
    

给出:

在此处输入图片描述

如您所见,环稍微分开,白色瞬态较厚。如果您喜欢更窄的白色瞬态,则将环外圆和内圆的半径分别从 2.9 更改为 3.0 和从 3.1 更改为 3.0。这样两个环就会相互接触:

在此处输入图片描述

答案2

我会使用色轮来实现这一点。transform canvas你可以旋转它。这里有一个动画,可以帮助你选择你最喜欢的旋转角度。

\documentclass[tikz, margin=3.14mm]{standalone} 
\usetikzlibrary{shadings}
\begin{document}
\foreach \X in {0,4,...,364}
{\begin{tikzpicture}
\clip (-1.5,0) arc(180:0:1.5) -- (2.5,0) arc(0:180:2.5) -- cycle;
\shade[shading=color wheel,transform canvas={rotate=\X}] 
circle (2.5cm);
\end{tikzpicture}}
\end{document}

在此处输入图片描述

相关内容