c++生成nurbs曲面文件_NURBS曲线DeBoor算法(Grasshopper数学插件)

点击上方“ikuku建筑网”可以订阅哦!

1b92dbf9f2da8af8de6d12ea48efa820.png

16 June 2020

● 版本 0.0.2 alpha
● 版权 (c) 2019-2020 mahaidong
● Supported by ikuku.cn & caad.xyz

这个插件能做什么?

演示Nurbs曲线的DeBoor算法

仅仅靠自己的抽象想象力去理解不同的控制点位置(point)、权重向量(weight)和结点向量(knot)对NURBS曲线的影响是很难获得直观的理解与认识的.

这个grasshopper组件可以让你通过设定曲线的度数、控制点、重量向量和结点向量来演示如何生成NURBS曲线。其结果是让用户可以直观的看到最一般意义上的NURBS曲线的生成.

同时在曲线的绘制的时, 直接展示了与DeBoor算法相关的辅助线,及辅助线如何生成曲线.

DeBoor算法参考文献: 

https://pages.mtu.edu/~shene/COURSES/cs3621/NOTES/spline/de-Boor.html

什么是DeBoor算法?

● DeBoor算法是DeCasteljau算法的B-spline版本
● 通过DeBoor算法可以精准的描绘B-spline
● 通过控制点及结点向量knot的值u,通过递归求得曲线上的点的位置
● DeBoor算法也可以用于Nurbs曲线的生成

f5e3767404a82c1eeda650f6ccfbc9cb.png

BSpline的DeBoor算法伪代码, python源码见github(http://www.ikuku.cn/article/nurbsquxiandeboorsuanfa)

fcfc36fa317f218ad649126509dce54a.png

5阶BSpline的演示

2295f8b08e416b62a39c77d9ece5dc36.gif

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(https://github.com/caadxyz/DeBoorAlgorithmNurbs)

圆的Nurbs拟合演示

0e31bbb971b72d98eb6cf1dc25357387.gif

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多项式

参数曲线的范畴

a1ddc2fc29cc8162270dab58415c1a6b.png

什么是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多项式

342f63a929d56b19ab58571ac6b07690.png

其中:

89bb1477b80ab08b2ff4d21fe21b4696.png

n阶贝塞尔曲线的定义

60726c8f70a76ceb9f95e276a6187b3e.png

n=1:
当n=1的时候可以用来表示直线.

574c4d231b08f5e67597c963ac6c1a26.png

e9a81781f4d19aa2e505ae7fcedf3298.gif

n=2:

当n=2的时候可以用来表示曲线.

27100eb89ad997f398553b1c61c95565.png

c65c34bfdcd4a698928f74d8b5a1786e.gif

5阶贝塞尔曲线的演示

066dcb3e64d9b6efa2083618b72222e0.png

0d7a7daffb5a8e3dd04cfccb56a7582a.gif

如何安装与使用?

Github源码下载: https://github.com/caadxyz/DeBoorAlgorithmNurbs

方法一
● 拷贝dist文件夹中的ghuser 文件到 User Objects 文件夹
● 打开dist文件夹中的案例文件 DeBoorAlgorithmNurbs.gh 查看演示效果

方法二
● 打src文件夹中的案例文件 DeBoorAlgorithmNurbs.gh 查看演示效果

b-spline:

aea0cb091194c6bf6273f692f4e62bbb.png

nurbs circle:

fbc4a6dfd0adea46a45244f7752f4efc.png

bezier curve:

e0658a16db06694b4d6984ba6cfcb09e.png

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的条款重新发布它和/或修改它。

插件下载

food4rhino: https://www.food4rhino.com/app/de-boors-algorithm
Github源码下载: https://github.com/caadxyz/DeBoorAlgorithmNurbs

相关文章

建筑师为什么要会python编程?
Caad4Rhino:建筑绘图工具插件
Rhino及Bob McNeel的故事(转载)
曲线系列: 计算机曲线spline简史(转载)
曲线系列: 什么是Bernstein多项式?

建筑师编程课推广

ikuku精选课 Python4Rhino 建筑师编程课 2020.6.27开始线上直播!讲师:马海东

3856a04630e1240e29caff2a917467f7.png

1 关于ikuku
ikuku的使命是关注华人社区内最有影响力的建筑实践、最先锋的建筑探索、最热点的建筑评论,传递给建筑师、设计师、工程师、业主最有价值最详细的内容。
2如何向ikuku投稿
1> 在www.ikuku.cn上注册用户中心账号;
2> 上传作品的相关资料;
3> 在用户中心发布作品,并投递给ikuku。
《如何上传作品并投递给ikuku?》具体内容详见:
http://www.ikuku.cn/article/yonghushangchuanshouce
3 如何找到ikuku
微信服务号:ikuku.cn在库言库
微信订阅号:ikuku.cn订阅号
微博:@ikuku建筑网
QQ建筑师交流群:121154041
官网:www.ikuku.cn

↓↓↓ 
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值