Kanako's Programming
正N角形を描くプログラム(perlのソース)
#!/usr/bin/perl
use Tk;
use strict;
use Math::Trig;
use Image::Magick;
##何角形かを記入(既存:7);
my $number = 7;
&main_n_polygon($number);
sub main_n_polygon {
my ($number) = @_;
my $top = MainWindow->new();
##ウィンドウを500x500にしている;
my $canvas = $top->Canvas(width=>500,height=>500,-background=>'white');
$canvas->pack();
&n_polygon(my $i=-1,my $angle=0,$top,$canvas,$number);
}
sub n_polygon {
my ($i,$angle,$top,$canvas,$number) = @_;
my $callback;
##外接する円の半径を記入(既存:100);
my $r = 100;
my $maxnum = $number+1;
$callback = sub {
&n_polygon_canvas(++$i,$number,$canvas,$r,$angle);
if ($i < $maxnum) {
$top->after(200,$callback);
}else {
$canvas->Button(-command=>&exit);
}
};
$callback->();
MainLoop();
}
sub n_polygon_canvas {
my ($i,$number,$canvas,$r,$angle) = @_;
(my $pointx,my $pointy) = &GetPoint($i*(360/$number),$r);
$angle = ($i+1)*360/$number;
(my $pointxx,my $pointyy) = &GetPoint($angle,$r);
$canvas->create('line',$pointx,$pointy,$pointxx,$pointyy,-fill=>'black',-width=>3.0);
}
sub GetPoint {
my ($angle,$r)=@_;
my $pai = 3.14159;
$angle += 90;
my $sct = $pai*$angle/180;
##外接している円の中心を(100,100)としている;
my $q = 100 + $r * cos($sct);
my $t = 100 - $r * sin($sct);
return (int $q, int $t);
}
BACK(Kanako Suto's Pageへ)
このページへの質問・コメントを歓迎致します。