nurbs曲线拟合程序_NURBS曲线DeBoor算法(Grasshopper数学插件)
16 June 2020
● 版本 0.0.2 alpha
● 版權 (c) 2019-2020 mahaidong
● Supported by http://ikuku.cn & caad.xyz
這個插件能做什么?
演示Nurbs曲線的DeBoor算法
僅僅靠自己的抽象想象力去理解不同的控制點位置(point)、權重向量(weight)和結點向量(knot)對NURBS曲線的影響是很難獲得直觀的理解與認識的.
這個grasshopper組件可以讓你通過設定曲線的度數、控制點、重量向量和結點向量來演示如何生成NURBS曲線。其結果是讓用戶可以直觀的看到最一般意義上的NURBS曲線的生成.
同時在曲線的繪制的時, 直接展示了與DeBoor算法相關的輔助線,及輔助線如何生成曲線.
什么是DeBoor算法?
● DeBoor算法是DeCasteljau算法的B-spline版本
● 通過DeBoor算法可以精準的描繪B-spline
● 通過控制點及結點向量knot的值u,通過遞歸求得曲線上的點的位置
● DeBoor算法也可以用于Nurbs曲線的生成
BSpline的DeBoor算法偽代碼, python源碼見github
5階BSpline的演示
10個控制點
knots= [0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 5, 5, 5, 5]
weight= [1, 1, 1, 1, 1, 1, 1, 1, 1,1]
NURBS曲線的DeBoor算法
De Boor的算法也適用于NURBS曲線。我們只需將每個控制點乘以它的權重,將NURBS曲線轉換為4D B-spline曲線,在這條4D B-spline曲線上執行de Boor算法,然后將得到的曲線上的點的xyz除以w,就可以將曲線投影回來. python源碼見github
圓的Nurbs擬合演示
9個控制點
knots= [0, 0, 1, 1, 2, 2, 3, 3, 4, 4]
weight=[1, 0.707107, 1, 0.707107, 1, 0.707107, 1, 0.707107, 1]
演示Bezier曲線與Bernstein多項式
參數曲線的范疇
什么是Bezier曲線
Bezier曲線的數學基礎–伯恩斯坦多項式–早在1912年就已為人所知,但直到大約50年后,法國工程師皮埃爾-貝茲爾(Pierre Bézier)才將這些多項式應用于圖形,并將其廣泛宣傳,他用它們在雷諾公司設計汽車車身。這些曲線的研究最早是在1959年由數學家Paul de Casteljau利用de Casteljau的算法發展起來的,該算法是一種數值穩定的方法,用于評估法國另一家汽車制造商Citro?n的Bézier曲線。
Bezier曲線的數學公式
Bernstein多項式
其中:
n階貝塞爾曲線的定義
n=1:
當n=1的時候可以用來表示直線.
n=2:
當n=2的時候可以用來表示曲線.
5階貝塞爾曲線的演示
如何安裝與使用?
方法一
● 拷貝dist文件夾中的ghuser 文件到 User Objects 文件夾
● 打開dist文件夾中的案例文件 DeBoorAlgorithmNurbs.gh 查看演示效果
方法二
● 打src文件夾中的案例文件 DeBoorAlgorithmNurbs.gh 查看演示效果
b-spline:
nurbs circle:
bezier curve:
todo
● Single Insertion
● Inserting a Knot Multiple Times
● compute tangent and normal vectors at a point on a Bézier curve
● b-spline surface
● curve interpolation
許可證
你可以根據自由軟件基金會發布的GNU Lesser General Public License版本3的條款重新發布它和/或修改它。
插件下載
相關文章
建筑師編程課推廣ikuku精選課 Python4Rhino建筑師編程課 第3期 2020.6.27開始直播!|ikuku.cn|在庫言庫?www.ikuku.cn
總結
以上是生活随笔為你收集整理的nurbs曲线拟合程序_NURBS曲线DeBoor算法(Grasshopper数学插件)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python基础 list和tuple
- 下一篇: java转码工具应用程序_java转码工