Simon returned to the Solar System in Processing Coding Challenge by Daniel Shiffman – something he tried before and got stuck. He has now successfully completed both the 2D and the 3D parts:

Simon returned to the Solar System in Processing Coding Challenge by Daniel Shiffman – something he tried before and got stuck. He has now successfully completed both the 2D and the 3D parts:

Here Simon explains how to calculate the magnitude of a 3D vector. This is something he partially figured out on his own and partially learned from Daniel Shiffman’s tutorial on Trigonometry and Polar Coordinates.

Simon continued his lectures about transformations in Processing (Java). Processing has built-in functions that make it easy for you to have objects in a sketch move, spin, and grow or shrink: the `translate`

, `rotate`

, and `scale`

functions. Simon has already covered the translate and rotate functions in an earlier post. Today he made tutorials about scaling and 3D transformation functions `pushMatrix()`

and `popMatrix().`

Scaling changes the size of the grid:

And here come the pushMatrix and the popMatrix functions:

The explanation below comes from the Processing website:

Every time you do a rotation, translation, or scaling, the information required to do the transformation is accumulated into a table of numbers. This table, or matrix has only a few rows and columns, yet, through the miracle of mathematics, it contains all the information needed to do any series of transformations. And that’s why the `pushMatrix()`

and `popMatrix()`

have that word in their name.

What about the *push* and *pop* part of the names? These come from a computer concept known as a stack, which works like a spring-loaded tray dispenser in a cafeteria. When someone returns a tray to the stack, its weight pushes the platform down. When someone needs a tray, he takes it from the top of the stack, and the remaining trays pop up a little bit.

In a similar manner, `pushMatrix()`

puts the current status of the coordinate system at the top of a memory area, and `popMatrix()`

pulls that status back out. The preceding example used `pushMatrix()`

and `popMatrix()`

to make sure that the coordinate system was “clean” before each part of the drawing. In all of the other examples, the calls to those two functions weren’t really necessary, but it doesn’t hurt anything to save and restore the grid status.

Note: in Processing, the coordinate system is restored to its original state (origin at the upper left of the window, no rotation, and no scaling) every time that the `draw()`

function is executed.

The earthquake data visualization coding challenge by Daniel Shiffman went further than just a 2D map – it went 3D! Simon managed to complete the challenge, except for the very last bit where he was supposed to correct the skewed GPS positions of the earthquake locations on his own (this part was not included in the challenge).

We have purchased something Simon wanted to have for months already: new software to construct the craziest 3D-supershapes! The software is pretty old, developed by Australian programmer Paul Bourke long before Simon was even born. Paul Bourke turned out to be a real person, alive and well – he promptly replied to our e-mail after we had trouble downloading our purchase.

All of the supershapes are built by entering certain values in one formula: