外部変形は データのやり取りをテキストファイルで行うので プログラム言語は 自由に選ぶことができます。図形は機能的かつシンプルなため、数多くのユーザーに受け入れられています。
なでしこで2線の交角を計算する
/* なでしこで2線の交角を計算する
@cls & echo off
path C:\nadesiko_1_589;%path%
copy jwc_temp.txt myfiles > nul
cnako %0 > jwc_temp.txt
goto:eof
REM #jww
REM #1%dln 線を指示してください。
REM #2%dln 線を指示してください。
REM #bz
REM #e
*/
●ATAN2(y, x)
もし(x = 0)なら(PI / 2 * SIGN(y))を戻す
aとは実数 = ARCTAN(y / x)
もし(x < 0)なら
もし(y < 0)なら
a = a - PI
違えば
a = a + PI
aを戻す
●ABS(x)
(x * SIGN(x))を戻す
●DEG(x)
xを度変換して戻す
●RAD(x)
xをラジアン変換して戻す
●SPLIT(s)
sを「 」で区切ったものを戻す
●INTERS(線1, 線2)
F1とは配列; dx1とは実数; dy1とは実数; m1とは実数; u1とは実数
F2とは配列; dx2とは実数; dy2とは実数; m2とは実数; u2とは実数
aaとは実数
F1 = 線1を「 」で区切ったもの
dx1 = F1[2] - F1[0]
dy1 = F1[3] - F1[1]
もし(dx1 = 0)なら
m1 = 10 ^ 20
違えば
m1 = dy1 / dx1
F2 = 線2を「 」で区切ったもの
dx2 = F2[2] - F2[0]
dy2 = F2[3] - F2[1]
もし(dx2 = 0)なら
m2 = 10 ^ 20
違えば
m2 = dy2 / dx2
aa = m1 - m2
もし(ABS(aa) < 1e-10)なら(aa = 0)
もし(aa <> 0)なら
u1 = F1[1] - m1 * F1[0]
u2 = F2[1] - m2 * F2[0]
「{(u2 - u1) / aa} {(m1 * u2 - m2 * u1) / aa}」を戻す
違えば
"he処理できません"を表示
終了
●LN_HPSNAP(線, 点)
Fとは配列 = SPLIT(点)
tとは実数 = LN_HPDIST(線, 点)
dとは実数 = LNSLOPE(線)
「{F[0] + t * SIN(d)} {F[1] - t * COS(d)}」を戻す
●LN_HPDIST(線, 点)
Fとは配列 = SPLIT(線)
Xとは文字列 = "{点} {F[0]} {F[1]}"
(LNLENGTH(X) * SIN(LNSLOPE(線) - LNSLOPE(X)))を戻す
●LNLENGTH(線)
Fとは配列 = SPLIT(線)
HYPOT(F[2] - F[0], F[3] - F[1])を戻す
●LNSLOPE(線)
Fとは配列 = SPLIT(線)
ATAN2(F[3] - F[1], F[2] - F[0])を戻す
「myfiles」を毎行読んで反復
もし、(対象を「^hq」で正規表現マッチ)ならば
「bz」を表示
続ける
もし、(対象を「^hp(\d+)ln-?\s+(\S+ \S+)」で正規表現マッチ)ならば
hp[抽出文字列[0]] = 抽出文字列[1]
続ける
もし、(対象を「^hhp(\d+)ln」で正規表現マッチ)ならば
i = 抽出文字列[0]
続ける
もし、(対象を「^\s+(\S+ \S+ \S+ \S+)」で正規表現マッチ)ならば
ln[i] = 抽出文字列[0]
pc = INTERS(ln[1], ln[2])
p1 = LN_HPSNAP(ln[1], hp[1])
p2 = LN_HPSNAP(ln[2], hp[2])
d1 = DEG(LNSLOPE("{pc} {p1}"))
d2 = DEG(LNSLOPE("{pc} {p2}"))
xang = d2 - d1
もし(SIGN(xang - 180) = 1)なら(xang = xang - 360)
もし(SIGN(xang + 180) =-1)なら(xang = xang + 360)
xang = ROUND(xang*1000)/1000
d1 = ROUND(d1*1000)/1000
d2 = ROUND(d2*1000)/1000
「h#∠{xang}゚ {d1} {d2}」を表示
角度は左回りを正としています。