New York
member since April 22, 2009
profile picture

portfolio of
Marius Watz

Plus+ Member


Tools for correct interpolation of two degrees [A,B], taking into account circular wrap-around.

Updated: Cleaned up redundant code and integrated Frederik's suggestions. Also added better text hints to show angle values.


abstract01js is a reworking of an old 2D Processing sketch from 2003, created for for the exhibition Abstraction Now in Vienna.

The 2010 version was recreated using Processing.js for Aram Bartholl's "Speed Show 4: Super Niche" Processing.js. It was later featured by for the 1.0 release.

Another version can be seen here:


Wild tweak of demo by Dominik Strzelec ( of catenary curves using Toxiclibs and verlet physics.

My version focuses on per-vertex mesh coloring and pseudo-random palette generation. Bonus feature: Threaded initialization.

Thanks to Dominik for the inspiration slash distraction, I'm excited by the possible outcomes and it was fun to do something semi-serious in Toxiclibs for once. This tweak is only one in a series, see Flickr for more:

Released under Creative Commons License (CC BY-NC-SA 3.0)


Demo using the UTimer class from Modelbuilder to control animated drawing behaviors. UTimer is useful to control timed behavior where a local time t=[0..1] can be calculated from a global time T=[0..1].

By specifying a UTimer instance with a local start time (tStart) and local duration (tDur) so that (tStart+tDur)<1, the current local time can be calculated using UTimer.update(globalT). If local time < 0 the object is not active yet, if local time >1 the object is "dead".

See blog post here:


Simple implementation of the well-known series of wave functions known as spherical harmonics, which are defined in spherical coordinates and thus define 3D volumes.

This sketch demonstrates a possible way to morph between two UGeometry geometries, provided that the two objects have the same number of faces.

Written using Paul Bourke's code as a reference:

(Part of my series of reference implementations of classic algorithms...)


Cracking (aka subdivision) of triangular geometry. Uses ArrayList to efficiently handle storage of new triangles while removing old ones after they've been subdivided.

This version builds starting shape using a UGeometry instance built from an array of vertex lists. UFace instances are extracted and used to initialize the custom Poly class, allowing us to construct a complex starting form.

Other subdivision implementations:


Cracking (aka subdivision) of triangular geometry. Uses ArrayList to efficiently handle storage of new triangles while removing old ones after they've been subdivided.

Some other examples of 2D subdivision:


PBox2D demo. Creates a maze of boundaries for particles to bounce off. Has timeout logic for detecting and removing stuck elements. Toggle "drawTrails" to see the trails of elements as they move through the grid.

Code for Boundary and Box are taken from Daniel Shiffman's "Boxes" demo, with some modifications.


"Tree" structure drawn by branching particle system. Part of the Modelbuilder library.

This sketch is intended as an exercise in the unpredictable convergence of multiple parameters. Only a limited subset of possible
parameters produce the intended tree structure.


From the crypt: Old sketch from 2004 with some minor modifications. Draws simple angular line patterns.



From the crypt: Old sketch from 2004, updated but otherwise. Constructs surface-of-rotation from curve and renders it using solid forms or lines.

Added bonus: Contains quaternion-based Arcball class written by Ariel Malka (

key control:
'space' creates new curve
'b' toggles boxes
'r' toggles autorotate
's' saves frame (offline)

drag mouse up/down to zoom, move left/right to rotate


Parametric object generation with GUI control using Modelbuilder. After adjusting "num" slider you must click "rndForm" to create a new base form.

Use shaping slider to apply different 3D shaping functions to the mesh.

STL saving disabled online, works offline.


Demonstrates classic circle packing. Parameters can be controlled through a GUI.

The "Constant Random" toggle triggers a behavior where randomize() is called every time ten new points have been placed.

[Part of Modelbuilder library:]


Classic algorithms: 2D vector field using Perlin noise() to create a field of directional forcs that particles move through. Parameters can be manipulated using the GUI.

[Part of Modelbuilder library:]


Classic algorithms: Interactive vector field, dragging the mouse causes elements to repuse away from the mouse position, but they will always return to their starting position.

The "fieldforce" parameter controls the radius of the repelling force.

"step" is the grid resolution, smaller values give higher resolution grids. Click "build" to rebuild field.

[Part of Modelbuilder library:]


Simple parser for Wordpress WXR format, which is used to export content from blogs running Wordpress. Allows for text import and analysis, but could be extended to include all metadata.


Calculates and draws a Bezier patch surface. Direct port of sample code by Paul Bourke.
Original code:


calculates valid intersection between two lines, so that the intersection will lie on the specified line segment.

Abstract01js - automatic

Self-running version of old sketch from 2003, revived using Processing.js for SPEEDSHOW vol.4.

Abstract01js - interactive

Old sketch from 2003, revived using Processing.js for SPEEDSHOW vol.4.


This is a demo of saving complex 3D graphics to PDF. It's included in the Processing examples.

Mona Lisa interpretation - Lines

Abstract image rasterization. Sketch for KHiO+ workshop 20090420, Oslo.

Mona Lisa interpretation

Abstract image rasterization. Sketch for KHiO+ workshop 20090420, Oslo.
followed by


Share Share Subscribe to sketches