MC Escher “Concentric Rinds” in 3D

I recently saw the M.C. Escher exhibit at the NC Museum of Art, and one piece that stuck with me was Concentric Rinds:

MC Escher - Concentric Rinds, 1953

The geometry bugged me for a while until I finally figured it out and sketched it up in OpenSCAD:

mc escher - concentric rinds - document


mc escher - concentric rinds - anim - transparent

Here’s a cleaned up version of the OpenSCAD script to generate it – it’s surprisingly simple:

module torus_strip(r, width, thickness) {
    rotate_extrude(convexity = 10)
        translate([r, 0, 0])
        square([thickness,width], center=true);

module the_ring(r) {
    torus_strip(r, 2, 0.5);

$fn = 256;

for (r=[50,40,30,20]) color([1-r/50+0.5,1-r/50+0.1,r/50+0.1]) {

    rotate([ 0, 0, 0]) the_ring(r);
    rotate([90, 0, 0]) the_ring(r);
    rotate([ 0,90, 0]) the_ring(r);

    for (tt=[-60,-120]) rotate([0, tt, 0]) 
        for (t=[0:45:360-1]) rotate([ t, 0, 0]) 

It took a while to figure out the geometry, but I finally got it when I saw there were three rings that were simply orthogonal, plus two arrays of 8 rings that intersected at the octagons. That’s how I modeled it above.

I also played with the animation stuff and got this:

mc escher - concentric rinds - xformer - anim2

Which I think is also neat.

That’s all.

3D crap

2015-04-24 23.09.21cI got a 3D printer (a PrintrBot Simple Metal model 1403), and it’s been great.  I don’t have time to write much, so I’ll share highlights:

  • I’m on Thingiverse here. I’ve already put up a bunch of crap, including a customizable omni wheel design.
  • I’ve been learning OpenSCAD, a free tool that lets you write code to generate 3D solids.
  • There’s no arc function in OpenSCAD, and the solutions I found online were inefficient or only worked for certain inputs, so I wrote a new one.  See below:
module arc(r,a1,a2,ir=0) {
    // normalize to 0..360 (even for negatives)
    a1n = (a1 % 360 + 360) % 360; 
    a2n = (a2 % 360 + 360) % 360;
    difference() {
        if (ir != 0) circle(ir); // if inner radius given, subtract it away
        // get the a1 to interpolate to, adding a revolution if going the long way
        a1next = a2n>a1n ? a1n + 360 : a1n; 
            [cos(1.00*a2n + 0.00*a1next)*2*r,sin(1.00*a2n + 0.00*a1next)*2*r],
            [cos(0.66*a2n + 0.33*a1next)*2*r,sin(0.66*a2n + 0.33*a1next)*2*r],
            [cos(0.33*a2n + 0.66*a1next)*2*r,sin(0.33*a2n + 0.66*a1next)*2*r],
            [cos(0.00*a2n + 1.00*a1next)*2*r,sin(0.00*a2n + 1.00*a1next)*2*r],

// test array
for (a = [-360:60:360], b = [-360:60:360]) {
    translate([a,b,0])  linear_extrude(height=10) arc(25,a,b);

2015-04-25 15_41_57-arc.scad_ - OpenSCAD

Mario Kart 8

UPDATE 6/7/2014: The FAQ got updated with all the values, so here’s the final fancy verison.

Just got Mario Kart 8, and I made a nerd table based on the data from this FAQ (values multiplied by 4 to make them whole):

Mario Kart 8 v2

PDF here, XLSX here.

In Mario Kart Wii, the stats basically added up to “use Funky Kong on the Flame Runner”, but there’s no all-around best on Mario Kart 8 — the bottom line seems to be “drive what you like”.