| Top Page | プログラミング | Perl 目次 | 索引 |
# gen_forest.pl 仮想の毎木調査データを作る $x_max = 20; # X座標の最大値 $y_max = 20; # Y座標の最大値 $tall_prob = 0.3; # 高木層メンバーである確率 $mean_tall = 12; # その場合の平均樹高 $var_tall = 4; # 変異幅 ($mean_tall +/- $var_tall) $mean_short = 3; # 高木層に届いてないものの平均樹高 $var_short = 2; # 変異幅 ($mean_short +/- $var_short) # 種名リスト(同じものが複数あると,その分,その種の相対頻度が高くなる) @sp_list = ("クヌギ", "クヌギ", "クヌギ", "コナラ", "コナラ", "コナラ", "コナラ", "エゴノキ", "エゴノキ", "シラカシ", "シラカシ", "アラカシ", "アカシデ", "クリ",); print "species X Y height dbh\n"; # ヘッダ行 for ($ix = 0; $ix < $x_max; ++$ix) { # 1 メートル区画ごとに1本の木 for ($iy = 0; $iy < $y_max; ++$iy) { $x = rand() + $ix; # 位置は1メートル区画内でランダムに. $y = rand() + $iy; # 種を選ぶ. $species = $sp_list[int(@sp_list * rand())]; # @sp_listは要素数として評価 if (rand() < $tall_prob) { # 高木 $height = $mean_tall + $var_tall * (rand() - 0.5); } else { # 高木じゃない $height = $mean_short + $var_short * (rand() - 0.5); } $dbh = 0.8 * ($height ** 1.25); # 樹高に応じて太さ決める(適当) printf "%-16s%.2f\t%.2f\t%.1f\t%.1f\n", $species, $x, $y, $height, $dbh; } }