Arjen Markus (7 may 2003) Have you ever seen the set of Pythagorean (regular) solids? Or the Archimedean solids that consist of two types of regular polygons? I find them fascinating - both with plain faces or as an Escher drawing.
Keith Vetter produced a script that helps you create them from paper. So I am not the only one. KPV Thanks, see Polyhedron Nets.
Here is my idea of producing a completely different type of solid. It is convex and it has all the characteristics of a fractal - that is: features that are repeated on ever smaller scales.
This is the procedure:
When we are done (in maths anything can be done, or at least imagined), we have a solid whose every face is a circle! Admittedly, there will be large circles and smaller ones, but there is no angular corner left.
Unless this kind of solid is already described, I claim the name Markus solid for this construction (or perhaps, to make sound more classic, Adrianic solid).
What I have not done yet, is concoct a script that will show the process step by step ...
(*) The approximate factor 1/3 is actually 1-sqrt(2)/2. Just apply Pythagoras' famous theorem ...
AM Okay, I could not stand it not having a script to illustrate the process. So here, in two dimensions (which is a lot easier than 3!) is the illustration.
You may try different values of the parameter alpha - especially 0.5 and 0.7 surprised me (0.5 because I thought the thing would disappear and 0.7 because, well, see for yourself)
You may also try other polygons, as the algorithm is very general (for 2D at least)
# Script ad hoc: illustrate the truncation of polygons # (to be extended to polyhedra) # proc truncatePolygon { alpha coords } { set new_coords {} set nocoords [llength $coords] set xend [lindex $coords end-1] set yend [lindex $coords end] for { set i 0 } { $i < $nocoords } { incr i 2 } { set xbgn $xend set ybgn $yend set xend [lindex $coords $i] set yend [lindex $coords [expr {$i+1}]] set xnew1 [expr {$xbgn + $alpha*($xend-$xbgn)}] set ynew1 [expr {$ybgn + $alpha*($yend-$ybgn)}] set xnew2 [expr {$xend + $alpha*($xbgn-$xend)}] set ynew2 [expr {$yend + $alpha*($ybgn-$yend)}] lappend new_coords $xnew1 $ynew1 $xnew2 $ynew2 } return $new_coords } proc drawPolygon { coords generation } { .c delete all .c create text 200 10 -text "Generations to go: [expr {$generation-1}]" -fill black .c create polygon $coords -fill green -outline black } proc truncateAndDraw { generation } { if { $generation > 0 } { set ::coords [truncatePolygon $::alpha $::coords] drawPolygon $::coords $generation after 1000 [list truncateAndDraw [incr generation -1]] } } # # Main code: set up the canvas and loop a number of times # canvas .c -width 400 -height 420 -background white pack .c -fill both # # Global data ... # set coords {10 30 390 30 390 410 10 410} set alpha [expr {1.0-sqrt(2.0)/2.0}] #set alpha 0.5 #set alpha 0.7 drawPolygon $coords 10 after 1000 { truncateAndDraw 10
}