跳至內容
主選單
主選單
移至側邊欄
隱藏
導覽
首頁
近期變更
隨機頁面
MediaWiki說明
Taiwan Tongues 台語維基
搜尋
搜尋
外觀
建立帳號
登入
個人工具
建立帳號
登入
檢視 B看條 的原始碼
頁面
討論
臺灣正體
閱讀
檢視原始碼
檢視歷史
工具
工具
移至側邊欄
隱藏
操作
閱讀
檢視原始碼
檢視歷史
一般
連結至此的頁面
相關變更
特殊頁面
頁面資訊
外觀
移至側邊欄
隱藏
←
B看條
由於以下原因,您無權編輯此頁面:
您請求的操作只有這些群組的使用者能使用:
使用者
、taigi-reviewer、apibot
您可以檢視並複製此頁面的原始碼。
佇數學的子學科數值分析內底,'''B-看條'''是按呢條曲線一種特殊的表示形式。伊是 B-樣條基曲線的線性組合。B-平條是貝茲曲線的一種一般化,會當進一步來推廣做非均勻有理 B 看條(NURBS), 予阮會當予閣較濟一般的幾何體建造精確的模型。 De Boor 算法是一个數值上穩定的計算 B 平條的方法。 術語 _ B 看條 _ 是 Isaac Jacob Schoenberg 創造的,B 嘿基(basis)條路的縮略。 ==定義== 予定 _ m _ + 一个較節點 _ t _ i,分布佇咧 [零 , 一] 區間,滿足 : $ t _ { 零 } < t _ { 一 } < \ ldots < t _ { m } $ 一个 _ n _ 次'''B 看條'''是一个參數曲線: : $ \ mathbf { S } : [零 , 一] \ to \ mathbb { R } ^ { 二 } $ 伊由 _ n _ 次'''B 看條基 ( basis B-spline )'''組成 : $ \ mathbf { S } ( t )=\ sum _ { i=零 } ^ { m } \ mathbf { P } _ { i } b _ { i , n } ( t ) { \ mbox { , } } t \ in [零 , 一] $ . '''P'''i 這號做'''控制點'''抑是'''de Boor 點'''. _ m _ + 一个 _ n _ 次 B 平條基會當用'''Cox-de Boor 遞歸公式'''定義 : $ b _ { j , 零 } ( t ) :=\ left \ { { \ begin { matrix } 一 & \ mathrm { } \ quad t _ { j } < t < t _ { j + 一 } \ \ 零 & \ mathrm { . . . } \ end { matrix } } \ right . $ : $ b _ { j , n } ( t ) :={ \ frac { t-t _ { j } } { t _ { j + n }-t _ { j } } } b _ { j , n 影一 } ( t ) + { \ frac { t _ { j + n + 一 }-t } { t _ { j + n + 一 }-t _ { j + 一 } } } b _ { j + 一 , n 影一 } ( t ) . $ 當節點等距離,稱 B 看仿的'''齊勻'''( uniform ) 抑無來做'''非均勻'''( non-uniform )。 ===齊勻 B 形條曲線=== 當 B 條是齊勻的時陣,對於予定的 _ n _,彼每一个 B 條基是其他基的平移複製作爾。一个會當做替代的非遞歸定義是 : $ b _ { j , n } ( t ) :=b _ { n } ( t + n-j ) \ qquad { \ mbox { , } } j=影一 , \ ldots m + 一 $ 滿足 : $ b _ { n } ( t ) :=( m + 一 ) \ sum _ { i=零 } ^ { m + 一 } \ omega _ { i } ( t _ { i }-t ) _ { + } ^ { m } \ qquad { \ mbox { , } } t \ in [零 , 一] $ 滿足 : $ \ omega _ { i } :=\ prod _ { j=零 , i \ neq j } ^ { m + 一 } { \ frac { 一 } { t _ { i }-t _ { k } } } $ 其中 : $ ( t _ { i }-t ) _ { + } $ 是斷冪函數(truncated power function) ==註解== 當節點數佮濟項式次數相等的時陣,B 樣條退化為彼个貝茲曲線。即函數的形狀由節點的位來決定。縮放抑是平移節點向量袂改變基函數。 逐條包含佇咧伊的控制點的噗仔內底 _ n _ 次 B 平條的一个基 : $ b _ { i , n } ( t ) $ 只做在區間 [_ t _ i , _ t _ i + n + 一] 上非零。就是講 : $ b _ { i , n } ( t )=\ left \ { { \ begin { matrix } > 零 & \ mathrm { } \ quad t _ { i } \ leq t < t _ { i + n + 一 } \ \ 零 & \ mathrm { . . . } \ end { matrix } } \ right . $ 嘛會使講,咱若操作咱一个控制點,阮干焦改變曲線佇局部的行為,毋是像 Bezier 曲線彼是全局行為。 ==例== ===常數 B 看條=== 常數 B 條條是上簡單的款條。只定義佇一个節點距離上,而且毋是節點的函數。伊只是無仝節點段(knot span)的指示函數。 : $ b _ { j , 零 } ( t )=一 _ { [ t _ { j } , t _ { j + 一 } ) }=\ left \ { { \ begin { matrix } 一 & \ mathrm { } \ quad t _ { j } \ leq t < t _ { j + 一 } \ \ 零 & \ mathrm { . . . } \ end { matrix } } \ right . $ ===線性 B 看條=== 線性 B 形條定義佇兩个相鄰的節點段頂懸,佇咧節點連紲但是袂使微。 : $ b _ { j , 一 } ( t )=\ left \ { { \ begin { matrix } { \ frac { t-t _ { j } } { t _ { j + 一 }-t _ { j } } } & \ mathrm { if } \ quad t _ { j } \ leq t < t _ { j + 一 } \ \ { \ frac { t _ { j + 二 }-t } { t _ { j + 二 }-t _ { j + 一 } } } & \ mathrm { } \ quad t _ { j + 一 } \ leq t < t _ { j + 二 } \ \ 零 & \ mathrm { . . . } \ end { matrix } } \ right . $ ===三改 B 看條=== 一个片斷去的 B 形條的表達式會當寫作: : $ S _ { i } ( t )=\ sum _ { k=零 } ^ { 三 } \ mathbf { P } _ { i ma三 + k } b _ { i ma三 + k , 三 } ( t ) \ qquad { \ mbox { , } } t \ in [零 , 一] $ 其中'''S'''i 是第 _ i _ 個 B 平條片斷去 P 是一个控制點集,_ i _ 和 _ k _ 是局部控制點索引。控制點的集合會是 $ P _ { i } ^ { w }=( w _ { i } x _ { i } , w _ { i } y _ { i } , w _ { i } z _ { i } , w _ { i } ) $ 的集合,其中 $ w _ { i } $ 是比重,當伊增加時曲線會去予人搝向控制點 $ P _ { i } $,咧減點鐘是共曲線遠離該點。 片段的規个集合 _ m _ 抹二條曲線($ S _ { 三 } , S _ { 四 } , . . . , S _ { m } $)由 _ m _ + 一个控制點($ P _ { 零 } , P _ { 一 } , . . . , P _ { m } , m \ geq 三 $)定義,做為 _ t _ 上的一个 B 逐項攏會當定義為 : $ S ( t )=\ sum _ { i=零 } ^ { m } \ mathbf { P } _ { i } b _ { i , } ( t ) $ 其中 _ i _ 是控制點數,_ t _ 是取節點值的全局參數。這个表達式共 B 條表示為 B 樣條基函數的線性組合,這嘛是這个名的原因。 有兩類 B 看條-齊勻佮非齊勻。非均勻 B 款條相鄰控制點間的距離無一定愛相等。一个一般的形式是區間綴著插入去控制點沓沓仔變小到零。 ==B 條條的程式指令== ===Matlab=== In'''Matlab''',the command「spline」can be used for spline interpolation . ( Note:In the command ,'''the cubic B-spline'''is used ) '''Cubic B-Spline Interpolation by Matlab''' Generating a sine-like spline curve and samples it over a finer mesh : x=零 : 一 : 十 ; % original sampling points y=sin ( x ) ; xx=零 : 空七一 : 十 ; % new sampling points yy=spline ( x , y , xx ) ; plot ( x , y ,'o', xx , yy ) ===Python=== '''事前安裝模組''' * pip install numpy * pip install scipy * pip install matplotlib '''Cubic B-Spline Interpolation by Python''' from scipy . interpolate import interp 一 d import matplotlib . pyplot as plt import numpy as np x=np . arange ( 零 , 十一 ) # original sample points , [零 , 一 , 二 ,…, 九 , 十] y=np . sin ( x ) f=interp 一 d ( x , y , kind='cubic') ) # Cubic means the cubic B-spline . x \ _ new=np . arange ( 零 , 十曉一 , 空七一 ) # new sample points , [零 , 空七一 , 空二二 ,…. . , 九九陽九 , 十] y \ _ new=f ( x \ _ new ) plt . plot ( x , y ,'o', x \ _ new , y \ _ new ) plt . show ( ) ==B 平條曲面== ==B 逐个曲線佮曲面相關的算法== 關於著這个所在牽連的算法,佇咧作中有針對 Bézier、B 看條(B-spline)猶閣有真齊勻有理 B 看條(Nurbs)的相關算法的詳細數學表達佮程序實現方法。 ===求導=== 佇幾何處理中,對參數曲線佮曲面的求導是上基本的運算之一,因為參數表達的特性,佇予定點的切線佮法線會當通過求導直接得著。 先來考察曲線的情形:採用本頁定義中的 B 逐條曲線表達式 $ \ mathbf { S } ( t )=\ sum _ { i=零 } ^ { m } \ mathbf { P } _ { i } b _ { i , n } ( t ) { \ mbox { , } } t \ in [零 , 一] $ 嘿參數 $ t $ 進行求導:$ { \ frac { d \ mathbf { S } } { dt } }=\ sum _ { i=零 } ^ { m } b'_ { i , n } ( t ) \ mathbf { P } _ { i } $ ===節點插入去刪除=== ===曲線佮曲面擬合=== ==應用== ==參看== * 看條 * De Boor 算法 * 有理呢 B 看條 ==參考== 本條目部份抑是全部內容出自以 GFDL 授權發佈的《自由線上電腦詞典》(FOLDOC)。 ==參考文獻== ==外部連結== * Interactive java applets for B-splines * Introduction to Computing with Geometry Notes ( Dr . C .-K . Shene / Michigan Technological University ) [[分類: 待校正]]
返回到「
B看條
」。