vislite
Version:
灵活、快速、简单的数据可视化交互式跨端前端库
130 lines (89 loc) • 2.38 kB
Markdown
# 插值函数 API
VISLite 提供 Cardinal 和 Hermite 两种三次插值函数,用于平滑曲线绘制。
## Hermite 插值
Hermite 插值需要指定两个端点和两个端点处的斜率。
### 引入
```js
import { Hermite } from 'vislite';
```
### 初始化
```js
var hermite = new Hermite(u);
```
- **u**: 张弛系数,控制曲线在端点处的弯曲程度,默认 0.5
### 设置点位置
```js
hermite.setP(x1, y1, x2, y2, s1, s2);
```
参数说明:
- **x1, y1**: 左边点位置
- **x2, y2**: 右边点位置
- **s1**: 左边点的切线斜率
- **s2**: 右边点的切线斜率
### 计算插值
```js
var y = hermite.use(x);
```
根据 x 值返回对应的 y 值。
### 示例
```js
var hermite = new Hermite(0.5);
hermite.setP(0, 0, 100, 100, 0, 1);
// 计算x=50时的y值
var y = hermite.use(50);
```
---
## Cardinal 插值
Cardinal 插值是 Hermite 的扩展,只需提供点序列,系统自动计算斜率。
### 引入
```js
import { Cardinal } from 'vislite';
```
### 初始化
```js
var cardinal = new Cardinal(t);
```
- **t**: 张弛系数,控制曲线走势,默认 0
- t = 0:默认曲线
- t = -1:分水岭效果
- |t| 越大,曲线调整越剧烈
### 设置点序列
```js
cardinal.setP([[x1, y1], [x2, y2], [x3, y3], ...]);
```
至少需要两个点。
### 计算插值
```js
var y = cardinal.use(x);
```
根据 x 值返回对应的 y 值。
### 示例
```js
var cardinal = new Cardinal(0);
cardinal.setP([
[0, 0],
[25, 25],
[50, 10],
[75, 50],
[100, 100]
]);
// 绘制平滑曲线
for (var x = 0; x <= 100; x += 1) {
var y = cardinal.use(x);
painter.lineTo(x, y);
}
painter.stroke();
```
---
## 对比与选择
| 特性 | Hermite | Cardinal |
|------|---------|----------|
| 端点斜率 | 手动指定 | 自动计算 |
| 参数数量 | 6个 | 2个(点序列) |
| 灵活性 | 高(可自定义斜率) | 中(受邻近点影响) |
| 适用场景 | 精确控制曲线形状 | 自然平滑的曲线 |
## 应用场景
- **折线图平滑**: 使用 Cardinal
- **动画路径**: 使用 Hermite 自定义缓动
- **字体渲染**: 使用 Cardinal 平滑字形边缘
- **地图等高线**: 使用 Hermite 精确控制地形变化