You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 21:24:21