相信LaTeX粉絲對(duì)繪圖工具TikZ不會(huì)陌生。在TikZ中,有一條繪制三次Bézier 曲線的命令
\draw (起點(diǎn)).. controls (控制點(diǎn)1) and (控制點(diǎn)2).. (終點(diǎn));
卻沒有繪制二次Bézier 曲線的命令,。有人以為,,如果控制點(diǎn)1和控制點(diǎn)2相同,,就得到一個(gè)二次Bézier曲線
\draw (起點(diǎn)).. controls (控制點(diǎn)1) and (控制點(diǎn)1).. (終點(diǎn));
相應(yīng)地,,該命令可以簡(jiǎn)化為
\draw (起點(diǎn)) .. controls (控制點(diǎn)1) .. (終點(diǎn));
其實(shí),,這種看法是不正確的,。
實(shí)際上,,以P0 ,,P1,P2 為控制點(diǎn)的二次Bézier曲線q(t) 和以P0,,P1,,P1,P2 為控制點(diǎn)的三次Bézier 曲線p(t)是不同的,??梢宰C明,只要P0 ,,P1,,P2 不共線,曲線p(t)就不會(huì)退化為二次Bézier 曲線,。
為了能夠在TikZ中正確繪制二次Bézier曲線,,我們可以借助三次Bézier曲線的命令,利用Bézier曲線的升階算法,,定義一個(gè)生成二次Bézier曲線的命令 \QuadraticBezier:
\newcommand{\QuadraticBezier}[3]{(#1) ..controls $(#1)!2/3!(#2)$) and ($(#3)!2/3!(#2)$)..(#3)}
例如,,下圖中的紅藍(lán)兩條曲線,就可以分別采用下面兩條語(yǔ)句來(lái)實(shí)現(xiàn):
\draw[red] (0,0) .. controls (4,0) .. (2.5,3.5); % 繪制三次Bezier曲線
\draw[blue] \QuadraticBezier{(0,0)}{(4,0)}{(2.5,3.5)}; %繪制二次Bezier曲線
中圖和右圖分別演示用de Casteljau算法計(jì)算p(1/2)和q(1/2) 的過(guò)程,。