jw_cad 外部変形 - (743) gawkでレムニスケートを描く -

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

 

gawkレムニスケートを描く

:gawkレムニスケートを描く
@echo off
for /f %%n in ('gawk "/^#!/ { print NR }" %0') do (
  copy jwc_temp.txt myfiles > nul
  more +%%n %0 | gawk -f - myfiles > jwc_temp.txt
)
goto:eof

REM #jww
REM #1-%d 中心点を指示してください
REM #2%d X軸上の点を指示してください
REM #e

#!ここから more +n %0 の n 行目:最初の行は 0 行
function f(p) { return a * cos(p) * sqrt(1 - .5 * sin(p) ^ 2) }
function g(p) { return a / sqrt(2) * sin(p) * cos(p) }
function h(n) {
  $0 = hp[1] FS hp[2]
  d = atan2($4 - $2, $3 - $1) + PI / 2
  si = sin(d)
  co = cos(d)
  a = sqrt(($3 - $1) ^ 2 + ($4 - $2) ^ 2)
  p = 2 * PI / n
  x1 = f(0)
  y1 = g(0)
  xa =  x1 * si + y1 * co + $1
  ya = -x1 * co + y1 * si + $2
  i = 1
  while (i != n + 1) {
    x1 = f(i * p)
    y1 = g(i * p)
    xb =  x1 * si + y1 * co + $1
    yb = -x1 * co + y1 * si + $2
    print xa, ya, xb, yb
    xa = xb
    ya = yb
    i++
  }
}
BEGIN { CONVFMT = OFMT = "%.15g" }
/^hp/ { hp[substr($1, 3, 1)] = $2 FS $3 }
END { PI = atan2(1, 1) * 4; h(100) }