使用 path 绘图
撰写时间:2026-01-08
修订时间:2026-01-20
连笔画
飞机
要绘制整个飞机,重点与难点仅在于一处:飞机头的半圆圆弧的绘制。
从红点标注的地方开始绘制。为精准绘制半圆,又将半圆圆弧拆分为1/4的圆弧。先将画笔移到红点,使用c命令绘制一条三阶贝塞尔曲线至青点,两个控制点使用灰点标注。第一个灰点的Y轴坐标值与红点相同,第二个灰点的X轴坐标值与青点相同。如此圆角较平滑。
之后,使用s命令绘制另一条1/4的圆弧至蓝点,其控制点的X轴坐标值与第一个灰点相同,Y轴坐标值与蓝点相同。
当使用相对命令的c命令时,其各个参数均分别相对于红点的坐标值计算偏移值,不累积。命令结束后,当前点从红点转移到青点,作为后续的使用相对命令的s命令的起始点以计算其偏移值。
作为对比,下面的代码,从上面的红点到蓝点,仅使用一条C命令来绘制圆弧,看看效果有何不同。
可以看出,当仅使用一个C命令时,直线与圆弧的交界处非常生硬。上面同时使用C命令及S命令就可避免此弊端。
回形针
从红点开始,顺时针绘制绿色边框线。经多处蛇形走位后,最后回到红点,完成闭环。
红、青、蓝3个点,分别对应于M命令,以及第一次出现的c命令及s命令。
放大镜
从右下角开始,先画把柄,再画右上角半圆,最后画左下角半圆。
通过使用两个a命令,绘制了一个完整的圆。这比使用C命令要更直观。通过将stroke-linecap的值设置为round,直接在直线上产生了圆角,非常便捷。
此外,这里直接采用粗线条来勾画边框,从而无需使用诸如先填充一个大圆再挖出一个小圆的实现方式。
心形
从左上角使用a命令连续绘制两个水平的半圆,然后使用q命令绘制两条一次贝塞尔曲线,分别连接底点及起始点。
除了M命令,整个图形内部均使用相对命令,其好处是要修改爱心的位置时,只需修改M命令的坐标值,无需修改a, q命令的坐标值。图形内部被封装起来了。
由于使用相对命令,且两个q命令的起始点不一样,因此需要分别根据它们各自的起始点来指定偏移值。
为简化偏移值的计算,上面两个q命令的控制点的Y轴坐标值取值于其高度值的一半,因此,若需改变q命令的高度,则只需简单地将其控制点的高度值取一半即可。
阴阳鱼
有两种方法可绘制中间的圆弧。第一种方法,使用两个a命令。
如果仔细观察,两个半圆圆弧的交接处近乎一条较短的直线,也即,过渡不够圆滑。
第二种方法,使用c命令及s命令。
对于任意半径r,使用单个三次贝塞尔曲线来逼近上半圆的公式是:
上面的-33.33即是根据此公式求出。
由于使用了s命令,可看出,两个圆弧的交接处有了一点的改善。
可以很方便地改变控制点。例如,将c命令的两个控制点的Y轴偏移值变小一点,将第二个控制点的X轴坐标值往右拉一点,以形成更有张力的弧度。而后续的s命令如影随形地自动进行镜像。
绘制圆角
使用只有一个控制点的q命令,可以很方便地绘制平滑的圆角。
水珠
可将c命令的终止点设为与当前点一样的同一位置,两个控制点如果相对于终止点与当前点左右对称,则可拉出水珠的形状。
稍做修改,不难绘出灯泡、气球等类似图形。
组合
挖洞
内外子路径如果绘制的方向相反,则产生挖洞效果。
外部三角形逆时针绘制,内部三角形顺时针绘制,则挖出一个三角板的形状。具体原理参见Canvas Fill Rule。
