基本上,我想创建一个类似于该图底部杆的插图:
- 在两次尝试中,向左移动均未按预期工作。我预计第一个圆弧以 2*4cm 直径 = (8cm, 0) 结束,然后移动 -2cm -> (6cm, 0),然后第二个圆弧以 6cm-2*2cm 直径 = (2cm, 0) 结束
- 我希望颜色渐变径向传播,而不是仅仅从上到下。
代码:
\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}
答案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=red
并inner 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}