teaching machines

Tranformations

June 13, 2021 by . Filed under public, slai-2021.

This post is part of a course on geometric modeling at the Summer Liberal Arts Institute for Computer Science held at Carleton College in 2021.

All of our shape generators center the shapes around the origin. As we carve out new shapes using boolean operations, we want to be able to transform parts so that they have different sizes, locations, or orientations. In this exercise, you add a couple of utility functions to translate and scale your meshes.

Translate

Write a function named translate. Translation moves an object along the three axes, but does not rotate or resize the object. Have it accept these parameters:

Inside the function, reassign every position in the mesh so that it is offset from its original position. Follow this pseudocode:

for each position
  apply offset to position

Test out your implementation of this method in render.js by adding a call like this:

const mesh = generateCube();
translate(mesh, [2, 0, 0]);

You should see the cube shifted right 2 units.

Scale

Write a function named scale. Have it accept these parameters:

Inside the function, reassign every position in the mesh so that it is scaled from its original position. Follow this pseudocode:

for each position
  apply scale to position

Test out your implementation of this method in render.js by adding a call like this:

const mesh = generateCube();
scale(mesh, [1, 2, 1]);

You should see the cube scaled to be twice as tall as it is wide and deep.

Rotation

Another common operation is rotation. The math behind rotation is more involved. If you find yourself needing to rotate a part or wanting to understand how rotation is done, let me know and we can talk through its implementation.