最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

【Aegisub】拆分、分割貝塞爾曲線簡(jiǎn)單介紹

2021-10-20 21:20 作者:多華宮與火火里  | 我要投稿

????????簡(jiǎn)單地水一下,簡(jiǎn)單介紹一下貝塞爾曲線怎么分割、把一條n階貝塞爾曲線拆成兩條n階貝塞爾曲線。如圖1.01中,左邊是一條6階貝塞爾曲線、它的控制多邊形的頂點(diǎn)是00、01、02、03、04、05、06這幾個(gè)點(diǎn),然后假設(shè)在 t (t∈[0,1]) 處將其拆分成兩條6階貝塞爾曲線,然后就慢慢地算啊算,最后就得到了右邊的兩條6階貝塞爾曲線

圖1.01

細(xì)分出來的第一條6階貝塞爾曲線的控制多邊形頂點(diǎn)是00、10、20、30、40、50、60,細(xì)分出來的第二條6階貝塞爾曲線的控制多邊形頂點(diǎn)是60、51、42、33、24、15、06

????????拆分n階貝塞爾曲線的算法非常簡(jiǎn)單,直接利用de Casteljau算法即可

????????如圖1.02,剛剛最開始的曲線的控制多邊形頂點(diǎn)是下圖的第一列,而分割以后,得到的第一條曲線的控制多邊形的頂點(diǎn)就是紅色的這一邊、第二條曲線的控制多邊形的頂點(diǎn)就是藍(lán)色的這一邊,所以只需要用第一列一點(diǎn)點(diǎn)地加、加出一列列的即可得到最后需要的這兩條邊

圖1.02

假設(shè)要在 t?處將曲線拆分為兩條曲線,則根據(jù)第一列可得第二列,00乘以(1-t)加上01乘以t就能得到10(即00點(diǎn)的x乘以(1-t)加上01點(diǎn)的x乘以t就得到了10點(diǎn)的x,然后10點(diǎn)的y同理可得),然后01點(diǎn)來乘以(1-t)加上02點(diǎn)來乘以t就能得到11點(diǎn)了。也就是說,為了得到第二列,需要遍歷第一列的點(diǎn)(for i=1,n-1 do),這個(gè)點(diǎn)來乘以(1-t)加上這一列的下一個(gè)點(diǎn)來乘以t,就得到了下一列的相應(yīng)的點(diǎn)。比如n階貝塞爾曲線的控制多邊形頂點(diǎn)的x坐標(biāo)數(shù)值裝在表x里、y坐標(biāo)裝在y里,那么你要得到第二列就可以是這樣的:

這樣就得到了第二列的點(diǎn)(每個(gè)點(diǎn)的x和y都有了,list_x和list_y),然后第二列也就可以以同樣的方式加出第三列,比如10乘以(1-t)加上11乘以t就得到了20,當(dāng)最后得到這些所有列的時(shí)候,就有了兩邊咱們需要的東西了。所以從一列加得下一列需要一個(gè)for循環(huán),所以要得到所有的列就要兩個(gè)for循環(huán),這很簡(jiǎn)單吧,for里面一個(gè)for而已,也就是:

for i=1,n-1 do

????for i2=1,n-i do

????????巴拉巴拉劈里啪啦

????end

end

(總共有n列,但是因?yàn)榈谝涣幸呀?jīng)有了,所以還需要加出n-1列,所以外層循環(huán)是for i=1,n-1 )

那么其實(shí)要得到最后的兩邊(即圖1.02中的紅色邊和藍(lán)色邊)也很容易嘛,你算出來一列、這一列的第一個(gè)點(diǎn)就是紅色需要的、這一列的最后一個(gè)點(diǎn)就是藍(lán)色需要的。所以如果你不在意原本的曲線的x、y表改變的話,代碼就可以像圖1.03這么寫:

圖1.03

其中f指的是first、s指的second,所以f_x裝的是拆分出來的第一條曲線的控制多邊形頂點(diǎn)的x,然后當(dāng)然第二條曲線的控制多邊形頂點(diǎn)直接這么用就會(huì)是反過來的(曲線的方向反了,因?yàn)樘砑拥臅r(shí)候控制多邊形的頂點(diǎn)順序反過來了),比如本來要得到的控制多邊形頂點(diǎn)是60、51、42、33、24、15、06,但是現(xiàn)在這么添加的話,second里面就是06、15、24、33、42、51、60了,那么這樣的話曲線方向就和60、51、42、33、24、15、06的相反了,所以如果你想兩條細(xì)分出來的曲線的方向是舒暢的話,就可以把得到的s_x表和s_y表給反轉(zhuǎn)一下即可

????????當(dāng)然如果你不想分割的時(shí)候改變?cè)瓉淼膞表和y表(即記錄原本曲線的控制多邊形頂點(diǎn)坐標(biāo)的兩個(gè)表)的話,也可以比如這么寫:

所以知道了n階貝塞爾曲線可以拆分為兩條n階貝塞爾曲線,那么當(dāng)然想在t處拆分一條三階貝塞爾曲線就一樣的簡(jiǎn)單了。還有,既然可以在t處拆分曲線,那么你就可以得到一條曲線的子曲線(subcurve)了不是嗎?也就是說,你可以得到比如在 t1 到 t2 這一段的曲線,如圖1.04和圖1.05

圖1.04
圖1.05

顯然這一段就是從?t1到t2 的曲線的子曲線了

????????其它代碼啥的就在視頻里講了

【Aegisub】拆分、分割貝塞爾曲線簡(jiǎn)單介紹的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
天门市| 伊春市| 顺昌县| 贵港市| 衢州市| 康马县| 固安县| 花莲市| 偏关县| 抚州市| 筠连县| 长沙县| 桐庐县| 宜兴市| 天长市| 运城市| 上杭县| 临海市| 城步| 揭西县| 武山县| 乡城县| 四会市| 长顺县| 浦城县| 五莲县| 门源| 陈巴尔虎旗| 库尔勒市| 广河县| 麻栗坡县| 溧水县| 民权县| 全州县| 中卫市| 洪江市| 资阳市| 阳城县| 宁强县| 三门峡市| 竹山县|