
日常生产生活中,我们会经常读到或使用各种类型的图表。圆环(圆弧)便是一种较常见的类型,用于直观展现某一数据指标占整体的比例。本文以 HTML Canvas 的实现为主(当然,SVG 党可以在了解原理后自行实现),逐层介绍圆环图表开发的一些主要思路和原理。
图1 所示是一些我们平时比较常见的一些圆环(圆弧)效果。虽然图形的主体构成都是圆弧,但不同效果在信息传达的功能上却略有差异。如:
-
闭合的圆环可以表示流程 “进度” 的概念 -
非闭合圆环一般用于状态量(标量)的展示,一般也称为 “仪表盘” 效果 -
不同的色相可用于标识状态量的状态区间(如:低危-中危-高危 区间的标识可以使用三种颜色的构成的过渡效果进行表达)
为了更加方便、完善地解决我们在业务开发时的具体需要,可以对这些风格、样式进行一定分析、抽象,总结出一个通用组件需要具备的能力,如:
-
颜色、渐变可配(支持传入单一色值或颜色序列) -
圆弧宽度可调(内、外半径大小可配置) -
圆弧夹角可调(开始角度、截止角度可配置) -
圆弧端点造型可选(可切换平角/半圆造型 -
文案效果可调(字号、字体、颜色等)
下面,我们着手于实现这样一个功能全面、业务通用性较强的圆环组件。
1. 圆环的造型
绘制圆环造型的第一步,需要先绘制圆环图表构成要素,即一段一段的圆弧。而对于像下图中这样的两种倒角效果(黄色部分圆弧两端的样式),既可以是直角,也可以是半圆。

因此,我们需要实现一个通用的方法来绘制圆弧,提供两种倒角风格给用户。
1.1 前景圆弧的绘制

圆弧绘制的思路如上图所示,按先后顺序大致分为几个步骤:
(