NCF参数化建筑论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 108642|回复: 73

[个人作品] Rhinoscript三维形态球谐函数

  [复制链接]
发表于 2011-1-27 16:42:25 | 显示全部楼层 |阅读模式
本帖最后由 wdc63 于 2011-1-27 17:07 编辑


                               
登录/注册后可看大图
  球谐函数是近代数学的一个著名函数,目前被广泛用于计算机图形学,渲染光照处理以及球面映射等方面,球谐函数在形态方面也有极强的表现能力,西澳大学的Paul Bourke的球谐函数三维形态公式:r = sin(m0*phi)^m1 +
cos(m2*phi)^m3 +
sin(m4*theta)^m5 +
cos(m6*theta)^m7
是其中著名的算法之一。该公式提供8个基本参数m0-m7,使得最终形态具有无数种变化,这两天我据此写出了rhinoscript的三维球谐函数程序。感谢NCF上海-杯具兄在算法写作当中的讨论和帮助。



对于此公式的核心函数算法代码如下:
Function mainfunction(u,v,m,radius)

Dim r,collect(2)


r=0


r=r+(sin(m(0)*v))^m(1)


r=r+(cos(m(2)*v))^m(3)


r=r+(sin(m(4)*u))^m(5)


r=r+(cos(m(6)*u))^m(7)


r=r*radius


collect(0)=r*sin(v)*cos(u)


collect(1)=r*cos(v)


collect(2)=r*sin(v)*sin(u)


mainfunction=collect

End Function
Collect()数组从此公式中取得点坐标。

后面有两个源文件下载,其中之一为定义好参数的样本代码,另一文件为用户自定义参数,参数如何设置请参看提示和源代码。

运行过程如下:
先求得所有点


                               
登录/注册后可看大图

再根据之前的点索引对点进行嵌面(这里使用rhino.addsrfpt函数使得文件增大,希望有人能提供rhinoscript四点建立poly面的方法)


                               
登录/注册后可看大图



最后手动删除点得到三维形态:


                               
登录/注册后可看大图


选取不同参数可以获得十分丰富的变化,请自行尝试。

                               
登录/注册后可看大图

                               
登录/注册后可看大图

                               
登录/注册后可看大图
   4.jpg
由于家里电脑配置问题,模型精度不是太高,使用100,可以在自行使用时尝试更高精度。
代码下载:
球谐函数带参数范例
球谐函数用户自定义参数

评分

参与人数 8强度 +16 照度 +246 收起 理由
cloudone + 1
戏水云烟 + 2 + 5
denghua + 2 + 5
ALan.飓 + 1
没碗 + 3 + 100
tony_tsang + 3 + 100
Line + 2 很有启发
panhao1 + 35

查看全部评分

发表于 2011-1-27 16:45:06 | 显示全部楼层
很漂亮的曲面~~~
 楼主| 发表于 2011-1-27 16:47:00 | 显示全部楼层
嗯,修改8个参数可以获得无限种可能,希望看看各位的结果
发表于 2011-1-27 16:53:12 | 显示全部楼层
很漂亮,数学之美果然可以囊括万物。(?)
自己学习混沌理论时有诸多疑问,带着这些疑问去感受吧,
也许没有答案,但探知的过程是值得期待的。
发表于 2011-1-27 17:01:36 | 显示全部楼层
有时间得好好研究研究了
发表于 2011-1-27 17:37:56 | 显示全部楼层
看来得重新啃啃了····
发表于 2011-1-27 17:53:48 | 显示全部楼层
学习了,数学真是充满美
发表于 2011-1-27 19:17:42 | 显示全部楼层
{:3_56:}数学可以解释一切
发表于 2011-1-27 20:01:08 | 显示全部楼层
女朋友说这东西很恶心。
生成几遍后自己也觉得恶心,晕晕的,
只好来跟楼主say sorry了
发表于 2011-1-27 21:16:39 | 显示全部楼层
真的很好看
发表于 2011-1-27 21:20:48 | 显示全部楼层
楼主你亮了!感谢分享
发表于 2011-1-27 21:46:29 | 显示全部楼层
9# channelfei
跑点 成型 好啊~这个球开谐函数有什么讲头么?  跑点成面挺讲究的~请问阁下是怎么成面的~
发表于 2011-1-27 21:48:57 | 显示全部楼层
看来一定要好好学习Rhinoscript......
 楼主| 发表于 2011-1-27 22:02:13 | 显示全部楼层
9# channelfei
跑点 成型 好啊~这个球开谐函数有什么讲头么?  跑点成面挺讲究的~请问阁下是怎么成面的~
没碗 发表于 2011-1-27 21:46

a=x+y*pphi
                                b=(x+1)+y*pphi
                                c=((x + 1) + ((y + 1) * pphi))Mod pnum
                                d=(x + (y + 1) * pphi) Mod pnum
注意之前点的索引是按点生成顺序,点每圈数量固定,因此用这四个参数找到相邻四点进行成面,呵呵这个方法从http://www.tedngai.net/上的脚本学到的。
发表于 2011-1-27 22:57:34 | 显示全部楼层
很漂亮。。看起来像使徒。。。
发表于 2011-1-27 23:14:39 | 显示全部楼层
RS的跑点也很给力啊~
发表于 2011-1-27 23:34:50 | 显示全部楼层
这个函数很神奇,渲染也很给力
发表于 2011-1-28 00:28:15 | 显示全部楼层
14# wdc63
好的 谢谢大川~~~收藏了!!
发表于 2011-1-28 01:17:00 | 显示全部楼层
样子很吸引人,我想起高达里面的机体
发表于 2011-1-28 01:29:59 | 显示全部楼层
有道理 支持 支持

小黑屋|手机版|NCF参数化建筑论坛 ( 浙ICP备2020044100号-2 )    辽公网安备21021102000973号

GMT+8, 2024-12-4 01:20 , Processed in 0.077318 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表