The following will plot the surface of a given function from . (This is a bit more complicated, so I don't want to include as much error checking for the inputs.)
The graphics here will be the function
proc g {x y} {expr sqrt(abs($x*$y))} proc draw_surface { f } { set minx -5 set maxx 5 set miny -5 set maxy 5 set step 0.5 # first, get the data (this isn't the most data efficient way of # doing things) for {set i $minx} {$i <= $maxx} {set i [expr $i + $step]} { for {set j $miny} {$j <= $maxy} {set j [expr $j + $step]} { set data($i,$j) [$f $i $j] } } # make another pass through to plot it for {set i $minx} {$i <= [expr $maxx - $step]} {set i [expr $i + $step]} { for {set j $miny} {$j <= [expr $maxy - $step]} {set j [expr $j + $step]} { # get the next two corners set i2 [expr $i + $step] set j2 [expr $j + $step] # find the middle set imiddle [expr $i + $step/2] set jmiddle [expr $j + $step/2] set kmiddle [expr ($data($i,$j) + $data($i2,$j) + $data($i2,$j2) \ + $data($i,$j2)) / 4.0] # use a cool coloring scheme (this depends on the graph having a min # value of 0 and max of 5, or at least less than about 30) draw color [expr 17 + [int [expr 200 * $kmiddle]] % 1024] # make 4 triangles draw triangle "$i $j $data($i,$j)" "$imiddle $jmiddle $kmiddle" \ "$i2 $j $data($i2,$j)" draw triangle "$i $j $data($i,$j)" "$i $j2 $data($i,$j2)" \ "$imiddle $jmiddle $kmiddle" draw triangle "$i2 $j2 $data($i2,$j2)" "$i2 $j $data($i2,$j)" \ "$imiddle $jmiddle $kmiddle" draw triangle "$i2 $j2 $data($i2,$j2)" "$imiddle $jmiddle $kmiddle" \ "$i $j2 $data($i,$j2)" } } }And graph it with the command:
draw_surface gLooks like it should be on a quilt, doesn't it?