本站于2009年6月在论坛上贴出该参数化设计的程序代码: http://www.archgo.com/bbs/viewtopic.php?f=1&t=12
本设计的出发点是对城市历史的思考。一个历经了时间和事件的城市应当像一个饱经风霜的人,从他脸上的皱纹能看出岁月的痕迹。然而城市建筑的高速更新,使得一个存在了百年的城市面貌和新建的城市一样单薄。
设计的任务是在基地新建一座办公楼。通过调研发现原有基地是一片以老年人居住为主的老居住区,原有的建筑有其特有的风格。因此,希望能引入新的建筑功能和使用人群的同时,保留一部分原有的建筑和使用人群,使得当地的历史得到一定程度的保留和体现。
根据老年人和年轻人对空间使用要求的特点,用Rhino Scripting参照云形成的逻辑来生成许多混合的可能性,并根据形态的要求从中进行选择,最后落实成为最终建筑。
建筑设计:卢晓亮
程序:王韶宁(wang.sn#gmail.com)
外文原文 显示/关闭
http://www.archgo.com/bbs/viewtopic.php?f=1&t=12
2009-06-14
Option Explicit
'Script written by
'Script copyrighted by
'Script version 2009年6月13日 20:06:32
Call Main()
Sub Main()
Const site_width = 12
Const site_longth = 18
Const site_height = 15
Call rhino.enableRedraw(False)
'青年公寓的数量
Dim howManyYoungUnits : howManyYoungUnits = 750
'老年公寓的数量
Dim howManyOldUnits : howManyOldUnits = 375
'leader的位置
Dim howManyLeaders : howManyLeaders = 20
'首先,地块的三维数组
Dim arrSiteUnitStatus( 12, 18, 15)
Dim arrSiteSpaceStatus( 12, 18, 15)
Dim arrSiteUnitObjectID( 12, 18, 15)
'初始化随机数
Randomize
'每一层都随机分布
Dim i,j,k,l
'array使用前要初始化
For i =0 To site_width Step 1
For j = 0 To site_longth Step 1
For k = 0 To site_height Step 1
arrSiteUnitStatus(i,j,k)=0
arrSiteUnitObjectID(i,j,k)=0
arrSiteSpaceStatus(i,j,k)=0
Next
Next
Next
'初始化青年公寓,赋予随机的位置和固定的颜色
i = howManyYoungUnits
Do While i>0
j= Int((12 * Rnd))
k= Int((18 * Rnd))
l = Int((15 * Rnd))
If arrSiteUnitStatus(j,k,l)= 0 Then
arrSiteUnitObjectID(j,k,l) = 1
arrSiteUnitObjectID(j,k,l) = drawCube(j,k ,l)
i = i-1
End If
Loop
'初始化青年公寓,赋予随机的位置和固定的颜色
i = howManyOldUnits
Do While i>0
j= Int((12 * Rnd))
k= Int((18 * Rnd))
l = Int((15 * Rnd))
If arrSiteUnitStatus(j,k,l)= 0 Then
arrSiteUnitObjectID(j,k,l) = 2
arrSiteUnitObjectID(j,k,l) = drawCube(j,k ,l)
i = i-1
End If
Loop
'初始化“空间形态矩阵”产生leader
i = howManyLeaders
Do While i>0
j= Int((12 * Rnd))
k= Int((18 * Rnd))
l = Int((15 * Rnd))
If arrSiteSpaceStatus(j,k,l)= 0 Then
arrSiteSpaceStatus(j,k,l) = 1
i = i-1
End If
Loop
'检查空间的横向和纵向,是不是leader已经积聚,如果积聚,把空间的标记为可停留的、不可停留的
'检查行
'Const site_width = 12
'Const site_longth = 18
'Const site_height = 15
For i =0 To site_longth Step 1
l =0
Dim downLeftX, downLeftY, upRightX,upRightY
For j = 0 To site_width Step 1
For k = 0 To site_height Step 1
If arrSiteSpaceStatus(j,i,k)= 1 Then
'如果是第一个点,把所有的值都给它
If l =1 Then
downLeftX = j
downLeftY = k
upRightX = j
upRightY = k
End If
'记录" 左上"和“右下”的位置
If j downLeftX =j End If If k downLeftY =k End If If j>upRightX Then upRightX =j End If If k>upRightY Then upRightY =k End If '累加 l = l + 1 End If Next Next '如果leader超过了3个,把这个区域变成固定区域 If l>2 Then '该区域标记为固定区域 For j = 0 To site_width Step 1 For k = 0 To site_height Step 1 Next Next End If Next '绘图单元,遍历三维矩阵,绘制出每一个 Dim arrCenter For i =0 To site_width Step 1 For j = 0 To site_longth Step 1 For k = 0 To site_height Step 1 'arrCenter = array(i*3,j*3,k*3) 'Rhino.AddSphere arrCenter, 3 'Call drawCube(i,j,k) Next Next Next Call rhino.enableRedraw(True) End Sub ' 绘图单元,遍历三维矩阵,绘制出每一个 Function drawCube(x,y ,z) Dim arr1,arr2,arr3 ,arr4,arr5,arr6,arr7,arr8,arrCorners arr1 = array(x*7,y*7 ,z*3) arr2 = array(x*7+7,y*7 ,z*3) arr3 = array(x*7+7,y*7+7 ,z*3) arr4 = array(x*7,y*7+7 ,z*3) arr5 = array(x*7,y*7 ,z*3+3) arr6 = array(x*7+7,y*7 ,z*3+3) arr7 = array(x*7+7,y*7+7 ,z*3+3) arr8 = array(x*7,y*7+7 ,z*3+3) arrCorners=array(arr1,arr2,arr3 ,arr4,arr5,arr6,arr7,arr8) Rhino.AddBox (arrCorners) End Function
(本文 zip 下载 20.86 M)
(本文 pdf 下载 0.91 M)
原文:http://www.archgo.com/bbs/viewtopic.php?f=1&t=12
www.ArchGo.com
转载请注明来源http://www.ArchGo.com建筑实例 建筑图片 建筑文章翻译