SVG贝塞尔曲线平滑绘图核心是精准设置的d属性:用C命令定义三次贝塞尔曲线,S命令实现无缝衔接,合理布置控制点(距端点1/3~1/2线段长),辅以点列简化与插值优化数据质量。

网页端用 SVG 制作平滑的贝塞尔曲线图形,核心是写对 <path></path> 的 d 属性指令,并合理设置控制点位置。不靠堆点数,而靠命令选得准、点算得稳。
用 C 命令画真正贴合趋势的三次贝塞尔曲线
三次贝塞尔(C)有两个控制点,能更自然地拟合起伏变化,比二次(Q)更可控。每段写法是:C x1,y1 x2,y2 x,y,其中前两个是控制点,最后一个是终点。
-
M 50,150 C 100,50 200,250 250,150:从 (50,150) 出发,被 (100,50) 向上“拉”,又被 (200,250) 向下“拽”,最终落在 (250,150) - 连续多段时,后一段起点自动继承前一段终点,不用重复写坐标
- 避免用一堆
L拼折线——再密也是锯齿,放大就毛刺
用 S 命令实现多段之间的无缝衔接
当要连出一条长而顺滑的曲线时,S(smooth cubic curveto)比反复写 C 更高效。它自动复用前一段第二个控制点的对称位置作为当前段的第一个控制点,保证切线方向一致。
生成可在 deepbi 沙箱 iframe 内运行或作为独立文件运行的交互式 HTML 页面,使用 `window.deepbi` JS SDK 实现数据查询、空间管理、文件浏览及用户操作。当用户提出以下需求时启用该能力: - 创建 KPI 仪表盘、数据表格、文件浏览器、成员列表、管理页面; - 明确要求“转成 dhtml”、“转译成 HTML”、“把 XX 页面转成……”、“控制台页面”、“管理后台”、“DeepBI 页面迁移”; - 提及位于 `apps/console/src/featur
- 前一段是
C 100,50 200,250 250,150,下一段可用S 280,50 350,150 -
S不能出现在路径开头,前面必须已有C或S才生效 - 适合快速生成流线型轮廓,比如波浪、手绘感线条、数据折线图平滑化
控制点位置决定平滑度上限
再好的命令也救不了乱放的控制点。理想位置通常在相邻点连线夹角内,距离约为线段长度的 1/3~1/2。
- 例如两点
p0 = [x0,y0]、p1 = [x1,y1],可设第一个控制点为:x0 + (x1 − x0) × 0.35 - 控制点离端点越远,曲线越“甩”;越近,越平缓
- 避免控制点越过相邻点连线,否则容易出现回折或突兀拐弯
配合简化与插值提升原始数据质量
如果输入的是密集采样点(比如手绘轨迹、图表原始数据),直接拟合效果差。建议先降噪再生成路径。
- 用 Ramer-Douglas-Peucker 算法简化点列,去掉冗余顶点
- 对简化后的关键点,用 Chaikin 角点切割算法做 2~3 次迭代,生成圆润弧线
- 或用三角函数动态驱动控制点,实现呼吸式波动效果,比如波浪动画中的振幅与相位微调

















