Canvas 2D 几何
Canvas 2D 的路径构建与角度计算。所有路径函数只负责构建路径,不调用 fill() / stroke(),由调用方决定怎么上色。
使用
import { roundRectByArc, getLinearGradient } from 'ranuts/utils';
const ctx = canvas.getContext('2d')!;
roundRectByArc(ctx, 10, 10, 200, 80, 12);
ctx.fillStyle = getLinearGradient(ctx, 10, 10, 200, 80, 'linear-gradient(90deg, #06f, #0cf)');
ctx.fill();API
getAngle
角度转弧度。
参数
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
deg |
数学角度 | number |
必填 |
返回
| 参数 | 说明 | 类型 |
|---|---|---|
rad |
运算弧度 | number |
getArcPointerByDeg
根据角度计算圆上的点。
参数
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
deg |
运算弧度 | number |
必填 |
r |
半径 | number |
必填 |
返回
| 参数 | 说明 | 类型 |
|---|---|---|
point |
[x, y] |
[number, number] |
getTangentByPointer
根据圆上一点计算该点的切线方程。
参数
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
x |
横坐标 | number |
必填 |
y |
纵坐标 | number |
必填 |
返回
| 参数 | 说明 | 类型 |
|---|---|---|
line |
[斜率, 常数] |
Array<number> |
roundRectByArc
绘制圆角矩形路径。圆角半径超过短边一半时会被钳制到一半,避免相邻圆角互相穿透。
参数
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
ctx |
Canvas 2D 上下文 | CanvasRenderingContext2D |
必填 |
...rest |
x, y, w, h, r |
number[] |
必填 |
返回
无返回值(void)
fanShapedByArc
绘制扇形路径,含扇形之间的间隙。
参数
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
ctx |
Canvas 2D 上下文 | CanvasRenderingContext2D |
必填 |
maxRadius |
外圈半径 | number |
必填 |
start |
起始弧度 | number |
必填 |
end |
结束弧度 | number |
必填 |
gutter |
扇形之间的间隙宽度 | number |
必填 |
返回
无返回值(void)
getLinearGradient
把一个 CSS linear-gradient(...) 字符串翻译成 Canvas 的 CanvasGradient。
createLinearGradient 只接受起点和终点两个坐标,而 CSS 用角度描述方向,所以这里按 45° 划分 8 个区域,用正切把角度还原成矩形边界上的起止坐标。关键字方向(to top / to bottom / to left / to right)直接处理。
参数
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
ctx |
Canvas 2D 上下文 | CanvasRenderingContext2D |
必填 |
x |
矩形左上角横坐标 | number |
必填 |
y |
矩形左上角纵坐标 | number |
必填 |
w |
矩形宽 | number |
必填 |
h |
矩形高 | number |
必填 |
background |
形如 linear-gradient(90deg, red, blue) |
string |
必填 |
返回
| 参数 | 说明 | 类型 |
|---|---|---|
gradient |
可直接赋给 fillStyle / strokeStyle |
CanvasGradient |