| 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;
}
}