#! /usr/bin/perl -w print " #include \"colors.inc\" #include \"textures.inc\" camera { location <0, 0, -10> direction <0, 0, 1> up <0, 1, 0> look_at <0, 0, 0> rotate x*clock*360 } light_source { <0, -9, -9> White }\n\n"; $lt1=0.03; $lt2=0.015; $totall=11; $sx=-5.5; $sy=-4.3; $sz=0; sub cylind { my ($xa, $ya, $za, $xb, $yb, $zb, $lt) = @_; my ($r, $g, $b); $r = 1 - ((($xa-$sx) + ($za-$sz)) / 2) / $totall * 1.5; $g = 1 - ((abs($totall-($xa-$sx)) + ($za-$sz)) / 2) / $totall * 1.5; $b = 1 - ((abs(($sx+$totall*0.5)-$xa) + abs(($sz+$totall*0.866025404)-$za)) / 2) / $totall * 1.5; print "cylinder { <$xa, $ya, $za>, <$xb, $yb, $zb>, $lt", " texture {pigment {rgb <$r, $g, $b>}} finish { ambient 0.5 } }\n"; } sub sierp { my ($x, $y, $z, $l, $n) = @_; my ($x2, $y2, $z2); # point along edge parrallel to x. my ($x3, $y3, $z3); # point along other flat edge. my ($x4, $y4, $z4); # point at top. $x2 = $x + $l; $y2 = $y; $z2 = $z; $x3 = $x + $l * 0.5; $y3 = $y; $z3 = $z + $l * 0.866025404; $x4 = ($x + $x2) / 2; $y4 = $y + ($z3 - $z) * 0.866025404; $z4 = ($z + $z3) / 2; if ($n == 1 || $n == 0) { $lt = ($n == 1) ? $lt1 : $lt2; cylind ($x, $y, $z, $x2, $y2, $z2, $lt); cylind ($x, $y, $z, $x3, $y3, $z3, $lt); cylind ($x2, $y2, $z2, $x3, $y3, $z3, $lt); cylind ($x, $y, $z, $x4, $y4, $z4, $lt); cylind ($x2, $y2, $z2, $x4, $y4, $z4, $lt); cylind ($x3, $y3, $z3, $x4, $y4, $z4, $lt); } if ($n > 0) { sierp ($x, $y, $z, $l / 2, $n - 1); sierp ($x + 0.5 * $l, $y, $z, $l / 2, $n - 1); sierp ($x + 0.5 * ($x3 - $x), $y, $z + 0.5 * ($z3 - $z), $l / 2, $n - 1); sierp ($x + 0.5 * ($x4 - $x), $y + 0.5 * ($y4 - $y), $z + 0.5 * ($z4 - $z), $l / 2, $n - 1); } } sierp ($sx, $sy, $sz, $totall, 5);