外部変形は データのやり取りをテキストファイルで行うので プログラム言語は 自由に選ぶことができます。図形は機能的かつシンプルなため、数多くのユーザーに受け入れられています。
/* コマンドプロンプトでレムニスケートを描く
@cls & echo off
for /f "tokens=1*" %%i in (jwc_temp.txt) do (
if %%i == hp1- set p1=%%j
if %%i == hp2 set p2=%%j
)
cscript //e:jscript %0 "%p1%" "%p2%" > jwc_temp.txt
goto:eof
REM #jww
REM #1-%d 中心点を指示してください
REM #2%d X軸上の点を指示してください
REM #e
*/
function f(p) {
with (Math) { return a * cos(p) * sqrt(1 - 0.5 * pow(sin(p), 2)) }
}
function g(p) {
with (Math) { return a / sqrt(2) * sin(p) * cos(p) }
}
n = 100
with (WScript) {
p1 = arguments(0).split(/\s/)
p2 = arguments(1).split(/\s/)
x1 = p1[0] * 1.0; y1 = p1[1] * 1.0
x2 = p2[0] * 1.0; y2 = p2[1] * 1.0
d = Math.atan2(y2 - y1, x2 - x1) + Math.PI / 2
si = Math.sin(d)
co = Math.cos(d)
a = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2))
p = 2 * Math.PI / n
x = f(0)
y = g(0)
xa = x * si + y * co + x1
ya = -x * co + y * si + y1
i = 1
echo( "pl" ) //cscript
// StdOut.WriteLine( "pl" ) //wscript
while (i != n + 1) {
x = f(i * p)
y = g(i * p)
xb = x * si + y * co + x1
yb = -x * co + y * si + y1
echo( [xa, ya, xb, yb].join(" ") ) //cscript
// StdOut.WriteLine( [xa, ya, xb, yb].join(" ") ) //wscript
xa = xb
ya = yb
i++
}
echo( "#" ) //cscript
// StdOut.WriteLine( "#" ) //wscript
}
外部変形のバッチファイルの構成は以下のとおりです。
/* タイトル
@cls & echo off
コマンドによるスクリプト
goto:eof
*/
jscriptによるスクリプト
=>コマンドによるスクリプトは jscript のコメント文に記述しています。