As you know, the main title of this course is design computing. But what do we exactly mean by the term design computing?
Well, if you were to look up the textbook or Wikipedia definition of design computing, you would probably find something along the lines of the use application and development of computational strategies to a design problem, and that’s a fairly generic definition of design computing. What I’d like to do in this video is explain specifically what we’re going to be doing in this course week by week, and talk a little bit about what my definition of design computing is, and how we’re going to apply that, and what we’re going to do in the course.
We’re going to start pretty simply. If you think about modeling in Rhinoceros or any 3D modeling program, and we can manually draw something like a rectangle. Well, design computing looks at that rectangle not just as a geometric form, but looks at it as a piece of information. So that rectangle carries with it that information,
and that’s particularly important when we start to think about it in the context of coding. Because all of this information, its height, width, area, its position in Cartesian space, its axial orientation, all of those things can be determined and manipulated through the coding process. They can also be part of what I’m calling relational structures. I can alter those things based on, let’s say, the position to something else within Cartesian space, like a point or another geometric figure. Those things start to have interactions with each other that affects their characteristics, and essentially changes and alters their information that they carry with them. In the first week, we’re going to look at very simple elements like points,
lines, and shapes, and we’re going to not only input those into the code, we’re also going to produce them within code, and we’re going to look at how we can alter, using basic transformations, alter those elements based on them as being pieces of information within the code. In this example, we’re transforming that rectangle,
we’re rotating it, we’re scaling it, we’re moving it, copying it. So a whole series of transformations, and they could all be transformations that are related, let’s say, to a specific point in space that those transformations are directed towards.
I can do this because I’m taking this initial figure and inputting it into the coding environment, and applying those transformations through coding them.
At the end of the first week, we’re going to look at other ways that we can extract information and generate information from those simple figures. In doing this, looking at a very important element in geometry and also in coding, which is the point. So from a figure like a rectangle, we can extract control points, we can find a centroid, we can find mid-points between those control points, we can find start and end points of curves, we can divide curves, and we can also do something that we won’t get to in week 1, we’ll get to later when we talk about functions that we can derive point positions almost anywhere in space from two points.
Once we have extracted the points from that figure, we’re then able to generate other more complex geometry from that, and that’s what we’re going to look at in week 2, is how we can use simple figures like rectangles to develop more complex geometry through the coding. Once we’ve input this rectangle into the code, we can find all these points from it within the code, and then we can use those points to generate this more complex geometric figures. Now if we do that in a singular way, it doesn’t seem to hold that much advantage to, let’s say, manually doing it within the code. But once we have it coded for a rectangle,
we can then apply it to any rectangle, any similar figure within both in the code and also in Rhino space. We can run that same code because if I have any four-sided element there, they’re topographically identical. Every rectangle is topographically identical. So I can run that same code on it, which is going to produce radically different types of geometry, and I can also start to look at it as a geometric system. During this week we’re going to get into two concepts. One is this idea that I just explained, which is creating more complex things from simpler things, which I call bone structures.
The base geometry is a bone structure which creates a more complex geometry, and then the sequence of things that we need to go through to do the code before we actually get to the code. This is a process we call pseudocoding, where I map out the logic of the code before going in and writing it. So that’s week 2. Then during week 3, we’re going to look at and start to develop underlying point matrices.
Point matrices allow us to think of interrelated pattern systems on a much more complex level. So we’re not only generating that geometry of the specific modular element, but we’re generating the geometry of the entire underlying structure, and then we can also normally manipulate the element, but we can manipulate the underlying structure through application of randomization, attractor points, so on and so forth. That is week 3, and at the end of week 3 we do a fun assignment with that 2D patterning, where we’ll take our 2D patterning codes and we’ll input them into a given code that I’m going to give you in order to output an animation.
So in the animation, I can change, alter the variables which produce the pattern over a duration, and then save out those individual generations and put them together as one animation.
Week 4, we take that 2D matrix and we start to look at it in a three-dimensional way. We’re also starting to add more sophisticated tools in terms of our coding process. So this week we introduced and use things called conditionals, which are if then statements. There’s a little brain that we create within the code. So we’re going to be working three-dimensionally with this matrix, we’re going to be introducing coding surfaces and starting to deal with some different rendering techniques also, and this ends in when we do this 3D matrix wall problem.
This example that we’re looking at is using both a randomization and a conditional statement to decide which direction the cone is going in. There’s also a manipulation and Fibonacci mathematical manipulation of the underlying grid that we can visually see within the layout. Week 5, we start to look at how we can take surfaces,
nurb surfaces, and use them as a base structure that we can generate our matrices from and on. So we can start to add shape to our forms.
We can start to look at overall global geometric shapes, and we’re going to start with 2D surfaces,
and then eventually we’re going to go to 3D surfaces. This is the final lesson and final project,
which is going to be a tower project. We’re going to introduce color. If you look carefully at these renderings, there’s a lot of variation going on in the part. Not only are they varying in thickness from top to bottom, they vary in frequency. There’s color variation. There’s gradient variation in the color. There’s a lot of things that are going on within the code that we really build up throughout the entire five weeks that culminate in this final lesson. Now, something I didn’t talk about within this video were
that we’ll introduce with each lesson, and they’re really wrapped into the geometric problem. There’s really problems. There’s really synthesis of Python and using Python to both introduce all the different elements of that code, but while you’re working on something geometric in the design aspects. Actually in the next video, I’ll start to talk a little bit more about what those elements of Python are, how we start to classify them, and how we start to think about the integration of Python and Rhino, and their interrelationship.