[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: 1. Take a Pythagorean solid - say a cube with a side of 1. 1. Cut off all corners, by removing a pyramid of side approximately 1/3 (*) (difficult to draw with plain text and I have not written a script yet to show the process) 1. This leaves an isosceles triangle as a new face and three new corners for each corner that was removed. 1. The original squares are now turned into regular octagons with side approximately 1/3. (This polyhedron is called a ''truncated cube'', and you can see a picture of it at [http://www.mathconsult.ch/showroom/unipoly/09.html]. [KPV]) 1. In the next round, cut off all the new corners again - by removing a pyramid of side 1/3 of the current side, so 1/9 of the original. 1. We now end up with a solid that has hexadecagons (16-gons), hexagons and triangles as faces - all regular with a side of approximately 1/9. 1. We can repeat the process ''ad inifinitum". 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 } ---- [Category Mathematics]