研学拾贝:关于TikZ中二次Bezier曲线的画法
来源: 战荫伟/
广东工业大学
31
1
0
2024-12-10

相信LaTeX粉丝对绘图工具TikZ不会陌生。在TikZ中,有一条绘制三次Bézier 曲线的命令

\draw (起点).. controls (控制点1) and (控制点2).. (终点);

却没有绘制二次Bézier 曲线的命令。有人以为,如果控制点1和控制点2相同,就得到一个二次Bézier曲线

\draw (起点).. controls (控制点1) and (控制点1).. (终点);

相应地,该命令可以简化为

\draw (起点) .. controls (控制点1) .. (终点);

其实,这种看法是不正确的。 

实际上,以P0 ,P1,P2 为控制点的二次Bézier曲线q(t) 和以P0,P1,P1,P2 为控制点的三次Bézier 曲线p(t)是不同的。可以证明,只要P0 ,P1,P2 不共线,曲线p(t)就不会退化为二次Bézier 曲线。

为了能够在TikZ中正确绘制二次Bézier曲线,我们可以借助三次Bézier曲线的命令,利用Bézier曲线的升阶算法,定义一个生成二次Bézier曲线的命令 \QuadraticBezier: 

\newcommand{\QuadraticBezier}[3]{(#1) ..controls $(#1)!2/3!(#2)$) and ($(#3)!2/3!(#2)$)..(#3)}

例如,下图中的红蓝两条曲线,就可以分别采用下面两条语句来实现:

\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算法计算p(1/2)和q(1/2) 的过程。 


登录用户可以查看和发表评论, 请前往  登录 或  注册
SCHOLAT.com 学者网
免责声明 | 关于我们 | 联系我们
联系我们: