





























Chapter_ 5_Parametric Space
81	Parametric Space















Chapter_ 5_Parametric Space


Our survey in Geometry looks for objects in the space; Digital 
representation of forms and tectonics;
different  articulation  of  elements  and  multiple  processes  of  
generations;  from  classical  ideas  of symmetry and pattern up to NURBS 
and curvature continuity.

We are dealing with objects. These objects could be boxes, spheres, cones, 
curves, surfaces or any articulation of them. In terms of their presence in 
the space they generally divided into points as
0‐dimensional,  curves  as  1‐dimensional,  surfaces  as  2‐dimensional  
and  solids  as  3‐dimensional
objects.

We  formulate  the  space  by  coordinate  systems  to  identify  some  
basic  properties  like  position, direction and measurement. The Cartesian 
coordinate system is a 3 dimensional space which has an Origin point 
O=(0,0,0) and three axis intersecting at this point which make the X, Y and 
Z directions. But we should consider that this 3D coordinate system also 
includes two ‐ dimensional system ‐ flat space (x, y) ‐ and one 
dimension‐linear space (x) ‐ as well. While parametric design shifts 
between these spaces, we need to understand them as parametric space a bit.






5_1_One Dimensional (1D) Parametric Space


The X axis is an infinite line which has some numbers associated with 
different positions on it. Simply
x=0 means the origin and x=2.35 a point on the positive direction of the X 
axis which is 2.35 unit away from the origin. This simple, one dimensional 
coordinate system could be parameterised in any curve in the space. So 
basically not only the World X axis has some real numbers associated with 
different positions on it, but also any curve in the space has the 
potential to be parameterized by a series of real numbers that show 
different positions on the curve. So in our 1D parameter space when  we  
talk  about  a  point,  it  could  be  described  by  a  real  number  
which  is  associated  with  a specific point on the curve we are dealing 
with.

It is important to know that since we are not working on the world X axis 
any more, any curve has its own  parameter  space  and  these  parameters  
does  not  exactly  match  the  universal  measurement systems. Any curve 
in the Grasshopper has a parameter space starts from zero and ends in a 
positive real number (Fig.5.1).
82	Parametric Space



Fig.5.1. 1D‐parameter space of a curve. Any ‘t’ value is a real number 
associated with a position on
the curve.




So talking about a curve and working and referencing some specific points 
on it, we do not need to always deal with points in 3D space with p=(X,Y,Z) 
but we can recall a point on a curve by p=t as a specific parameter on it. 
And it is obvious that we can always convert this parameter space to a 
point
in the world coordinate system. (Fig.5.2)





Fig.5.2. 1D‐parmeter space and conversion in 3D coordinate system.
83	Parametric Space


5_2_Two Dimensional (2D) Parametric Space


Two axis, X and Y of the World coordinate system deals with the points on 
an infinite flat surface
that each point on this space is associated with a pair of numbers p=(X,Y). 
Quite the same as 1D
space, here we can imagine that all values of 2D space could be traced on 
any surface in the space.
So basically we  can parameterize  a coordinate  system on a  curved 
surface  in the  space, and  call different points of it by a pair of 
numbers here known as UV space, in which P=(U,V) on the surface. Again we 
do not need to work with 3 values of (X,Y,Z) as 3D space to find the point 
and instead of that we can work with the UV “parameters” of the surface. 
(Fig.5.3)


Fig.5.3. UV (2D) parameter space of surface.

These  “Parameters”  are  specific  for  each  surface  by  itself  and  
they  are  not  generic  data  like  the World  coordinate  system,  and  
that’s  why  we  call  it  parametric!  Again  we  have  access  to  the  
3D equivalent coordinate of any point on the surface (Fig.5.4).

Fig.5.4. Equivalent of the point P=(U,V) on the world coordinate system 
p=(X,Y,Z).
84	Parametric Space


5_3_Transition between spaces


It  is  a  crucial  part  in  parametric  thinking  of  design  to  know  
exactly  which  coordinate  system  or
parameter space we need to work with, in order to design our geometry. 
Working with free form curves and surfaces, we need to provide data for 
parameter space but we always need to go back and  forth  for  the  world  
coordinate  system  to  provide  data  for  other  geometry  creations  or 
transformations etc. It is almost more complicated in scripting, but since 
Grasshopper has a visual interface  rather  than  code,  you  simply  
identify  which  sort  of  data  you  need  to  provide  for  your design 
purpose.

Consider that it is not always a parameter or a value in a coordinate 
system that we need in order to call  geometries  in  Generative  
Algorithms  and  Grasshopper,  sometimes  we  need  just  an  index number 
to do it. If we are working with a bunch of points, lines or whatever, and 
they have been generated  as  a  group  of  objects,  like  point  clouds,  
since  each  object  associated  with  a  natural number that shows its 
position in a list of all objects, we just need to call the number of the 
object as index instead of any coordinate system. The index numbering like 
array variables in programming is
a 0‐based counting system which starts from 0 (Fig.5.5).





Fig.5.5.  Index  number  of  a  group  of  object  is  a  simple  way  to  
call  an  on  object.  This  is  0‐based counting system which means 
numbers start from 0.






So as mentioned before, in Associative modelling we generate our geometries 
step by step as some related  objects  and  for  this  reason  we  go  into 
 the  parameter  space  of  each  object  and  extract specific information 
of it and use it as the base data for the next steps. This could be started 
from a simple field of points as basic generators and ends up at the tiny 
details of the model, in different hierarchies.
85	Parametric Space





5_4_Basic Parametric Components





5_4_1_Curve Evaluation
The <evaluate> component is the function that can find the point on a curve 
or surface, based on the parameter you feed. The <evaluate curve> component 
(Curve > Analysis > Evaluate curve) takes a curve and a parameter (a 
number) and gives back a point on curve on that parameter.







Fig.5.6. The evaluated point on <curve> on the specific parameter which 
comes from the <number slider>.







Fig.5.7. We can use <series> of numbers as parameters to <evaluate> instead 
of one parameter. In the above example, because some numbers of the 
<series> component are bigger than the domain of the curve, you see that 
<Evaluate> component gives us warning (becomes orange) and that points are 
located on the imaginary continuation of the curve.
86	Parametric Space



Fig.5.8.  Although  the  ‘D’  output  of  the  <curve>  component  gives  
us  the  domain  of  the  curve
(minimum and maximum parameters of the curve), alternatively we can feed an 
external <curve> component from Param > Geometry and in its context menu, 
check the Reparameterize section. It changes the domain of the curve to 0 
to 1. So basically I can track all <curve> long by a <number slider> or any 
numerical set between 0 and 1 and not be worry that parameter might go 
beyond the numerical domain of the curve.




There are other useful components for parameter space on curves on Curves > 
Analysis and Division that we talk about them later.














5_4_2_Surface Evaluation
While  for  evaluating  a  curve  we  need  a  number  as  parameter  
(because  curve  is  a  1D‐space)  for surfaces we need a pair of numbers 
as parameters (U, V), with them, we can evaluate a specific point on a 
surface. We use <evaluate surface> component (Surface > Analysis > 
Analysis) to evaluate
a point on a surface on specific parameters.

We  can  simply  use  <point>  components  to  evaluate  a  surface,  by  
using  it  as  UV  input  of  the
<Evaluate surface> (it ignores Z dimension) and you can track your points 
on the surface just by X
and Y parts of the <point> as U and V parameters.
87	Parametric Space



Fig.5.9. A point <Evaluate>d on the <surface> base on the U,V parameters 
coming from the <number
slider> with a <point> component that make them a pair of Numbers. Again 
like curves you can check the ‘Reparameterize’ on the context menu of the 
<surface> and set the domain of the surface 0 to 1
in both U and V direction. Change the U and V by <number slider> and see 
how this <evaluated>
point moves on the surface (I renamed the X,Y,Z inputs of the component to 
U,V,‐ manually).





Fig.5.10. Since we can use <point> to <evaluate> a <surface> as you see we 
can use any method that
we used to generate points to evaluate on the <surface> and our options are 
not limited just to a pair
of  parameters  coming  from  <number  slider>,  and  we  can  track  a  
surface  with  so  many  different ways.





Fig.5.11. To divide a surface (like the above example) in certain rows and 
columns we can use <Divide surface> or if we need some planes across 
certain rows and columns of a surface we can use <surface frame> both from 
Surface tab under Util section.
88	Parametric Space





5_5_On Object Proliferation in Parametric Space


For so many design reasons, designers now use surfaces to proliferate some 
other geometries on
them.  Surfaces  are  flexible,  continues  two  dimensional  objects  that 
prepare a  good  base  for  this purpose. There are multiple methods to 
deal with surfaces like Penalisation, but here I am going to start with one 
of the simplest one and we will discuss about some other methods later.

We  have  a  free‐form  surface  and  a  simple  geometry  like  a  box.  
The  question  is,  how  we  can proliferate this box over the surface, in 
order to have a differentiated surface i.e. as an envelope, in that we have 
control of the macro scale (surface) and micro scale (box) of the design 
separately, but
in an associative way.

In order to do this, we should deal with this surface issue by dividing it 
to desired parts and generate our boxes  on  these  specific  locations  on 
 the  surface  and  readjust them if  we  want  to  have  local 
manipulation of these objects.

Generating the desired locations on the surface is easy. We can divide 
surface or we can generate some points based on any numerical data set that 
we want.

About the local manipulation of proliferated geometries, again we need some 
numerical data sets which could be used for transformations like rotation, 
local displacement, resize, adjustment, etc.







Fig.5.12. A free‐form, reparameterized, <surface> being <evaluate>d by a 
numeric <range> from 0 to
1,  divided  by  30  steps  by  <number  slider>  in  both  U  and  V  
direction.  (Here  you  can  use  <divide surface> but I still used the 
<point> component to show you the possibilities of using points in any 
desired way).
89	Parametric Space



Fig.5.13. As you see the <evaluate> component gives ‘Normal’ and ‘plane’ of 
any evaluated points on
the surface. I used these frames to generate series of <box>es on them 
while their sizes are being controlled by <number slider>s.

In order to manipulate the boxes locally, I just decided to rotate them, 
and I want to set the rotation axis the Y direction of the coordinate 
system so I should use the XZ plane as the base plane for their rotation 
(Fig.5.13).


Fig.5.14. Local rotation of the box.


Fig.5.15. The <rotate> component needs ‘geometry’ which I attached <box>es 
and ‘rotation angle’ that I used random values (you can rotate them 
gradually or any other way) and I set the Number of random values as much 
as boxes. Finally to define the plane of axis, I generated <XZ plane>s on 
any point that I <evaluate>d on the <surface> and I attached it to the 
<rotate> component.
90	Parametric Space





















Fig.5.16. Final geometry.
91	Parametric Space


Non‐uniform use of evaluation

During a project this idea came to my mind that why should I always use the 
uniform distribution of
the points over a surface and add components to it? Can I set some criteria 
and evaluate my surface based on that and select specific positions on the 
surface? Or since we use the U,V parameter space and incremental data sets 
(or incremental loops in scripting) are we always limited to a rectangular 
division on surfaces?

There are couple of questions regarding the parametric tracking a surface 
but here I am going to deal  with  a  simple  example  to  show  how  in  
specific  situations  we  can  use  some  of  the  U,V parameters of a 
surface and not a uniform rectangular grid over it.




Social Space

I  have  two  Free‐form  surfaces  as  covers  for  a  space  and  I  think 
 to  make  a  social  open  space  in
between.  I  want  to  add  some  columns  between  these  surfaces  but  
because  they  are  free‐form surfaces and I don’t want to make a grid of 
columns, I decided to limit the column’s length and add
as many places as possible. I want to add two inverted and intersected cone 
as columns in this space just to make the shape of them simple.







Fig.5.17. Primary surfaces as covers of the space.
92	Parametric Space








Fig.5.18. I introduced surfaces to Grasshopper by <srf_top> and 
<srf_bottom> and I Reparameterized
them. I also generated a numerical <range> between 0 and 1, divided by 
<number slider>, and by using a <point> component I <evaluate> these 
surfaces at that <points>. Again just to say that still it
is the same as surface division.










Fig.5.19.  I  generated  bunch  of  <line>s  between  all  these  points,  
but  I  also  measured  the  distance between any pair of points (we can 
use line length also), as I said I want to limit these lines by their 
length.
93	Parametric Space



Fig.5.20. Here I used a <dispatch> component (Logic > Streams > Dispatch) 
to select my lines from the
list. A <dispatch> component needs Boolean data which is associated with 
the data from the list to sent those who associated with True to the A 
output and False one to the B output. The Boolean data comes from a simple 
comparison function. In this <function> I compared the line length with a 
given number as maximum length of the line (x>y, x=<number slider>, 
y=<distance>). Any line length less than the <number slider> creates a True 
value by the function and passes it through the <dispatch> component to the 
A output. So if I use the lines coming out the output of the <dispatch> I 
am sure that they are all less than the certain length, so they are my 
columns.







Fig.5.21. The geometry of columns is just two inverted cones which are 
intersecting at their tips. Here because I have the axis of the column, I 
want to draw to circles at the end points of the axis and then extrude them 
to the points on the curve which make this intersection possible.
94	Parametric Space



Fig.5.22. By using an <end points> component I can get the both ends of the 
column. So I attached
these points as base points to make <circle>s with given radius. But you 
already know that these circles are flat but our surfaces are not flat. So 
I need to <project> my circles on surfaces to find their adjusted shape. So 
I used a <project> component (Curve > Util > Project) for this reason.







Fig.5.23. The final step is to extrude these projected circles towards the 
specified points on column’s axis  (Fig.5.20).  So  I  used  <extrude  
point>  component  (Surface  >  Freeform  >  Extrude  point)  and  I 
connected the <project>ed circles as base curves. For the extrusion point, 
I attached all columns’ axis
to  a  simple  <curve>  component  and  I  ‘Reparameterized’  them,  then  
I  <evaluate>d  them  in  two
specific parameter of 0.6 for top cones and 0.4 for bottom cones.
95	Parametric Space





Fig.5.24.  Although  in  this  example,  again  I  used  the  grid  based  
tracking  of  the  surface,  I  used
additional criteria to choose some of the points and not all of them 
uniformly.







Fig.5.25. Final model.
