TikZ如何绘制按角度线性渐变颜色填充的半圆
TikZ实现按角度线性渐变填充半圆
内置的color wheel系列shading是为360°整圆色相环设计的,天然存在三个适配问题:仅支持全圆周色相循环、圆心自带颜色失真/白心硬编码、不是单方向线性过渡,直接裁剪整圆的写法无法得到理想效果。
可直接编译的最优实现
通过自定义水平渐变+坐标映射匹配角度变化,无圆心失真、无锯齿,实现θ=0到θ=π区间从红色到蓝色的平滑线性过渡:
\documentclass[tikz, margin=5pt]{standalone} \usepackage{tikz} \usetikzlibrary{shadings} % 自定义红到蓝的线性渐变 \pgfdeclarehorizontalshading{halfanglegrad}{100bp}{ color(0bp)=(red), color(100bp)=(blue) } \begin{document} \begin{tikzpicture} % 裁剪出半径1cm的上半圆区域 \clip (0,0) -- (1,0) arc[start angle=0, end angle=180, radius=1cm] -- cycle; % 旋转渐变方向匹配角度变化,填充覆盖整个裁剪区域 \shade[shading=halfanglegrad, shading angle=90] (-1,-1) rectangle (1,1); % 可选:添加半圆轮廓描边 \draw (0,0) -- (1,0) arc[start angle=0, end angle=180, radius=1cm] -- cycle; \end{tikzpicture} \end{document}
效果调整说明
- 渐变逻辑:0°位置(半圆右端点)为纯红色,180°位置(半圆左端点)为纯蓝色,任意角度位置的颜色为红到蓝的线性插值,圆心区域无颜色错乱
- 自定义颜色:直接修改
\pgfdeclarehorizontalshading内的颜色节点即可,比如要加入中间过渡色,可插入color(50bp)=(purple)这类定义 - 按余弦值渐变:如果需要颜色随角度余弦值变化,只需要在填充时叠加对应的x坐标非线性变换即可
原有代码的问题
shading=color wheel是360°循环色相,0°和180°位置的颜色本身不对应红、蓝,因此渐变观感不符合预期- 该shading对圆心位置做了特殊的色相收敛处理,裁剪后圆心区域的颜色计算会出现错乱
- 调整
shading angle仅能旋转整个色相环,无法改变其360°循环的本质,无法适配180°半圆的线性渐变需求
内容的提问来源于stack exchange,提问作者zengc
相关产品推荐
相关产品推荐

