jw_cad 外部変形 - (906) jscriptで多角形の面積を計算する -

外部変形は データのやり取りをテキストファイルで行うので プログラム言語は 自由に選ぶことができます。図形は機能的かつシンプルなため、数多くのユーザーに受け入れられています。

 

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))