vislite 1.12.0-alpha.0 → 1.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (183) hide show
  1. package/AUTHORS.txt +6 -6
  2. package/CHANGELOG +402 -394
  3. package/LICENSE +20 -20
  4. package/README-en.md +245 -245
  5. package/README.md +245 -245
  6. package/bin/formatArgv.js +30 -30
  7. package/bin/help.js +17 -17
  8. package/bin/run +21 -21
  9. package/bin/skills.js +26 -26
  10. package/lib/BarLayout/index.es.js +348 -348
  11. package/lib/Buffer/index.es.js +34 -34
  12. package/lib/Canvas/index.es.js +804 -800
  13. package/lib/Canvas/index.es.min.js +1 -1
  14. package/lib/Cardinal/index.es.js +89 -89
  15. package/lib/Eoap/index.es.js +32 -32
  16. package/lib/Hermite/index.es.js +34 -34
  17. package/lib/MapCoordinate/index.es.js +199 -199
  18. package/lib/Matrix4/index.es.js +123 -123
  19. package/lib/Mercator/index.es.js +18 -18
  20. package/lib/PieLayout/index.es.js +115 -115
  21. package/lib/RawCanvas/index.es.js +736 -732
  22. package/lib/RawCanvas/index.es.min.js +1 -1
  23. package/lib/SVG/index.es.js +626 -631
  24. package/lib/SVG/index.es.min.js +1 -1
  25. package/lib/Shader/index.es.js +34 -34
  26. package/lib/Texture/index.es.js +52 -52
  27. package/lib/TreeLayout/index.es.js +301 -315
  28. package/lib/animation/index.es.js +2 -2
  29. package/lib/assemble/index.es.js +19 -16
  30. package/lib/assemble/index.es.min.js +1 -1
  31. package/lib/getLoopColors/index.es.js +34 -34
  32. package/lib/getWebGLContext/index.es.js +61 -61
  33. package/lib/index.umd.js +2797 -2784
  34. package/lib/index.umd.min.js +2 -2
  35. package/lib/initOption/index.es.js +5 -5
  36. package/lib/mergeOption/index.es.js +34 -34
  37. package/lib/move/index.es.js +6 -6
  38. package/lib/rotate/index.es.js +6 -6
  39. package/lib/ruler/index.es.js +136 -136
  40. package/lib/scale/index.es.js +5 -5
  41. package/minialipay/ui-canvas/drawImage.js +35 -35
  42. package/minialipay/ui-canvas/index.acss +4 -4
  43. package/minialipay/ui-canvas/index.axml +3 -3
  44. package/minialipay/ui-canvas/index.d.ts +1 -1
  45. package/minialipay/ui-canvas/index.js +100 -100
  46. package/minialipay/ui-canvas/index.json +6 -6
  47. package/miniprogram/ui-canvas/drawImage.js +35 -35
  48. package/miniprogram/ui-canvas/index.js +125 -125
  49. package/miniprogram/ui-canvas/index.json +4 -4
  50. package/miniprogram/ui-canvas/index.wxml +4 -4
  51. package/miniprogram/ui-canvas/index.wxss +5 -5
  52. package/package/BarLayout/index.ts +2 -2
  53. package/package/Buffer/index.ts +2 -2
  54. package/package/Canvas/index.ts +2 -2
  55. package/package/Cardinal/index.ts +2 -2
  56. package/package/Eoap/index.ts +2 -2
  57. package/package/Hermite/index.ts +2 -2
  58. package/package/MapCoordinate/index.ts +2 -2
  59. package/package/Matrix4/index.ts +2 -2
  60. package/package/Mercator/index.ts +2 -2
  61. package/package/PieLayout/index.ts +2 -2
  62. package/package/RawCanvas/index.ts +2 -2
  63. package/package/SVG/index.ts +2 -2
  64. package/package/Shader/index.ts +2 -2
  65. package/package/Texture/index.ts +2 -2
  66. package/package/TreeLayout/index.ts +2 -2
  67. package/package/animation/index.ts +5 -5
  68. package/package/assemble/index.ts +2 -2
  69. package/package/getLoopColors/index.ts +2 -2
  70. package/package/getWebGLContext/index.ts +40 -40
  71. package/package/index.ts +84 -84
  72. package/package/initOption/index.ts +2 -2
  73. package/package/mergeOption/index.ts +2 -2
  74. package/package/move/index.ts +2 -2
  75. package/package/rotate/index.ts +2 -2
  76. package/package/ruler/index.ts +2 -2
  77. package/package/scale/index.ts +2 -2
  78. package/package/throttle/index.ts +2 -2
  79. package/package.json +79 -79
  80. package/skills/vislite-lib/BarLayout.md +117 -117
  81. package/skills/vislite-lib/Canvas.md +183 -183
  82. package/skills/vislite-lib/Interpolation.md +129 -129
  83. package/skills/vislite-lib/Matrix.md +174 -174
  84. package/skills/vislite-lib/PieLayout.md +131 -131
  85. package/skills/vislite-lib/Projections.md +158 -158
  86. package/skills/vislite-lib/SKILL.md +179 -179
  87. package/skills/vislite-lib/SVG.md +137 -137
  88. package/skills/vislite-lib/TreeLayout.md +176 -176
  89. package/skills/vislite-lib/Utilities.md +261 -261
  90. package/skills/vislite-lib/WebGL.md +106 -106
  91. package/skills/vislite-lib/minialipay/ui-canvas.md +95 -95
  92. package/skills/vislite-lib/miniprogram/ui-canvas.md +98 -98
  93. package/skills/vislite-lib/uniapp/ui-canvas.md +113 -113
  94. package/src/Canvas.ts +89 -89
  95. package/src/Eoap.ts +66 -66
  96. package/src/Matrix4/index.ts +84 -84
  97. package/src/Matrix4/move.ts +12 -12
  98. package/src/Matrix4/rotate.ts +15 -15
  99. package/src/Matrix4/scale.ts +11 -11
  100. package/src/Matrix4/transform.ts +64 -64
  101. package/src/Mercator.ts +27 -27
  102. package/src/SVG.ts +86 -69
  103. package/src/common/assemble.ts +30 -22
  104. package/src/common/canvas/arc.ts +51 -51
  105. package/src/common/canvas/config.ts +176 -176
  106. package/src/common/canvas/default.ts +64 -64
  107. package/src/common/canvas/gradient.ts +31 -31
  108. package/src/common/canvas/index.ts +189 -189
  109. package/src/common/canvas/painter.ts +475 -454
  110. package/src/common/canvas/texts.ts +18 -18
  111. package/src/common/map/getBoundary.ts +15 -15
  112. package/src/common/map/tool.ts +29 -29
  113. package/src/common/option.ts +31 -31
  114. package/src/common/setStyle.ts +5 -5
  115. package/src/common/svg/config.ts +213 -213
  116. package/src/common/svg/default.ts +29 -29
  117. package/src/common/svg/gradient.ts +53 -53
  118. package/src/common/svg/index.ts +420 -420
  119. package/src/common/svg/tool.ts +51 -51
  120. package/src/common/tree/index.ts +25 -25
  121. package/src/common/tree/toInnerTree.ts +61 -61
  122. package/src/common/tree/toPlainTree.ts +135 -135
  123. package/src/common/type.ts +26 -26
  124. package/src/common/webgl/buffer.ts +79 -79
  125. package/src/common/webgl/getWebGLContext.ts +45 -45
  126. package/src/common/webgl/shader.ts +75 -75
  127. package/src/common/webgl/texture.ts +98 -98
  128. package/src/coordinate/MapCoordinate.ts +80 -80
  129. package/src/getLoopColors.ts +42 -42
  130. package/src/interpolation/Cardinal.ts +110 -110
  131. package/src/interpolation/Hermite.ts +65 -65
  132. package/src/layout/BarLayout.ts +249 -249
  133. package/src/layout/PieLayout.ts +146 -146
  134. package/src/layout/TreeLayout.ts +200 -200
  135. package/src/move.ts +7 -7
  136. package/src/rotate.ts +7 -7
  137. package/src/ruler.ts +209 -209
  138. package/src/scale.ts +6 -6
  139. package/types/Bar.d.ts +91 -91
  140. package/types/BarConfig.d.ts +4 -4
  141. package/types/BarLayout.d.ts +48 -48
  142. package/types/BarOption.d.ts +31 -31
  143. package/types/Buffer.d.ts +30 -30
  144. package/types/Canvas.d.ts +379 -379
  145. package/types/CanvasConfig.d.ts +61 -61
  146. package/types/CanvasOption.d.ts +13 -13
  147. package/types/CanvasOpts.d.ts +9 -9
  148. package/types/Cardinal.d.ts +20 -20
  149. package/types/Gradient.d.ts +20 -20
  150. package/types/Hermite.d.ts +25 -25
  151. package/types/Map.d.ts +9 -9
  152. package/types/MapConfig.d.ts +27 -27
  153. package/types/MapCoordinate.d.ts +22 -22
  154. package/types/Matrix4.d.ts +79 -79
  155. package/types/Pie.d.ts +73 -73
  156. package/types/PieConfig.d.ts +26 -26
  157. package/types/PieLayout.d.ts +40 -40
  158. package/types/PieOption.d.ts +21 -21
  159. package/types/SVG.d.ts +282 -282
  160. package/types/SVGConfig.d.ts +54 -54
  161. package/types/Shader.d.ts +22 -22
  162. package/types/Texture.d.ts +22 -22
  163. package/types/Tree.d.ts +74 -74
  164. package/types/TreeConfig.d.ts +52 -52
  165. package/types/TreeLayout.d.ts +71 -71
  166. package/types/TreeOption.d.ts +48 -48
  167. package/types/animation.d.ts +26 -26
  168. package/types/assemble.d.ts +14 -14
  169. package/types/getLoopColors.d.ts +13 -13
  170. package/types/getWebGLContext.d.ts +7 -7
  171. package/types/index.d.ts +220 -221
  172. package/types/module.d.ts +110 -110
  173. package/types/move.d.ts +15 -15
  174. package/types/option.d.ts +12 -12
  175. package/types/painterConfig.d.ts +14 -14
  176. package/types/rotate.d.ts +15 -15
  177. package/types/ruler.d.ts +24 -24
  178. package/types/scale.d.ts +15 -15
  179. package/types/throttle.d.ts +6 -6
  180. package/types/ui-canvas.d.ts +4 -4
  181. package/types/uni-canvas.d.ts +3 -3
  182. package/uni-app/drawImage.js +19 -19
  183. package/uni-app/ui-canvas.vue +295 -295
@@ -1,184 +1,184 @@
1
- # Canvas 画笔 API
2
-
3
- Canvas 是 VISLite 的核心画笔之一,**绘制 API 完全一致**,但初始化方式因平台而异。
4
-
5
- ## 平台初始化方式
6
-
7
- ### H5 端
8
-
9
- ```js
10
- import { Canvas } from 'vislite';
11
-
12
- var painter = new Canvas(document.getElementById('root'), {
13
- scale: 2, // 缩放倍率,默认2
14
- region: true, // 是否启用区域检测,默认true
15
- willReadFrequently: false
16
- }, width, height);
17
- ```
18
-
19
- ### 微信/支付宝小程序
20
-
21
- 小程序端需要使用 ui-canvas 组件,详见:
22
- - [微信小程序 Canvas](miniprogram/ui-canvas.md)
23
- - [支付宝小程序 Canvas](minialipay/ui-canvas.md)
24
-
25
- ### uni-app
26
-
27
- uni-app 根据编译目标平台选择上述方式,详见:
28
- - [uni-app Canvas](uniapp/ui-canvas.md)
29
-
30
- ## 配置项 (config)
31
-
32
- ```js
33
- painter.config({
34
- fillStyle: 'red', // 填充色
35
- strokeStyle: 'black', // 轮廓色
36
- lineWidth: 1, // 线宽
37
- lineCap: 'butt', // 线端点类型:butt|round|square
38
- lineJoin: 'miter', // 线拐角:miter|bevel|round
39
- lineDash: [], // 虚线样式
40
- textAlign: 'left', // 文字水平对齐:left|center|right
41
- textBaseline: 'middle', // 文字垂直对齐:middle|top|bottom
42
- shadowBlur: 0, // 阴影模糊
43
- shadowColor: 'black', // 阴影颜色
44
- fontSize: 16, // 字体大小
45
- fontFamily: 'sans-serif', // 字体
46
- fontWeight: 400, // 字重
47
- fontStyle: 'normal', // 字类型
48
- arcStartCap: 'butt', // 圆弧开始端闭合:butt|round|-round
49
- arcEndCap: 'butt', // 圆弧结束端闭合
50
- rectRadius: [10, 10, 10, 10] // 矩形圆角
51
- });
52
- ```
53
-
54
- ### 渐变色
55
-
56
- ```js
57
- // 线性渐变
58
- var gradient = painter.createLinearGradient(x1, y1, x2, y2);
59
- gradient.setColor(0, 'red').setColor(1, 'blue');
60
- painter.config({ fillStyle: gradient.value() });
61
-
62
- // 环形渐变
63
- var gradient = painter.createRadialGradient(cx, cy, r1, r2);
64
- gradient.setColor(0, 'red').setColor(1, 'blue');
65
-
66
- // 角度渐变 (1.2.0+)
67
- var gradient = painter.createConicGradient(cx, cy, beginDeg, deg);
68
- gradient.setColor(0, 'red').setColor(1, 'blue');
69
- ```
70
-
71
- ## 文字绘制
72
-
73
- ```js
74
- painter.fillText(text, x, y, deg); // 填充文字
75
- painter.strokeText(text, x, y, deg); // 轮廓文字
76
- painter.fullText(text, x, y, deg); // 填充+轮廓文字
77
-
78
- // 多行文字
79
- painter.fillTexts(contents, x, y, width, lineHeight, deg);
80
- painter.strokeTexts(contents, x, y, width, lineHeight, deg);
81
- painter.fullTexts(contents, x, y, width, lineHeight, deg);
82
-
83
- // 计算文字宽度
84
- painter.textWidth(text);
85
- ```
86
-
87
- ## 路径操作
88
-
89
- ```js
90
- painter.beginPath(); // 开始路径
91
- painter.closePath(); // 闭合路径
92
- painter.moveTo(x, y); // 移动起点
93
- painter.lineTo(x, y); // 画线
94
- painter.arc(x, y, r, beginDeg, deg); // 圆弧
95
- painter.quadraticCurveTo(cpx, cpy, x, y); // 二次贝塞尔
96
- painter.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y); // 三次贝塞尔
97
- painter.fill(); // 填充
98
- painter.stroke(); // 描边
99
- painter.full(); // 填充+描边
100
- painter.clip(); // 裁剪
101
- ```
102
-
103
- ## 画布操作
104
-
105
- ```js
106
- painter.save(); // 保存状态
107
- painter.restore(); // 恢复状态
108
- painter.clearRect(x, y, w, h); // 清除矩形区域
109
- painter.clearCircle(cx, cy, r); // 清除圆形区域
110
-
111
- // 缩放
112
- painter.scale(x, y);
113
-
114
- // 获取画布信息
115
- painter.getInfo(); // { width, height }
116
-
117
- // 获取原始画布上下文
118
- painter.getContext(); // CanvasRenderingContext2D
119
- ```
120
-
121
- ## 区域交互
122
-
123
- ```js
124
- // 设置当前绑定的区域名称
125
- painter.setRegion('regionName');
126
-
127
- // 获取点击所在的区域名称
128
- painter.getRegion(x, y).then(regionName => {
129
- console.log(regionName);
130
- });
131
-
132
- // 绑定点击事件
133
- painter.bind('click', (regionName, x, y) => {
134
- console.log(regionName, x, y);
135
- });
136
-
137
- // 只绘制区域(用于交互检测)
138
- painter.onlyRegion(true);
139
-
140
- // 只绘制视图
141
- painter.onlyView(true);
142
- ```
143
-
144
- ## 图形绘制(便捷方法)
145
-
146
- ```js
147
- // 圆
148
- painter.fillCircle(x, y, r); // 填充圆
149
- painter.strokeCircle(x, y, r); // 描边圆
150
- painter.fullCircle(x, y, r); // 填充+描边圆
151
-
152
- // 矩形
153
- painter.fillRect(x, y, w, h);
154
- painter.strokeRect(x, y, w, h);
155
- painter.fullRect(x, y, w, h);
156
-
157
- // 圆环 (1.1.0+)
158
- painter.fillRing(x, y, r1, r2);
159
- painter.strokeRing(x, y, r1, r2);
160
- painter.fullRing(x, y, r1, r2);
161
-
162
- // 椭圆 (1.1.0+)
163
- painter.fillEllipse(x, y, r1, r2, deg);
164
- painter.strokeEllipse(x, y, r1, r2, deg);
165
- ```
166
-
167
- ## 导出
168
-
169
- ```js
170
- // 导出为图片
171
- painter.toDataURL(type, encoderOptions).then(dataUrl => {
172
- // dataUrl 即为 base64 图片
173
- });
174
- ```
175
-
176
- ## 重置
177
-
178
- ```js
179
- // 重置为默认配置
180
- painter.reset();
181
-
182
- // 带自定义配置重置
183
- painter.reset({ fillStyle: 'blue', fontSize: 20 });
1
+ # Canvas 画笔 API
2
+
3
+ Canvas 是 VISLite 的核心画笔之一,**绘制 API 完全一致**,但初始化方式因平台而异。
4
+
5
+ ## 平台初始化方式
6
+
7
+ ### H5 端
8
+
9
+ ```js
10
+ import { Canvas } from 'vislite';
11
+
12
+ var painter = new Canvas(document.getElementById('root'), {
13
+ scale: 2, // 缩放倍率,默认2
14
+ region: true, // 是否启用区域检测,默认true
15
+ willReadFrequently: false
16
+ }, width, height);
17
+ ```
18
+
19
+ ### 微信/支付宝小程序
20
+
21
+ 小程序端需要使用 ui-canvas 组件,详见:
22
+ - [微信小程序 Canvas](miniprogram/ui-canvas.md)
23
+ - [支付宝小程序 Canvas](minialipay/ui-canvas.md)
24
+
25
+ ### uni-app
26
+
27
+ uni-app 根据编译目标平台选择上述方式,详见:
28
+ - [uni-app Canvas](uniapp/ui-canvas.md)
29
+
30
+ ## 配置项 (config)
31
+
32
+ ```js
33
+ painter.config({
34
+ fillStyle: 'red', // 填充色
35
+ strokeStyle: 'black', // 轮廓色
36
+ lineWidth: 1, // 线宽
37
+ lineCap: 'butt', // 线端点类型:butt|round|square
38
+ lineJoin: 'miter', // 线拐角:miter|bevel|round
39
+ lineDash: [], // 虚线样式
40
+ textAlign: 'left', // 文字水平对齐:left|center|right
41
+ textBaseline: 'middle', // 文字垂直对齐:middle|top|bottom
42
+ shadowBlur: 0, // 阴影模糊
43
+ shadowColor: 'black', // 阴影颜色
44
+ fontSize: 16, // 字体大小
45
+ fontFamily: 'sans-serif', // 字体
46
+ fontWeight: 400, // 字重
47
+ fontStyle: 'normal', // 字类型
48
+ arcStartCap: 'butt', // 圆弧开始端闭合:butt|round|-round
49
+ arcEndCap: 'butt', // 圆弧结束端闭合
50
+ rectRadius: [10, 10, 10, 10] // 矩形圆角
51
+ });
52
+ ```
53
+
54
+ ### 渐变色
55
+
56
+ ```js
57
+ // 线性渐变
58
+ var gradient = painter.createLinearGradient(x1, y1, x2, y2);
59
+ gradient.setColor(0, 'red').setColor(1, 'blue');
60
+ painter.config({ fillStyle: gradient.value() });
61
+
62
+ // 环形渐变
63
+ var gradient = painter.createRadialGradient(cx, cy, r1, r2);
64
+ gradient.setColor(0, 'red').setColor(1, 'blue');
65
+
66
+ // 角度渐变 (1.2.0+)
67
+ var gradient = painter.createConicGradient(cx, cy, beginDeg, deg);
68
+ gradient.setColor(0, 'red').setColor(1, 'blue');
69
+ ```
70
+
71
+ ## 文字绘制
72
+
73
+ ```js
74
+ painter.fillText(text, x, y, deg); // 填充文字
75
+ painter.strokeText(text, x, y, deg); // 轮廓文字
76
+ painter.fullText(text, x, y, deg); // 填充+轮廓文字
77
+
78
+ // 多行文字
79
+ painter.fillTexts(contents, x, y, width, lineHeight, deg);
80
+ painter.strokeTexts(contents, x, y, width, lineHeight, deg);
81
+ painter.fullTexts(contents, x, y, width, lineHeight, deg);
82
+
83
+ // 计算文字宽度
84
+ painter.textWidth(text);
85
+ ```
86
+
87
+ ## 路径操作
88
+
89
+ ```js
90
+ painter.beginPath(); // 开始路径
91
+ painter.closePath(); // 闭合路径
92
+ painter.moveTo(x, y); // 移动起点
93
+ painter.lineTo(x, y); // 画线
94
+ painter.arc(x, y, r, beginDeg, deg); // 圆弧
95
+ painter.quadraticCurveTo(cpx, cpy, x, y); // 二次贝塞尔
96
+ painter.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y); // 三次贝塞尔
97
+ painter.fill(); // 填充
98
+ painter.stroke(); // 描边
99
+ painter.full(); // 填充+描边
100
+ painter.clip(); // 裁剪
101
+ ```
102
+
103
+ ## 画布操作
104
+
105
+ ```js
106
+ painter.save(); // 保存状态
107
+ painter.restore(); // 恢复状态
108
+ painter.clearRect(x, y, w, h); // 清除矩形区域
109
+ painter.clearCircle(cx, cy, r); // 清除圆形区域
110
+
111
+ // 缩放
112
+ painter.scale(x, y);
113
+
114
+ // 获取画布信息
115
+ painter.getInfo(); // { width, height }
116
+
117
+ // 获取原始画布上下文
118
+ painter.getContext(); // CanvasRenderingContext2D
119
+ ```
120
+
121
+ ## 区域交互
122
+
123
+ ```js
124
+ // 设置当前绑定的区域名称
125
+ painter.setRegion('regionName');
126
+
127
+ // 获取点击所在的区域名称
128
+ painter.getRegion(x, y).then(regionName => {
129
+ console.log(regionName);
130
+ });
131
+
132
+ // 绑定点击事件
133
+ painter.bind('click', (regionName, x, y) => {
134
+ console.log(regionName, x, y);
135
+ });
136
+
137
+ // 只绘制区域(用于交互检测)
138
+ painter.onlyRegion(true);
139
+
140
+ // 只绘制视图
141
+ painter.onlyView(true);
142
+ ```
143
+
144
+ ## 图形绘制(便捷方法)
145
+
146
+ ```js
147
+ // 圆
148
+ painter.fillCircle(x, y, r); // 填充圆
149
+ painter.strokeCircle(x, y, r); // 描边圆
150
+ painter.fullCircle(x, y, r); // 填充+描边圆
151
+
152
+ // 矩形
153
+ painter.fillRect(x, y, w, h);
154
+ painter.strokeRect(x, y, w, h);
155
+ painter.fullRect(x, y, w, h);
156
+
157
+ // 圆环 (1.1.0+)
158
+ painter.fillRing(x, y, r1, r2);
159
+ painter.strokeRing(x, y, r1, r2);
160
+ painter.fullRing(x, y, r1, r2);
161
+
162
+ // 椭圆 (1.1.0+)
163
+ painter.fillEllipse(x, y, r1, r2, deg);
164
+ painter.strokeEllipse(x, y, r1, r2, deg);
165
+ ```
166
+
167
+ ## 导出
168
+
169
+ ```js
170
+ // 导出为图片
171
+ painter.toDataURL(type, encoderOptions).then(dataUrl => {
172
+ // dataUrl 即为 base64 图片
173
+ });
174
+ ```
175
+
176
+ ## 重置
177
+
178
+ ```js
179
+ // 重置为默认配置
180
+ painter.reset();
181
+
182
+ // 带自定义配置重置
183
+ painter.reset({ fillStyle: 'blue', fontSize: 20 });
184
184
  ```
@@ -1,130 +1,130 @@
1
- # 插值函数 API
2
-
3
- VISLite 提供 Cardinal 和 Hermite 两种三次插值函数,用于平滑曲线绘制。
4
-
5
- ## Hermite 插值
6
-
7
- Hermite 插值需要指定两个端点和两个端点处的斜率。
8
-
9
- ### 引入
10
-
11
- ```js
12
- import { Hermite } from 'vislite';
13
- ```
14
-
15
- ### 初始化
16
-
17
- ```js
18
- var hermite = new Hermite(u);
19
- ```
20
-
21
- - **u**: 张弛系数,控制曲线在端点处的弯曲程度,默认 0.5
22
-
23
- ### 设置点位置
24
-
25
- ```js
26
- hermite.setP(x1, y1, x2, y2, s1, s2);
27
- ```
28
-
29
- 参数说明:
30
- - **x1, y1**: 左边点位置
31
- - **x2, y2**: 右边点位置
32
- - **s1**: 左边点的切线斜率
33
- - **s2**: 右边点的切线斜率
34
-
35
- ### 计算插值
36
-
37
- ```js
38
- var y = hermite.use(x);
39
- ```
40
-
41
- 根据 x 值返回对应的 y 值。
42
-
43
- ### 示例
44
-
45
- ```js
46
- var hermite = new Hermite(0.5);
47
-
48
- hermite.setP(0, 0, 100, 100, 0, 1);
49
-
50
- // 计算x=50时的y值
51
- var y = hermite.use(50);
52
- ```
53
-
54
- ---
55
-
56
- ## Cardinal 插值
57
-
58
- Cardinal 插值是 Hermite 的扩展,只需提供点序列,系统自动计算斜率。
59
-
60
- ### 引入
61
-
62
- ```js
63
- import { Cardinal } from 'vislite';
64
- ```
65
-
66
- ### 初始化
67
-
68
- ```js
69
- var cardinal = new Cardinal(t);
70
- ```
71
-
72
- - **t**: 张弛系数,控制曲线走势,默认 0
73
- - t = 0:默认曲线
74
- - t = -1:分水岭效果
75
- - |t| 越大,曲线调整越剧烈
76
-
77
- ### 设置点序列
78
-
79
- ```js
80
- cardinal.setP([[x1, y1], [x2, y2], [x3, y3], ...]);
81
- ```
82
-
83
- 至少需要两个点。
84
-
85
- ### 计算插值
86
-
87
- ```js
88
- var y = cardinal.use(x);
89
- ```
90
-
91
- 根据 x 值返回对应的 y 值。
92
-
93
- ### 示例
94
-
95
- ```js
96
- var cardinal = new Cardinal(0);
97
-
98
- cardinal.setP([
99
- [0, 0],
100
- [25, 25],
101
- [50, 10],
102
- [75, 50],
103
- [100, 100]
104
- ]);
105
-
106
- // 绘制平滑曲线
107
- for (var x = 0; x <= 100; x += 1) {
108
- var y = cardinal.use(x);
109
- painter.lineTo(x, y);
110
- }
111
- painter.stroke();
112
- ```
113
-
114
- ---
115
-
116
- ## 对比与选择
117
-
118
- | 特性 | Hermite | Cardinal |
119
- |------|---------|----------|
120
- | 端点斜率 | 手动指定 | 自动计算 |
121
- | 参数数量 | 6个 | 2个(点序列) |
122
- | 灵活性 | 高(可自定义斜率) | 中(受邻近点影响) |
123
- | 适用场景 | 精确控制曲线形状 | 自然平滑的曲线 |
124
-
125
- ## 应用场景
126
-
127
- - **折线图平滑**: 使用 Cardinal
128
- - **动画路径**: 使用 Hermite 自定义缓动
129
- - **字体渲染**: 使用 Cardinal 平滑字形边缘
1
+ # 插值函数 API
2
+
3
+ VISLite 提供 Cardinal 和 Hermite 两种三次插值函数,用于平滑曲线绘制。
4
+
5
+ ## Hermite 插值
6
+
7
+ Hermite 插值需要指定两个端点和两个端点处的斜率。
8
+
9
+ ### 引入
10
+
11
+ ```js
12
+ import { Hermite } from 'vislite';
13
+ ```
14
+
15
+ ### 初始化
16
+
17
+ ```js
18
+ var hermite = new Hermite(u);
19
+ ```
20
+
21
+ - **u**: 张弛系数,控制曲线在端点处的弯曲程度,默认 0.5
22
+
23
+ ### 设置点位置
24
+
25
+ ```js
26
+ hermite.setP(x1, y1, x2, y2, s1, s2);
27
+ ```
28
+
29
+ 参数说明:
30
+ - **x1, y1**: 左边点位置
31
+ - **x2, y2**: 右边点位置
32
+ - **s1**: 左边点的切线斜率
33
+ - **s2**: 右边点的切线斜率
34
+
35
+ ### 计算插值
36
+
37
+ ```js
38
+ var y = hermite.use(x);
39
+ ```
40
+
41
+ 根据 x 值返回对应的 y 值。
42
+
43
+ ### 示例
44
+
45
+ ```js
46
+ var hermite = new Hermite(0.5);
47
+
48
+ hermite.setP(0, 0, 100, 100, 0, 1);
49
+
50
+ // 计算x=50时的y值
51
+ var y = hermite.use(50);
52
+ ```
53
+
54
+ ---
55
+
56
+ ## Cardinal 插值
57
+
58
+ Cardinal 插值是 Hermite 的扩展,只需提供点序列,系统自动计算斜率。
59
+
60
+ ### 引入
61
+
62
+ ```js
63
+ import { Cardinal } from 'vislite';
64
+ ```
65
+
66
+ ### 初始化
67
+
68
+ ```js
69
+ var cardinal = new Cardinal(t);
70
+ ```
71
+
72
+ - **t**: 张弛系数,控制曲线走势,默认 0
73
+ - t = 0:默认曲线
74
+ - t = -1:分水岭效果
75
+ - |t| 越大,曲线调整越剧烈
76
+
77
+ ### 设置点序列
78
+
79
+ ```js
80
+ cardinal.setP([[x1, y1], [x2, y2], [x3, y3], ...]);
81
+ ```
82
+
83
+ 至少需要两个点。
84
+
85
+ ### 计算插值
86
+
87
+ ```js
88
+ var y = cardinal.use(x);
89
+ ```
90
+
91
+ 根据 x 值返回对应的 y 值。
92
+
93
+ ### 示例
94
+
95
+ ```js
96
+ var cardinal = new Cardinal(0);
97
+
98
+ cardinal.setP([
99
+ [0, 0],
100
+ [25, 25],
101
+ [50, 10],
102
+ [75, 50],
103
+ [100, 100]
104
+ ]);
105
+
106
+ // 绘制平滑曲线
107
+ for (var x = 0; x <= 100; x += 1) {
108
+ var y = cardinal.use(x);
109
+ painter.lineTo(x, y);
110
+ }
111
+ painter.stroke();
112
+ ```
113
+
114
+ ---
115
+
116
+ ## 对比与选择
117
+
118
+ | 特性 | Hermite | Cardinal |
119
+ |------|---------|----------|
120
+ | 端点斜率 | 手动指定 | 自动计算 |
121
+ | 参数数量 | 6个 | 2个(点序列) |
122
+ | 灵活性 | 高(可自定义斜率) | 中(受邻近点影响) |
123
+ | 适用场景 | 精确控制曲线形状 | 自然平滑的曲线 |
124
+
125
+ ## 应用场景
126
+
127
+ - **折线图平滑**: 使用 Cardinal
128
+ - **动画路径**: 使用 Hermite 自定义缓动
129
+ - **字体渲染**: 使用 Cardinal 平滑字形边缘
130
130
  - **地图等高线**: 使用 Hermite 精确控制地形变化