jw_cad 外部変形 - (620) コマンドプロンプトで2線の交角を計算する -

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

 

コマンドプロンプトで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 のコメント文に記述しています。