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へ)
このページへの質問・コメントを歓迎致します。