#!/usr/bin/perl use Image::Magick; #the perl interface to the ImageMagic software use Math::Trig; # The points of the polygon. Arbitrary. ($x0,$y0) = (0,0); ($x1,$y1) = (10,0); ($x2,$y2) = (20,5); ($x3,$y3) = (5,15); # length of lower side divided by length of upper side: $factor = sqrt((($x2-$x3)**2 + ($y2-$y3)**2) / (($x1-$x0)**2 + ($y1-$y0)**2)); # angle between upper side and lower side, in radians: $angle = atan(($y2-$y3)/($x2-$x3)) - atan(($y1-$y0)/($x1-$x0)); # Create an empty white image: $image=Image::Magick->new(size=>'400x350'); $image->Read('xc:white'); $polygon_points = "$x0,$y0 $x1,$y1 $x2,$y2 $x3,$y3 $x0,$y0"; # Create two sample polygons $image->Draw(primitive=>'polygon', points=>$polygon_points, stroke=>red, translate=>"30,30"); $image->Draw(primitive=>'polygon', points=>$polygon_points, scale=>"$factor,$factor", stroke=>red, translate=>"70,30"); # Now place 5 of them side by side, appropriately stretched and turned $stretch = 1; $turn = 0; $posX = 120; $posY = 250; for (1..5) { $image->Draw(primitive=>'polygon', points=>$polygon_points, scale=>"$stretch,$stretch", stroke=>red, rotate=>$turn * 180/pi, translate=>"$posX,$posY"); $posX = $posX + $stretch * ( cos($turn) * ($x3-$x0) - sin($turn) * ($y3-$y0)); $posY = $posY + $stretch * ( sin($turn) * ($x3-$x0) + cos($turn) * ($y3-$y0)); $turn = $turn + $angle; $stretch = $stretch * $factor; } # Add some text $image->Set(font=>'-*-helvetica-medium-r-*-*-12-*-*-*-*-*-iso8859-*'); #this only works on the X window system $image->Annotate(text=>"polygonal subunits", x=>30, y=>75, fill=>black); $image->Annotate(text=>"approximate logarithmic spiral", x=>120, y=>310, fill=>black); # Write out the image in the png format $image->Write('polygon_spiral.png');
Image links
There are no pages that link to this image.
Search Encyclopedia
|
Featured Article
|