NCF参数化建筑论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 68666|回复: 51
打印 上一主题 下一主题

[VB & C#] 长啊长的树

[复制链接]
跳转到指定楼层
1m
发表于 2010-3-28 18:57:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 panhao1 于 2010-3-28 18:59 编辑

原来是rs(参见《101》)脚本 后来被我改写为gh脚本(当然是原创的啦)

为了说明gh脚本能取代rs(理论上的)
我做了个对比 (两颗树都是gh输出) 第二个加了实时bake脚本(我以前帖子中提到过关键性代码)  看起来像rs吧


还有视屏 大家看看吧

好了先看图

长草.part001.rar

400 KB, 下载次数: 213, 下载积分: 照度 -1 lux

长草.part002.rar

327.07 KB, 下载次数: 182, 下载积分: 照度 -1 lux

评分

参与人数 3强度 +10 照度 +120 收起 理由
dizon + 2 + 40
skywoolf + 4 + 40
f(x) + 4 + 40

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享
2m
 楼主| 发表于 2010-3-28 19:03:30 | 只看该作者
本帖最后由 panhao1 于 2010-3-28 19:06 编辑

《101》中的rs代码
Call Main()
Sub Main()
        Dim ptStart: ptStart = Array(0,0,0)
        Dim vecDir: vecDir = Array(0,0,1)
        Dim Props: Props = Array(3,4,6,5,0.8,30,0.7)
        Dim Generation: Generation = 2
        Call RecursiveGrowth(ptStart, vecDir, Props, Generation)
End Sub


Sub RecursiveGrowth(ByVal ptStart, ByVal vecDir, ByVal Props(), ByVal Generation)
        If Generation > Props(2) Then Exit Sub
        Dim ptGrow, vecGrow, newTwig
        Dim newProps : newProps = Props
        newProps(3) = Props(3) * Props(4)
        newProps(5) = Props(5) * Props(6)
        If newProps(5) > 90 Then newProps(5) = 90
        Dim N, maxN
        maxN = CInt(Props(0) + Rnd() * (Props(1) - Props(0)))
        For N = 1 To maxN
                ptGrow = RandomPointInCone(ptStart, vecDir, 0.25*Props(3), Props(3), Props(5))
                newTwig = AddArcDir(ptStart, ptGrow, vecDir)
                If Not IsNull(newTwig) Then
                        vecGrow = CurveTangent(newTwig, CurveDomain(newTwig)(1))
                        Call RecursiveGrowth(ptGrow, vecGrow, newProps, Generation+1)
                End If
        Next
End Sub
3m
 楼主| 发表于 2010-3-28 19:07:47 | 只看该作者
我的关键性代码

If isnothing(pt) Then Exit Sub
    Dim Svector As New On3dPoint(0, 0, 1)
    Dim props2 As Integer = 0
    Dim arcs As New List(Of OnArc)
    Call Start(pt, svector, props0, props1, props2, gen, max1, min1, max2, min2, arcs)
    a = arcs

Public  Sub start(ByVal pt As On3dPoint, ByVal dir As on3dvector, ByVal  props0 As Integer, ByVal props1 As Integer, ByVal props2 As Integer, ByVal gen As Integer, ByVal max1 As Double, ByVal min1 As Double, ByVal max2 As Double, ByVal min2 As Double, ByRef arcs As list(Of onarc))
    If props2 >gen Then Exit Sub
    'randomize
    For i As int32=1 To (rnd() * props1 + props0)
      Dim randpt As New on3dpoint
      randpt = randompoint(pt, max1, min1, max2, min2, dir)
      Dim wing As New OnArc
      wing = addarc(pt, randpt, dir)
      If isnothing(wing) Then Exit Sub
      Dim direction As New on3dvector
      direction = wing.TangentAt(wing.Domain(1))
      arcs.add(wing)
      Call Start(randpt, direction, props0, props1, props2 + 1, gen, max1, min1, max2, min2, arcs)
    Next
  End Sub
4m
发表于 2010-3-28 21:01:40 | 只看该作者
编程流的啊·······
5m
发表于 2010-3-28 22:48:45 | 只看该作者
晕,GH里不还得用VB嘛。。其实差不多的
6m
 楼主| 发表于 2010-3-28 23:29:52 | 只看该作者
本帖最后由 panhao1 于 2010-3-29 12:18 编辑

6# odys
不是共同语言..
7m
发表于 2010-3-28 23:50:02 | 只看该作者
哇。。。。很厉害噢。。。和那个L SYS是不是有关联的吖???
8m
发表于 2010-3-29 06:46:10 | 只看该作者
前几天在Rabbit的练习里看了几个树的脚本,不知道路子是不是一样的,不过看起来这个形态更自由一些~
9m
发表于 2010-3-29 08:23:13 | 只看该作者
这个是有代码的啊
10m
发表于 2010-3-29 11:02:13 | 只看该作者
很强大~~学习了~~
11m
发表于 2010-3-29 17:59:56 | 只看该作者
学习学习 O(∩_∩)O哈哈~
12m
发表于 2010-3-29 18:32:44 | 只看该作者
多看看,多学学。学习了
13m
发表于 2010-3-30 09:43:08 | 只看该作者
学习学习`````` 谢谢哦`````
14m
发表于 2010-3-31 16:33:58 | 只看该作者
其实一直不知道树能来做什么,见人做个人流分析的。
15m
发表于 2010-4-1 12:20:37 | 只看该作者
学习学习`````` 谢谢哦`````
16m
发表于 2010-4-1 17:34:20 | 只看该作者
赞一个~!!!!!!
希望GH完全取代RS的一天早点到来
省了学习RS的时间
哈哈~!!!!!
17m
发表于 2010-4-3 01:08:20 | 只看该作者
希望人工智能的时代早点到来!!
18m
发表于 2010-4-4 01:59:31 | 只看该作者
想做个有意思的vb不可缺少,可是对我来说太难了啊
19m
发表于 2010-4-10 19:41:03 | 只看该作者
顶一下先~~~
20m
发表于 2010-4-11 01:28:51 | 只看该作者
樓主太強大

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

GMT+8, 2024-11-16 08:57 , Processed in 0.072413 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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