在空間中,曲線有重要的作用,例如可以在空間中定義一條曲線,攝像機或者物體沿着曲線運動;另外字體可以用曲線來表示,也成矢量,這樣字體無論拉多大都不會出現鋸齒。
做一條曲線的方法,比較廣為人知的是貝塞爾曲線,在PS之類的軟件經常用到。
貝塞爾曲線的表示方法
貝塞爾認為,用N個點(N≥3),可以表示一條唯一的曲線。下圖表示用4個點表示一條曲線:
表示的規則為:
1.出發方向一定為P0->P1;
2.結束方向一定為P2->P3;
3.有一個點,按照上面規定的方向,隨着時間t不斷行走,從起點走到終點,走過的路徑即為貝塞爾曲線。
也可以理解為,有無數個連續的點,每個點隨着時間t有一個對應的坐標,這些坐標的集合即這條貝塞爾曲線。
因此計算貝塞爾曲線,相當於是求出一個公式,這個公式即P0-P3每個點與t的關系。
貝爾塞曲線的表示方法
下圖表示一條3個點確定的貝爾塞曲線的表示方法:
1.在b0->b1,b1->b2兩條直線上,都分別計算出一個點,這個點根據t值插值表示,如在b0->b1上表示為(1 − t)b0 + tb1;
2.得到的這2個點,連成1條線,再根據t值做插值。得到的這個點,即認為是在t時刻曲線上的一點。
3.用這樣的方法,只要t在[0, 1]上過一遍,即可得到曲線上所有的點。
類似的,這是4個點的貝塞爾曲線。
點隨着t的變化,可以用公式表示為
我們發現這個公式就是一個多項式展開式,每一項即為每個點與t的關系。如有3點,為有3個系數,分別與b0、b1、b2相乘,再相加。而系數就是多項式系數
,也記為
類似的,如果有4個點,則肯定是4項相加(在二維或三維上通用),表示為
我們稱這個多項式系數為“伯恩斯坦多項式”
從上圖可以看到,伯恩斯坦多項式每一項的系數加起來等於1。說明伯恩斯坦多項式實際上做的事情是權重(點到t的距離)插值計算。
用伯恩斯坦多項式的系數乘每個點,即得到N階貝塞爾曲線的表達公式:
貝塞爾曲線的一些性質(以3個點為例):
1.曲線一定經過b0和b3;
2.起始點的切線長度是3倍的(b1-b0),終點的切線長度是3倍的(b3-b2);
3.仿射變換后的曲線,等於N個點先做仿射變換再連起來的曲線;
4.N個點做出的貝塞爾曲線,一定在由這幾個點圍城的凸包內。
凸包性質可以用來判斷,如果幾個點做出的貝爾塞曲線是一條直線,那這幾個點一定在一條直線上。