Thesis Design Journal

20090508- [ End of Thesis External exam ]
Today marks the end of this thesis journey, it has been long and tiring but nevertheless fulfilling.
Before I close this chapter I would like to thank
Dr Tan Beng Kiang who oversaw my progress throughout this two semesters.
And my classmates like Daniel,Dennis,Firus,Lidan,Lingxin, for being my constant sources of inspiration, esp to Junbiao who helped me a great deal with my model.
Visit here for an overview of my Masters Thesis

Cheers to those who have been following this journal. My experiments does not end here, and do continue to watch this space as google is migrating pages to google sites. There I'll be starting a new journal.

20090410-[ Lingxin Egg Crates ]

  1. Jiggle curves
  2. Extrude D = Sin (x) + Sin (y) surface
  3. Crop top 10% and bottom 10%
  4. Flip and mirror surface
  5. Lingxin's organic egg crate thesis 

These modules remind me of an architect who applied this as formwork to cast wall bricks enabling light to penetrate through the folded surfaces. It'll be interesting if this is combined with the hotchscop script to create stepping platforms within the folds. Perhaps I'll experiment another day, when I've time to de-focus from my own thesis.

20090407-[ Hotchscop ]

Another variant of the Polkariser script , but this one sub-divides surfaces with hex panels instead of the usual solids with spheres. I was commenting on Li Dan's thesis project and it did suddenly occurred to me that I'm doing something similar with respect to my roof form. So I passed this script to Li Dan hope it did help him along and wished him good luck for the MTP finals submission.


20090319-[ Dragon Spine ]

Have not been keeping up with my sketchbook, because I am engaged in resolving uninteresting things due to thesis requirements,ie whether the toliets need to be stacked up vertically ?! Recently I made a comment on the messy-ness of zhilei's ribbons and referred her my script that replicates A-frames along any given spline. This was put together at the generative component workshop, during the course Dr tan talked about her 2nd year student's project which required the assemblage of timber frames above a snaking walkway for visitors. The timber members have fixed length, however the widths of the frames are changing according to the curvature of the path, larger turning -> smaller width. By trigonometric relationships the heights of the frames will also vary with the widths. I used this example  to illustrate the importance of proportion in the overall form as well as scale (human), which should depart from any arbitrary human whimsy.
20090131-[ 3D Polkariser ]

Another development from the dot pattern script I posted earlier, this time instead of polkarising a flat 2d image , we take a 3d form and break it down into sphere units. The above image shows a torus built from various shades of spheres.

20090116-[ In Progress ]

Congrats to the department for surviving 50 years shrinking from a school of architecture then. I'm sorry for the intermission, as I'm also in progress of transitioning from a WINXP PC to my spanking fast Leopard MACOSX. Despite the technical difficulties, fortunately all my stuff have remained intact except for revit and autocad which cant run on MACOSX.

20081210-[ Double Helix Twist ]

20081203-[ Cocktail Weave ]

Nothing sensual this time round. Although not very elegantly crafted but still is an excellent demonstration of a cocktail blend of mathematical algorithms weaved into product design; when trigonometrics is applied to conic forms. Bloody Mary anyone? Just Ribena straight for me.
20081129-[ Raining Ripples ]

Another experiment with moving surfaces using trigonometric functions.
Amplitude on surface = Sin ( D + A ) where
D is distance to reference point,and A is angle difference with reference point vector
Other types of trigonometric surfaces that are possible :

From a previous experiment using sin(x) + sin(y) inspiration from the southern cross station by Grimshaw

Source : Rhinoscript101 reference guide, Mcneel

20081126-[ DataScapes ]

It was fun experimenting with the shading components of grasshopper. I been wanting to apply it to an idea that could not be implemented in earlier versions of grasshopper which is to visually represent datasets.The rolled geometry on the right is environmentally simulated in Ecotect and the results are interpolated in a 20x20 representative grid on the left. This interpolation grid would also help facilitate down/up sampling of data from 30x30 grids or 10x10s grid vice versa.It will be very critical later on, when I have many applications for the same data that is detached from the geometry it represents.

Download - WIP

20081126-[ Dot Patterns ]
Followup from the discussion I had with Salene yesterday about using Polka Dot Patterns for Photovoltaic Cells. In fact any kinds of images can be printed as half-tone dot patterns onto glass panels.
This might cast interesting 'shadow' images when harsh sunlight shines across the glass patterns.
Besides using scripting,I know this patterning procedure can be also be replicated using plugins found in adobe photoshop. Otherwise you can use the script downloaded from:
Polkarised Image

20081122-[ Rat's Tail Doodle ]

Yummy, I've created a recipe using "Mee Thai Bak" for the partner in crime. Haha hopefully it's sensual enough for her appetite. Ingredients include:
  1. Wind direction and strength  
  2. Curve starting , center and ending  points
  3. Random Wave generator :- sound in this case.

The random generator is half broken at the moment as it was put together in a day, so dont expect much. I believe this can also be applicable to firus' project as well in formalising his bridges. The relevant parameters which can be mapped are 1-traffic direction and density, 2-Connectivity nodes, 3-traffic noise etc.

Download - WIP

20081115-[ Line Patterns ]

Distracted by pattern making again,some distraction is good but let's see how things can work out. Interesting way of applying recursion in the vb-script component.I wonder if it can be adapted to produce penrose tilings.This grasshopper Script is written by McNeel guys. Script can be downloaded from
20081112-[ Yet another Weave ]

Another awesome weave that is less complicated than the previous two, only with straight lines without trignome-tricks. This baby is worth 15 million hugs haha {Pardon me for the bad joke} Was inspired from a model someone made. LoL I'm beginning to see similar patterns, I should really focus on my thesis prep for now.

20081109-[ Weave Ball ]

I got bored studying aki prac, so decided to toy with grasshopper for awhile.The weave script I made previously was re-visited but this time I've applied it into a sphere instead. An unexpected result from an interesting experiment, it looks more like orange peels than a sepak takraw ball. Will post the streamlined code for the weave cylinder and this one later when I've got more time. You'll need the latest grasshopper 0.5.0093 plugin for this one.

20081101-[ Form Slicer ]

I've written a small grasshopper script to generate floor-plates and calculate the total GFA given the design  as well as the floor-to-floor height. It will take any number of volumes from rhino and cut floor surfaces from them.One bug to take note is that sometimes the ground floor gets skipped.

Download - WIP

20081031-[ Solid AND Void : Hide OR Seek ]

The working draft of part 1 of my thesis is about 80% complete. The most difficult part is more or less coded. The intention is to cut voids in a solid form which in terms of architectural design language would be sky-gardens/parks. And voids will either hide from or seek out the sun , depending on the parameters turned on by the architect. The initial seed form is also constrain given by the architect as well. Currently I have to glue together all the individual pieces that make up this module. Next thing to do is kill a lot of bugs and let the whole thing fly on its own. At this moment , I'm running each individual components separately followed by manually importing/exporting into ecotect / clicking to run simulations. This example shows the void space hiding away from the sun. A logical design sequence would be as follows:
  1. Select Constrain Volume ( architect )
  2. Select Programmatic Zones ( architect )
  3. Identify location solids or voids ( architect / computer )
  4. Voronoi Tessellation into cells ( computer )
  5. Make a Copy ( computer )
  6. Start Ecotect Simulation ( computer )
  7. Modify Void location/parameters with results in Rhino ( computer )
  8. Repeat Step 3 ( computer )

I'm still thinking about a convergence indicator which will break the looping sequence after step 8. It could be the 2nd order differential distance of the void centroid between the present iteration and previous one. ie delta change in distance = 0

20081023-[ Weaving ]
Inspiration from Firus, weaving in grasshopper using trigonometric functions.
x = radius *2cos(q)
y = radius *2sin (q)
z =  radius { sin (q) + cos (q) }
Where ratio = a/b determines the number of points : number of sides
A bit of time wasting , but hey who cares when you are having fun =D

20081021-[ Twisted Tower - Revisited ]

I was asked if a graph component for grasshopper can be used to adjust the twist. Well the script is updated with a graph component to alter the size of the intermediate sections. 
20081021-[Twisted Tower - Generative Process]
My interim crit was postponed from morning to the afternoon, so during the free time, I've put together a grasshopper tower twister. Select the base plan, tweak the sliders for no. of levels,twisting,height and tango. I'm thinking if I can link the twisting parameter thru the vB script component to amplitude of the music playing, vollia we can have dancing towers!


20081018-[ Thesis Working Title ]
I like the way MVRDV in their book KM3 structure their research into keywords ie split,ground,density.This helps the reader grasp and remember the key concepts presented throughout and at the same time summaries the general direction of the research. A title should be able to perform the function of a keyword, using the same syntax it represents a branding of it contents. My thesis is about using algorithms for form finding and problem solving of multiple parameters with computational aid in the process of design.
It can be condensed into a meme given by,
where f unction,subscript "orm"(Greek variables of Sigma,Omicron,Lambda,Vnu,Epsilon)
Letter Corresponding
English Ancient
Α α AlephAleph Alpha ἄλφα [a] 1
Β β BethBeth Beta βῆτα [v] 2
Γ γ GimelGimel Gamma γάμμα [ɣ], [ʝ] 3
Δ δ DalethDaleth Delta δέλτα [ð] 4
Ε ε HeHe Epsilon ε
Ζ ζ ZayinZayin Zeta ζῆτα [z] 7
Η η HethHeth Eta ἦτα [i] 8
Θ θ TethTeth Theta θῆτα [θ] 9
Ι ι YodhYodh Iota ἰῶτα [i], [ʝ] 10
Κ κ KaphKaph Kappa κάππα [k], [c] 20
Λ λ LamedhLamedh Lambda λάβδα
Μ μ MemMem Mu μῦ
Ν ν NunNun Nu νῦ
Ξ ξ SamekhSamekh Xi ξεῖ
Ο ο Ayin'Ayin Omicron οὖ
Π π PePe Pi πεῖ
Ρ ρ ResResh Rho ῥῶ [r] 100
Σ σ ς SinSin Sigma σῖγμα
Τ τ TawTaw Tau ταῦ
Υ υ WawWaw Upsilon [i] 400
Φ φ origin disputed
(see text)
Phi φεῖ [f] 500
Χ χ Chi χεῖ [x], [ç] 600
Ψ ψ Psi ψεῖ
Ω ω Ayin'Ayin Omega [o] 800
20081016-[ Ecotect - Rhino Connection ]
Finally finished writing the code to automate the environmental simulation of mesh models directly in ecotect and retrieve the data back into rhino. This is quite an important major component in the whole scheme of things, Really glad it is up and running bug free, I've underestimated the time & effort needed to 'design' code.It is  really taxing on the left side of the brain, meanwhile did something to stimulate the right-side bits as well. (note: dynamic multi-dimensional arrays cannot be defined)

20081011-[ Run Ecotect simulation script ]
-- 2008 All rights reserved, Wykeith(C)
-- Any commercial derivation from the use of this code
-- is prohibited unless with prior consent

-- System Variables
workdir = "C:\\";
filename = workdir.."filelist.txt";
weatherfile = workdir.."singapore.wea";
file = openfile(filename, "r");
output = read(file,"*l");
while (output ~= nil) do
    cmd("weather.load", weatherfile);
-- insert urban model here
    simfilein = workdir..output..'.3ds';
    cmd("model.3dimport.3ds", simfilein);
-- start simulation here
-- save simulation out
    simfileout = workdir..output.."";
    cmd("model.saveas", simfileout);
    output = read(file,"*l");

-- Clear filelist and update with end
file = openfile(filename, "w");
output = "end";
write(file, output);

20081011-[ Call Ecotect-script from Rhinoscript ]
' 2008 All rights reserved, Wykeith(C)
' Any commercial derivation from the use of this code
' is prohibited unless with prior consent
' Adapted from
Dim WshShell, oExec

'open Keith.scr in scriptmanager
Set WshShell = CreateObject("WScript.Shell")
Set oExec = WshShell.Exec("C:\Program Files\Square One\ScriptManager.exe C:\Program Files\Square One\Scripts\keith.scr")

'wait until Scriptmanager has started
Do While WshShell.AppActivate("ECOTECT: Scripting") = False
  Rhino.Print "Waiting For Ecotect to start"
  Rhino.Sleep 1000

'bring scriptmanager to focus and run my script
WshShell.AppActivate ("ECOTECT: Scripting")
WshShell.SendKeys "{F9}"

20081006-[ Website Objectives ]
The purpose for setting up this humble website is not a case of what others can do , I can do "better"
But rather to fulfill the following goals.
  1. Save my time writing a report at the end of this whole thesis exercise. Time is a valuable commodity.
  2. A stage to share and broadcast my thoughts to my friends beyond geographical constraints
  3. To develop a future tool and platform for design collaborations using Web 2.0 technologies
20081003-[ Ecotect Workshop]
It was refreshing to have participated in the workshop by Dr Uma. Other than re-learning ecotect, what made the workshop worthwhile to attend was the learning about fundamentals. No point learning how to operate the software without understanding the inputs and outputs.
Several excellent and relevant advice from Dr Uma for my thesis project :
  • PMV/ PPD for the placement of hospital-beds.
  • Thermal Comfort is different for different activities
  • Min airflow for thermal comfort can be determined for basis for CFD simulation
  • Measure daylight for a test plane under my parametric sunshaded roof rather than on the roof itself
  • Accoustics

    Reverberation Time ( time taken for sound to fade to -30db)
    -Speech or music has different requirement 2sec for speech, longer for music

    -equipment -> Control

    - Site level

    Audible feq
    20hz - 20,000 hz

    Low freq < 128
    Mid 128> >2048
    High >2048

    Internal spaces

    Sabine Formula
    RT =  0.163(vol of space)/ Total Absorption of materials

    Total Absp = Surface area X coefficient of absorption
    wood is best reflector
    fabric is absorber
    Seat absorption + Human beings + carpet

    NR:Noise reduction
    NC:Noise Criteria value
    Office = NC 40 ( should not be more than 40 decibels)

20081004-[ Pattern to Panel ]

While I was working during my year-out, my colleagues were pretty much fascinated about islamic patterns. Like shape-grammar, there were certain mathematical rules leading to the generation of such intricate patterns that are used in Islamic architecture,art and as well as fabric/carpets (did you know arab carpet makers purposefully introduce mistakes in their design, it's like finding where's wally in the carpet pattern). I've created a grasshopper script that takes any user drawn pattern mapping it onto a curve surface/panel. 
In the applied example I copied an Islamic pattern and transformed it into a shading or environmental filter for a glass facade.

 There are some issues using the script, so approach me in person for a copy

20081001-[ Shape Grammar]
A shape grammar minimally consists of three shape rules: a start rule, at least one transformation rule, and a termination rule. The start rule is necessary to start the shape generation process. The termination rule is necessary to make the shape generation process stop. The simplest way to stop the process is by a shape rule that removes the marker. A shape rule consists of two parts separated by an arrow pointing from left to right. The part left of the arrow is termed the Left-Hand Side (LHS). It depicts a condition in terms of a shape and a marker. The part right of the arrow is termed the Right-Hand Side (RHS). It depicts how the LHS shape should be transformed and where the marker is positioned. The marker helps to locate and orientate the new shape.

Source :

Another derivative of the shape grammar is the L-system , or fractal generator
An L-system or Lindenmayer system is a parallel rewriting system, namely a variant of a formal grammar (a set of rules and symbols), most famously used to model the growth processes of plant development

Penrose tilings

The following images were generated by an L-system. They are related and very similar to Penrose tilings, invented by Roger Penrose.

As an L-system these tilings are called Penrose's rhombuses and Penrose's tiles. The above pictures were generated for n = 6 as an L-system. If we properly superimpose Penrose tiles as an L-system we get next tiling:

otherwise we get patterns which do not cover an infinite surface completely:

Source :
This could be quite useful for the panelising module I've written earlier, instead of dividing up a surface into quadrilaterals, I could experiment with an L-system. Another sub-division algorithm which is quite useful is the ice-ray grammar

20081001-[ Program Parameters]
The script will be written to tackle some of the development control requirements of the site
and I've listed them out in under the site & structure section. I'm interested in the formal resolution of
the following parameters
  1. PMS Reserve 
  2. Through Block Pedestrian Spine 
  3. Pedestrian Overhead Bridge
  4. Building Envelope
  5. Roofscape
  6. Sky Voids 
20080930-[Accoustic Simulation in Ecotect]

The same roof again in ecotect, this time I was experimenting to see if ecotect can be used for acoustical analysis. I'm disappointed that the user can only specify point sources and not linear sources, nonetheless it is interesting to analyze the sonic performance of the roof if it is used as an outdoor amphitheater. Sound travels in a straight line and it get reflected by hard surfaces under snell's law (angle of incidence = angle of reflection) Ecotect calculates the reflected rays and presents it visually. So if I've defined the position of the speaker (point source) I'll know where to put the audience seats( area with the highest density of ray hits)
Sound propagation 
  • Point source
    SPL = SWLpt - 10log (4.pi.r²)
    I = W / (4 p r²)
    SPL = SWLpt - 20log (r) - 11
  • Linear source
    SPL = SWLline - 10log(4.pi.r)
  • Plane source
    SPL = SWLplane
Extracted from 
20080930-[Article on Thesis Program ]
I've added 2 articles about an architectural program which I intend to pursue.
Basically it is tapping on the booming medical tourism market, which I see a synergy with the retail and financial markets as well as the greying population in the region. Wealth for Health!
20080929-[Thesis Site on Google Maps ]
I've added the location of the site in google maps here
20080928-[Manual Parametric Data Import]

  3.00am in the morning , Finally I've managed to bring ecotect simulation data manually over into grasshopper without the hassle of using rhinoscript. Damn tired now, more details later. This should be good enough for the coming workshop. Got lots of todos for the next stage.

  • Write Excel import script
  • Find out rhinoscript object methods
  • Flesh out Design parameters for programming translation

20080926-[Rhino Grasshopper Surface Divider]

I have written a basic surface panelising grasshopper script in rhino. What it does it to take all the surfaces you select and Divides them into X by Y panels that can be adjusted later using the slider

Parameters for the panels are generated as output from the script. The coordinates of the panels are notated as 1-4 for the primary surface and a-d for the secondary offset surface. The user can switch between a true normal offset of the surface or following an input vector normal. The secondary surface can be on either side of the primary surface depending on the strength slider, negative values implies beneath the surface

The script is applied on a simple convoluted planar roof form.Single Cylindrical members and a twisted membrane surface is generated over a panelised surface.

This is the first part of a larger module I have in mind. I'll be writing another chunk which takes data generated from simulation software and parametrized panels can then be generated based on the simulated information. One disadvantage is that grasshopper does not import files at the moment. I will have to use rhinoscript to read the data tables.