外部変形は データのやり取りをテキストファイルで行うので プログラム言語は 自由に選ぶことができます。図形は機能的かつシンプルなため、数多くのユーザーに受け入れられています。
jscriptで多角形の面積を計算する
/* jscriptで多角形の面積を計算する
@cls & echo off
copy jwc_temp.txt myfiles > nul
cscript //nologo //e:jscript %0 < myfiles > jwc_temp.txt
goto:eof
REM #jww
REM #1-%d 点を指示してください
REM #99#%d
REM #e
*/
hp = []
a = 0
sx = 0
sy = 0
ix = 0
iy = 0
f = WScript.StdIn
while (! f.AtEndOfStream) {
F = ($_ = f.ReadLine()).split(/\s+/)
if (/^hp[1-9][0-9]?/i .test($_)) { //hp 指示点
hp[ F[0].match(/[0-9]+/) ] = [ F[1] * 1.0, F[2] * 1.0 ]
}
}
hpn = hp.length
if (hp[1] != hp[hpn-1]) {
hp[hpn] = hp[1]
}
x1 = hp[1][0]; y1 = hp[1][1]
for (i = 2; i < hp.length; i++) {
x2 = hp[i][0]; y2 = hp[i][1]
a += 0.5 * (x1 - x2) * (y1 + y2) //左回りが正
sx += ( (x1 - x2) * (y1 * (2 * x1 + x2) + y2 * (2 * x2 + x1)) / 6.0)
sy += ( (y2 - y1) * (x1 * (2 * y1 + y2) + x2 * (2 * y2 + y1)) / 6.0)
ix += ( (x1 - x2) * (y1 * Math.pow(2 * x1 + x2, 2) + y2 * Math.pow(2 * x2 + x1, 2) + Math.pow(x1 - x2, 2) * (y1 + y2) / 2) / 18.0)
iy += ( (y2 - y1) * (x1 * Math.pow(2 * y1 + y2, 2) + x2 * Math.pow(2 * y2 + y1, 2) + Math.pow(y1 - y2, 2) * (x1 + x2) / 2) / 18.0)
x1 = x2
y1 = y2
}
gx = sx / a
gy = sy / a
ix = Math.abs(ix) - Math.abs(a) * gx * gx
iy = Math.abs(iy) - Math.abs(a) * gy * gy
g = WScript.StdOut
g.WriteLine("h#Area = " + a.toFixed(1) + " Iy = " + ix.toFixed(1) + " Ix = " + iy.toFixed(1))
// WScript.Echo("h#Area = " + a.toFixed(1) + " Iy = " + ix.toFixed(1) + " Ix = " + iy.toFixed(1))