Studio Matrx Monthly · Volume 1 · Issue 3 · August 2026
Amogh N P
 In loving memory of Amogh N P — Architect · Designer · Visionary 
Transformations & ArraysLesson 4.3
CPD for Architecture, Planning & Urban Design/Module 4 · Geometry & Transformations

Lesson 4.3 · Geometry & Transformations

Transformations & Arrays

Move, Rotate, Orient, Mirror - and the arrays that turn one thing into a system

13 min Interactive lessonFree · open lessonByAmogh N P· Architect & interior designer
The hook

One louvre becomes a whole facade - transformations and arrays are how a single element turns into a designed system.

Repetition with variation is most of architecture: columns, mullions, balusters, panels, stairs. Computational design shines here because you define one element and a rule for repeating it, and the system builds itself - stretch the building, change the count, re-solve.

This lesson covers the transformation components (Move, Rotate, Scale, Orient, Mirror) and the array patterns (linear, rectangular, polar, along-a-curve). But the real lesson is a single mental shift: the most powerful way to place things isn't to rotate the geometry with fiddly angles - it's to build the plane you want and let Orient carry the geometry there.

Build the plane, then Orient. Radians on Rotate. Along a curve = Perp Frame + Orient.

The five transforms: Move, Rotate, Scale, Mirror, Orient

Every transformation takes geometry and returns a moved copy - the original data stays put upstream, which is why Grasshopper is non-destructive. The five you'll use daily: Move (translate by a motion vector - recall from Lesson 4.1 that this wants a vector, not a point). Rotate (turn by an angle about an axis, around a plane or point - angles are in radians unless you feed degrees through a Radians component or a Degrees toggle, a classic gotcha). Scale (resize about a center; Scale NU does non-uniform scaling with different X/Y/Z factors). Mirror (reflect across a plane - the mirror plane's orientation is everything, which is why this belongs in a module that hammers planes). And the quiet champion, Orient.

Orient is 'move-and-rotate in one honest step'. It takes geometry, a source plane ('where it is now / its reference frame') and a target plane ('where and how it should end up'), and applies the exact transformation that carries the source frame onto the target frame. Everything riding on that frame comes along, correctly rotated and positioned, with no angle arithmetic. Once Orient clicks, you'll reach for it constantly - it's how you place a module onto any tilted, twisted frame a surface or curve hands you.

RECTANGULAR ARRAYPOLAR ARRAYstep Vx, step Vy, countscenterrotate copies about a plane, count over 360
Zoom
Two array families. A rectangular array tiles copies across a grid from two step vectors and two counts; a polar array rotates copies about a center plane over an angle. Their inputs are design parameters - drive them from sliders, curves or attractors.

Rotate wants RADIANS. Mirror reflects across a PLANE. Orient = source plane -> target plane, one move.

Arrays: linear, rectangular, polar

An array is a transformation applied repeatedly to make a pattern of copies. Linear Array repeats geometry along a single direction by a motion vector and a count - a colonnade, a run of balusters. Rectangular Array (ArrayRect) tiles copies across a grid using two step vectors and two counts (X and Y) - a coffered ceiling, a window grid, a paving field. Polar Array (ArrayPolar) rotates copies around a center by a count over an angle (usually a full 360) - a spiral stair's treads, a rose window, seating around a drum, a fan of blades.

The important habit is to think of the array's controls as design parameters. A rectangular array isn't 'a grid' - it's (spacing X, spacing Y, count X, count Y), four sliders that let you explore an entire family of grids. A polar array is (center plane, count, total angle). Because these are parametric, you can drive them from anything: an attractor could set the count, a curve's length could set the linear spacing, a slider sweep could animate the whole field. And when you need a pattern the built-in arrays can't express - copies whose size or angle varies across the field - you drop the array component and instead generate a list of transforms or target planes yourself and apply them, which is the more general technique the next section builds toward.

RECTANGULAR ARRAYPOLAR ARRAYstep Vx, step Vy, countscenterrotate copies about a plane, count over 360
Zoom
Two array families. A rectangular array tiles copies across a grid from two step vectors and two counts; a polar array rotates copies about a center plane over an angle. Their inputs are design parameters - drive them from sliders, curves or attractors.

Transforming along a curve - and doing it right with frames

Arraying along a straight line is easy; the interesting work is distributing elements along a curve - stair treads climbing a helix, fins marching along a facade edge, planters following a path. The naive approach - Divide the curve into points and Move a copy to each point - places the copies at the right positions but leaves them all facing the same way, like soldiers ignoring the road's bends. It looks wrong immediately.

The correct approach uses the primitive from Lesson 4.1: build a plane at each point that's aligned to the curve, then Orient the element onto each plane. Divide Curve already gives you tangents; better, Perp Frame (or Horizontal Frame) hands you a ready-made plane at every parameter, perpendicular to the curve and correctly aimed. So the pipeline is: Divide or Perp Frame the curve -> get a list of target planes -> Orient the module from its base plane onto each. Now every copy leans, turns and follows the path naturally. This is one of the most-used patterns in the whole toolset, and it's the concrete reason we spent a lesson on planes: the frames are the design. Feed a twist into those frames (rotate each plane a little more than the last) and your fins spiral; scale the element by each frame's position and they taper. The frame list is where all the expression lives.

MOVE GEOMETRY vs MOVE THE PLANE (ORIENT ALONG CURVE)Build a perp-frame plane at each t, then Orient the module to it. The plane carries the rotation.
Zoom
Distributing along a curve, done right. Rather than moving copies to bare points (which leaves them all facing one way), build a perpendicular frame at each parameter and Orient the module onto it - the plane carries the rotation so every copy follows the path.

Along a curve: don't just Move to points. Perp Frame -> planes -> Orient. Frames carry the rotation.

The load-bearing distinction: transform the geometry, or transform the plane?

This is the idea to leave the lesson with. There are two philosophies for placing things. Transform the geometry directly: take the object and Move/Rotate/Scale it with explicit vectors and angles. This is fine for simple, one-off moves. But it gets brittle fast - chaining rotations, keeping track of which axis, fixing things that end up mirrored or tilted wrong. Transform the plane instead: figure out the frame where you want the object (build it, or harvest it from a curve or surface), then Orient the object onto that frame in a single operation. The geometry is 'along for the ride'; the plane does the thinking.

Why the second scales better: planes compose cleanly. You can build a frame, then rotate that frame, then offset that frame along its own normal - each step is a clean, readable transform of a coordinate system, and the geometry follows perfectly at the end. A whole tower of rotating floors is 'a list of planes, each turned a bit more than the one below, with a floor Oriented onto each'. Compare that to trying to rotate each floor's geometry by an accumulating angle about the right axis - error-prone and hard to read. The professional instinct, drilled across this module, is: when orientation matters, don't wrestle the geometry - build the right plane and let Orient carry it there. Master that and complex placement stops being fiddly and starts being architecture.

MOVE GEOMETRY vs MOVE THE PLANE (ORIENT ALONG CURVE)Build a perp-frame plane at each t, then Orient the module to it. The plane carries the rotation.
Zoom
Distributing along a curve, done right. Rather than moving copies to bare points (which leaves them all facing one way), build a perpendicular frame at each parameter and Orient the module onto it - the plane carries the rotation so every copy follows the path.

Transforms are data too - and that's why they scale

One more idea rounds out the toolkit and quietly powers the advanced work later: in Grasshopper a transformation is itself a piece of data you can store, pass around and reuse. Components like Move and Rotate not only output the transformed geometry, they also output the Transform object - a compact description of the operation. You can capture a list of transforms and apply them all at once with the Transform component, or chain them, or compute them from other data. This is the deep reason 'transform the plane, not the geometry' scales: an Orient is really 'the transform that maps plane A to plane B', and a whole array is just a list of such transforms applied to one base object.

That reframing unlocks patterns the fixed array components can't reach. Want copies that grow toward a point, twist more the further along a facade they sit, or thin out where a curve is tight? You generate a list of planes or transforms - one per instance, each computed from position, distance, or an attractor value - and apply them in a single move. The built-in Linear, Rectangular and Polar arrays are just the convenient, uniform special cases of this general idea; when a design needs variation, you drop down a level and build the transform list yourself. It also keeps definitions light: applying a list of transforms to one referenced object is far leaner than baking hundreds of unique pieces of geometry. And it composes with everything you've learned - the transforms can be built from curve frames (Lesson 4.2's Perp Frame), from surface normals (Divide Surface), or from the vectors and planes of Lesson 4.1. Seeing transformation as data, not just an action, is the mental step that turns arrays from a fixed menu into an open-ended design language - and it's the bridge into the attractor and field logic of the next module, where the transforms are driven by a whole landscape of influence.

Components & terms you'll meet in this lesson

Orient

Maps geometry from a source plane onto a target plane

Move-and-rotate in one step, no angle maths. The workhorse for placing modules on computed frames.

Rotate

Turns geometry by an angle about an axis or plane

Angles are radians by default - feed degrees through a Radians/Degrees conversion or you'll get a tiny unexpected turn.

Rectangular / Polar Array

Grid of copies / copies rotated about a center

Their inputs (steps, counts, angle) are design parameters - drive them from sliders, curves or attractors.

Perp Frame / Horizontal Frame

A curve-aligned plane at a parameter

Feed these as target planes to array-and-orient along a path. The correct way to distribute on a curve.

Mirror

Reflects geometry across a plane

The mirror plane's position and orientation define the reflection - a plane problem, as ever in this module.

Hands-on workshop

Workshop - a twisting tower from a stack of planes

Nothing teaches the transform-the-plane philosophy like building a form that would be painful to make any other way. You'll stack oriented floor plates into a twist, driven by two sliders.

Rhino + Grasshopper. Series, Construct Plane, Rotate and Orient are all native - no plug-ins.

Given & goal
Goal: feel 'build the frame, then Orient' at architectural scale
Inputs: one floor-plate outline (a rectangle or a polygon), a vertical line or number for floor height
Time: ~40 minutes
  1. 1Make a base floor plate on the world XY plane. Decide a floor count (slider) and a floor-to-floor height (slider).
  2. 2Build a list of stacked planes: use Series to make heights (0, h, 2h, ...), and Construct/Plane to place a horizontal plane at each height. Confirm you see a vertical stack of frames.
  3. 3Add a per-floor twist: make a Series of angles (0, a, 2a, ...) with 'a' on a slider, and Rotate each plane about its own Z by its angle. The frames now spiral.
  4. 4Orient the floor plate from the world XY (source) onto each twisted plane (target). The whole tower assembles - and re-twists live as you drag the angle slider.
  5. 5Push it: taper the plate by scaling it per floor (tie the scale factor to floor height), or drive the twist angle from a Graph Mapper so the rotation accelerates up the tower. Notice you never once rotated the geometry directly.

You’ll walk away with
A parametric twisting tower controlled by count, floor height and twist-per-floor, built entirely by orienting a plate onto a computed stack of planes. Export a couple of screenshots at different slider values to show the design space.

The worked example

Three altitudes on the same idea

Read the band that fits you — or all three.

For the architectDesign intent, geometry & delivery

Arrays and Orient are how a tectonic idea becomes a coordinated system at scale. A twisting tower is a stack of oriented floor planes; a rhythmic colonnade is a linear array whose spacing you can tie to structural logic; a rationalized facade is planes off a surface with a module Oriented onto each. Think in frames and even ambitious repetition stays editable and buildable.

For the interior designerParametric interiors, pattern & furniture

This is your pattern-and-repetition toolkit. Polar arrays make radial features and light fittings; rectangular arrays lay out tiling, panelled walls and coffered ceilings; along-a-curve orientation gives you slatted screens that follow a sweep and shelving that hugs a curved wall. Design one beautiful element, define the rule, and the room-scale system - and its cut list - follows.

For the studentSkills, portfolio & jobs

Orient is the component that quietly separates confident users from strugglers - learn source-plane-to-target-plane until it's automatic. Build the twisting-tower exercise; it looks impressive and proves you understand frames. And always know whether an angle input wants radians or degrees - that one detail catches almost everyone at least once.

Misconception check

To place copies along a curve, I just divide it into points and move a copy to each point.

That gets the positions right but the orientations wrong - every copy keeps its original facing, so along a bending curve they look strewn rather than marching along it. Positioning and orienting are different jobs. The robust method is to build a plane at each division that's aligned to the curve (Perp Frame or Horizontal Frame, or use Divide Curve's tangents to construct one), then Orient your element from its base plane onto each of those target planes. Now each copy both sits in the right place and turns to follow the path. This 'planes, then Orient' pattern is the single most useful transformation habit in the toolkit - and it's exactly why the module insists you understand planes first.
Try it

Do it yourself

Think it through, then build the tower.

  1. 1What three inputs does Orient take, and what does it do with them?
  2. 2Rotate gave you a barely-visible turn instead of 45 degrees - what did you forget?
  3. 3Give the four parameters that define a rectangular array and the three for a polar array.
  4. 4Why does 'divide the curve and move a copy to each point' orient the copies wrong?
  5. 5In one sentence, why is 'transform the plane' more robust than 'transform the geometry' for complex placement?
Take this with you

The one line to carry out

Move, Rotate, Scale and Mirror transform geometry directly, and arrays repeat a transform into a system - but the durable professional move is to build the target plane and let Orient carry the geometry there, because frames compose cleanly where stacked angles do not.
Take it further
References & further reading

Peer-reviewed journals & authoritative standards

  1. 01Mode Lab - The Grasshopper Primer (Third Edition)grasshopperprimer.com (free online edition), 2020.
  2. 02Rhino Developer - Grasshopper guidesRobert McNeel & Associates, 2026.
  3. 03Grasshopper Docs - component referencegrasshopperdocs.com, 2026.
  4. 04Woodbury, R. - Elements of Parametric DesignRoutledge, 2010.
Related lessons
Recap
The five transforms (Move, Rotate, Scale, Mirror, Orient) each return a repositioned copy non-destructively; watch radians on Rotate and the plane on Mirror. Arrays - linear, rectangular, polar - repeat a transform by parametric counts and steps. Distributing along a curve is done with Perp Frame planes plus Orient, not bare Move. The load-bearing idea: transform the plane, not the geometry, and let Orient do the work.
Carry forward →

You can now generate and place geometry with control. The last piece of the geometric toolkit is knowing _which kind_ of geometry to hold it in: the next lesson contrasts smooth NURBS Breps with faceted meshes, and when to convert between them.

A

The author

Amogh N P

Architect, interior designer, and creative polymath. Studio Matrx began in his notebooks — his vision of design made honest, useful, and open to everyone. Its Academy is written and taught in his memory, and free, forever.

More about Amogh →