外部変形は データのやり取りをテキストファイルで行うので プログラム言語は 自由に選ぶことができます。図形は機能的かつシンプルなため、数多くのユーザーに受け入れられています。
perlで多角形の面積を計算する
:perlで多角形の面積を計算する
@echo off
perl -x %~f0 jwc_temp.txt
goto:eof
REM #jww
REM #1-%d 点を指示してください
REM #99#%d
REM #e
#!perl -an -i.bak
if (/^hp/) {
$F[0] =~ s/(ln|ci|ch|-)$//g;
$hp[ substr($F[0], 2) ] = [@F[1, 2]];
$hpn++;
}
if (eof) {
if ($hp[1] != $hp[$hpn]) {
$hp[$hpn + 1] = $hp[1];
$hpn++;
}
$ax = 0;
$sx = $sy = 0;
$ix = $iy = 0;
$xmin = $xmax = $ymin = $ymax = 0;
for $i (1..$hpn - 1) {
($x1, $y1) = @{$hp[$i]};
($x2, $y2) = @{$hp[$i+1]};
$ax += $a = ($x1 * $y2 - $x2 * $y1) / 2;
$sx += $a * ($x1 + $x2) / 3;
$sy += $a * ($y1 + $y2) / 3;
$ix += $a * (($x1 + $x2) ** 2 - $x1 * $x2) / 6;
$iy += $a * (($y1 + $y2) ** 2 - $y1 * $y2) / 6;
if ($xmin > $x1) { $xmin = $x1; }
if ($xmax < $x1) { $xmax = $x1; }
if ($ymin > $y1) { $ymin = $y1; }
if ($ymax < $y1) { $ymax = $y1; }
if ($i == $hpn - 1) {
if ($xmin > $x2) { $xmin = $x2; }
if ($xmax < $x2) { $xmax = $x2; }
if ($ymin > $y2) { $ymin = $y2; }
if ($ymax < $y2) { $ymax = $y2; }
}
}
$gx = $sx / $ax; #図心
$gy = $sy / $ax;
$ix -= $ax * $gx * $gx; #図心まわりの2次モーメント(Y軸) Iy-y
$iy -= $ax * $gy * $gy; #図心まわりの2次モーメント(X軸) Ix-x
printf "h#Area = %.01f Iy = %.01f Ix = %.01f\n", $ax, $ix, $iy;
}
__END__