在HTML5 Canvas中,可以用以下方法描畫(huà)三階和二階的貝塞爾曲線:
context.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y)
context.quadraticCurveTo(cpx, cpy, x, y)
貝塞爾曲線是在二維平面上由一個(gè)“起始點(diǎn)”,一個(gè)“結(jié)束點(diǎn)”,以及一個(gè)或多個(gè)“控制點(diǎn)”定義的曲線。普通的三階貝塞爾曲線使用兩個(gè)控制點(diǎn),而二階曲線則只使用一個(gè)控制點(diǎn)。
要描畫(huà)二階貝塞爾曲線,只需設(shè)置結(jié)束點(diǎn)的坐標(biāo)和控制點(diǎn)的坐標(biāo)即可:
context.moveTo(0,0);
context.quadraticCurveTo(100,25,0,50);
代碼執(zhí)行結(jié)果如下:
![](/d/20211016/0552773843581c05961d54bf0ef2d67b.gif)
上面例子中的曲線從坐標(biāo)(0,0)開(kāi)始,到(0,50)結(jié)束,而用于控制曲線描繪的控制點(diǎn)的坐標(biāo)為(100,25)。
相比二階曲線,由于可以設(shè)置兩個(gè)控制點(diǎn),三階貝塞爾曲線的描畫(huà)更為靈活。下面的代碼描畫(huà)了一條”S”形的曲線:
context.moveTo(150,0);
context.bezierCurveTo(0,125,300,175,150,300);
![](/d/20211016/0edd28d46cfee091a4bea16c128d29c5.gif)
譯注1:關(guān)于貝塞爾曲線,可以參考Wikipedia上的條目(http://en.wikipedia.org/wiki/Bézier_curve),其中的動(dòng)畫(huà)很好地詮釋了貝塞爾曲線的生成機(jī)制。
譯注2:目前HTML5 Canvas最高僅支持三階貝塞爾曲線,四階以上的曲線尚不支持。