svg path中的貝塞爾曲線


首先介紹以下什么是貝塞爾曲線

貝塞爾曲線又叫貝茨曲線(Bezier),由兩個端點以及若干個控制點組成,只有兩個端點在曲線上,控制點不在曲線上,只是控制曲線的走向。

控制點個數為0時,它是一條直線;

線性貝塞爾曲線演示動畫,t在[0,1]區間

控制點個數為1時,它是二次貝塞爾曲線;

二次貝塞爾曲線演示動畫,t in [0,1]

控制點個數為2時,它是三次貝塞爾曲線;

三次貝塞爾曲線演示動畫,t in [0,1]

....

數學公式

二次貝塞爾曲線

{\mathbf  {B}}(t)=(1-t)^{{2}}{\mathbf  {P}}_{0}+2t(1-t){\mathbf  {P}}_{1}+t^{{2}}{\mathbf  {P}}_{2}{\mbox{ , }}t\in [0,1]

p0,p2是起始點,p1是控制點

分別把p0,p1,p2點的x,y坐標帶入,求出曲線上的點的x,y坐標

 

三次貝塞爾曲線

{\mathbf  {B}}(t)={\mathbf  {P}}_{0}(1-t)^{3}+3{\mathbf  {P}}_{1}t(1-t)^{2}+3{\mathbf  {P}}_{2}t^{2}(1-t)+{\mathbf  {P}}_{3}t^{3}{\mbox{ , }}t\in [0,1]

p0,p3是起始點,p1,p2是控制點

 

svg的path中與貝塞爾曲線相關的命令有:

C(curveto):三次貝塞爾曲線,參數:
x1,y1 x2,y2 m,n

x1,y1 x2,y2為兩個控制點的xy坐標,m n為終點的坐標,起始點為執行該命令之前,筆觸的位置。(注:svg中的曲線命令通常與M命令一起使用)

 

S(smooth curveto)參數:

x2,y2 m,n

x2,y2為第二個控制點,m n為終點的坐標,對於第一個控制點分為兩種情況:

當S命令的前一個命令是C或S命令時,第一個控制點是前一個C或S的控制點的對稱點(關於前一個命令的終點或當前命令的起始點);

否則S命令將退化為二次貝塞爾曲線(同Q)。

 

Q(quadratic Belzier c

urve)二次貝塞爾曲線,參數:

x1,y1 m,n

x1,y1為控制點坐標,m,n為終點坐標。

 

T(smooth quadratic Belzier curveto)

參數:m,n

同S相似,T是Q的退化或者懶人寫法。分為兩種情況:

當T的前一個命令是Q或T時,控制點是前一個Q或T的控制點的對稱點(關於前一個命令的終點或當前命令的起始點);否則T命令將退化為一條直線。

相對坐標

c,s,q,t命令的相對位移相對的是同一個點,

以c命令為例,當pen表示當前筆觸的位置時,

點的絕對坐標為:

x1=pen[0]+dx1

y1=pen[1]+dy1

x2=pen[0]+dx2

y2=pen[1]+dy2

m=pen[0]+mx

n=pen[1]+my

參考:https://zh.wikipedia.org/zh-cn/%E8%B2%9D%E8%8C%B2%E6%9B%B2%E7%B7%9A

           http://www.zhangxinxu.com/wordpress/2014/06/deep-understand-svg-path-bezier-curves-command/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM