1
点赞
0
评论
0
转载

研学拾贝:关于TikZ中二次Bezier曲线的画法

相信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) 的过程。 


广东工业大学 计算机学院
近期热门动态
第二代身份证号码编码
6111 2023-10-24 22:39:52
数字人与元宇宙论坛征稿(截稿日期推迟到7月20日)
3306 2022-05-23 12:02:48
欢迎优秀学子加盟IVI@GDUT-CS
2535 2022-02-24 08:47:28
咬文嚼字:“所提”
750 2024-11-13 10:55:28
咬文嚼字:“我们把它称之为”
735 2024-11-08 15:56:25
SCHOLAT.com 学者网
免责声明 | 关于我们 | 联系我们
联系我们:
返回顶部