#!/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
|