FC2ブログ

# フラクタル図形 シェルピンスキーのギャスケット Sierpinski Gasket
# 引数 段 割る ($n, $divide)
# 戻り値 フラクタル図形 シェルピンスキーのギャスケット (@SierpinskiGasket)
sub SIERPINSKIGASKET{
my ($n, $divide) = @_;
my @SierpinskiGasket = ();
my @PascalsTriangle = ();
my $N = int($n);
my $Divide = int($divide);
my $Start = 0;
my $End = 0;
my $Front = 0;
my $Back = 0;
my $Limit = 0;
my $Blank = 0;
my $Remainder = 0;

# 段、分割数の確認
if(($N < 0) || ($Divide < 0)){
return 0;
}

# 計算
for(my $i = 0; $i <= $N; $i++){
# 両端
$PascalsTriangle[$i][0] = $PascalsTriangle[$i][$i] = 1;
$Front = $Back = 1;
# 中心まで
$Limit = $i / 2;
# 空白
$Blank = " " x ($N - $i);

for(my $j = 1; $j <= $Limit; $j++){
# 配列の位置
$Start = $j;
$End = $i - $j;
# パスカルの三角形 Pascal's Triangle
$PascalsTriangle[$i][$Start] = $PascalsTriangle[$i][$End] = $PascalsTriangle[$i - 1][$Start] + $PascalsTriangle[$i - 1][$End];
# 余り
$Remainder = $PascalsTriangle[$i][$Start] % $Divide;

if($Start != $End){
# 終端が等しくないなら
$Front = $Front." ".$Remainder;
$Back = $Remainder." ".$Back;
}else {
$Front = $Front." ".$Remainder;
}
}

if($i != 0){
# フラクタル図形 シェルピンスキーのギャスケット Sierpinski Gasket
$SierpinskiGasket[$i] = $Blank.$Front." ".$Back;
}else {
# フラクタル図形 シェルピンスキーのギャスケット Sierpinski Gasket
$SierpinskiGasket[$i] = $Blank.$Front;
}
}

return @SierpinskiGasket;
}


二項係数から
http://blog-imgs-36.fc2.com/a/m/a/amamiyaprog/SierpinskiGasket1.txt

参考URL
シェルピンスキーのギャスケット - Wikipedia
perlでパスカルの三角形 (Pascal's Triangle: PASCALSTRIANGLE): perl: 一寸先は闇
オンライン コンパイラ/インタプリタ
テクニカル分析
プロフィール

Author:雨宮
Firefoxを使用しているので気づかなかったけど、IE6でソースコードを上手くコピーできない

5/3
携帯用ならIE6でもソースコードをコピーできる
携帯用

検索フォーム


あわせて読みたいブログパーツ
一寸先は闇 RSS