focus on computer-based architectural design
16 June 2020
仅仅靠自己的抽象想象力去理解不同的控制点位置(point)、权重向量(weight)和结点向量(knot)对NURBS曲线的影响是很难获得直观的理解与认识的.
这个grasshopper组件可以让你通过设定曲线的度数、控制点、重量向量和结点向量来演示如何生成NURBS曲线。其结果是让用户可以直观的看到最一般意义上的NURBS曲线的生成.
同时在曲线的绘制的时, 直接展示了与DeBoor算法相关的辅助线,及辅助线如何生成曲线.
DeBoor算法参考文献: https://pages.mtu.edu/~shene/COURSES/cs3621/NOTES/spline/de-Boor.html
什么是DeBoor算法?
BSpline的DeBoor算法伪代码, python源码见github
Input: a value u
Output: the point on the curve, p(u)
If u lies in [uk,uk+1) and u != uk, let h = p (i.e., inserting u p times) and s = 0;
If u = uk and uk is a knot of multiplicity s, let h = p - s (i.e., inserting u p - s time);
Copy the affected control points pk-s, pk-s-1, pk-s-2, ..., pk-p+1 and pk-p to
a new array and rename them as pk-s,0, pk-s-1,0, pk-s-2,0, ..., pk-p+1,0;
for r := 1 to h do
for i := k-p+r to k-s do
begin
Let ai,r = (u - ui) / ( ui+p-r+1 - ui )
Let pi,r = (1 - ai,r) pi-1,r-1 + ai,r pi,r-1
end
pk-s,p-s is the point p(u).
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曲线
Bezier曲线的数学基础–伯恩斯坦多项式–早在1912年就已为人所知,但直到大约50年后,法国工程师皮埃尔-贝兹尔(Pierre Bézier)才将这些多项式应用于图形,并将其广泛宣传,他用它们在雷诺公司设计汽车车身。这些曲线的研究最早是在1959年由数学家Paul de Casteljau利用de Casteljau的算法发展起来的,该算法是一种数值稳定的方法,用于评估法国另一家汽车制造商Citroën的Bézier曲线
关于Bernstein多项式的介绍见: http://www.ikuku.cn/post/1872817
Bezier曲线的数学公式
Bernstein多项式
其中:
n阶贝塞尔曲线的定义
n=1:
当n=1的时候可以用来表示直线.
n=2:
当n=2的时候可以用来表示曲线.
5阶贝塞尔曲线的演示
Github源码下载: https://github.com/caadxyz/DeBoorAlgorithmNurbs
方法一
方法二
b-spline:
nurbs circle:
bezier curve:
你可以根据自由软件基金会发布的GNU Lesser General Public License版本3的条款重新发布它和/或修改它。
food4rhino: https://www.food4rhino.com/app/de-boors-algorithm
Github源码下载: https://github.com/caadxyz/DeBoorAlgorithmNurbs
ikuku精选课 Python4Rhino 建筑师编程课 2020.6.27开始线上直播!讲师:马海东
Comments
No comments found for this article.
Join the discussion for this article on this ticket. Comments appear on this page instantly.