外部変形は データのやり取りをテキストファイルで行うので プログラム言語は 自由に選ぶことができます。図形は機能的かつシンプルなため、数多くのユーザーに受け入れられています。
コマンドプロンプトで2線の交角を計算する
/* コマンドプロンプトで2線の交角を計算する
@cls & echo off
copy jwc_temp.txt myfiles > nul
cscript //nologo //e:jscript %0 < myfiles > jwc_temp.txt
goto:eof
REM #jww
REM #1%dln 線を指示してください
REM #2%dln 線を指示してください
REM #bz
REM #e
*/
function sgn(x){
return x == 0 ? x : ( x > 0 ? 1 : -1 )
}
function lnlength(x){ //線長を返す
return Math.sqrt(Math.pow(x[3]-x[1],2)+Math.pow(x[2]-x[0],2))
}
function lnslope(x){ //線の角度を返す
return Math.atan2(x[3]-x[1],x[2]-x[0])
}
function ln_hpdist(ln, hp){ //線と点の最短距離を返す
y = hp.concat(ln.slice(0,2))
return lnlength(y) * Math.sin( lnslope(ln) - lnslope(y) )
}
function ln_hpsnap(ln, hp){ //線の吸着点を返す
t = ln_hpdist(ln, hp)
d = lnslope(ln)
return [hp[0] + t * Math.sin(d), hp[1] - t * Math.cos(d)]
}
function inters(ln1, ln2){
dx = ln1[2] - ln1[0]
dy = ln1[3] - ln1[1]
if (dx == 0) { m1 = 1e20 } else { m1 = dy / dx }
dx = ln2[2] - ln2[0]
dy = ln2[3] - ln2[1]
if (dx == 0) { m2 = 1e20 } else { m2 = dy / dx }
aa = m1 - m2
if (aa != 0) {
u1 = ln1[1] - m1 * ln1[0]
u2 = ln2[1] - m2 * ln2[0]
return [(u2 - u1) / aa, (m1 * u2 - m2 * u1) / aa]
} else {
return "he処理できません"
}
}
hp =
ln =
with (WScript) {
f = StdIn
while (! f.AtEndOfStream) {
F = ($_ = f.ReadLine()).split(/\s+/)
if (/^hp([12])ln/i .test($_)) {
hp[i = RegExp.$1] = F.slice(1, 3); for (j in hp[i]) { hp[i][j] *= 1.0 }
continue
}
if (/^hhp([12])ln/i .test($_)) { i = RegExp.$1; continue }
if (/^\s+/i.test($_)) { //ln 指示線
ln[i] = F; for (j in ln[i]) { ln[i][j] *= 1.0 }
continue
}
}
pc = inters(ln[1], ln[2])
if (pc.length == 2) {
p1 = ln_hpsnap(ln[1], hp[1])
p2 = ln_hpsnap(ln[2], hp[2])
d1 = lnslope(pc.concat(p1))
d2 = lnslope(pc.concat(p2))
xang = (d2 - d1) * 180 / Math.PI
} else {
xang = 0
}
if (sgn(xang - 180) == 1) { xang -= 360 }
if (sgn(xang + 180) == -1) { xang += 360 }
echo("h#2線の交角 = ∠" + xang.toFixed(3) + "°")
}
外部変形のバッチファイルの構成は以下のとおりです。
/* タイトル
@cls & echo off
コマンドによるスクリプト
goto:eof
*/
jscriptによるスクリプト
=>コマンドによるスクリプトは jscript のコメント文に記述しています。