フリーソフト drawg と drawgtops

標準入力から読みこんだ命令に従って 幾何学図形を描画し、
drawg はスクリーンに表示、
drawgtops は PostScript のソースファイルを標準出力に書き出します。

drawg.tgz (2020/10/1 更新)
変更点は drawg で tsleep コマンドを使えるようにしたことです。
tsleep t
(t は自然数)とすれば、t / 100 秒表示を停止します。 これにより、
./kaitensuu 13 5 | ./drawg -s200 &
./dualcurve | ./drawg -s50 -w800 -h800 &
等としたときにうまく表示できるようになりました。
注: なお、 curve コマンドの引数に多項式だけでなく (x+y)^3-(x-y)^2 のような式も渡せますが、
まだ不完全なところがあり、 "x^2(x+y)" または "(x+y)(x^2)" のような式はよいのですが、
"(x+y)x^2" のような式だとうまくいきません。
つまり ), )^2 等のあとに式が続くときは (, ), +, - のいずれかがくるように しないとダメです。

適当なデイレクトリを作成し、drawg.tgz をそこに移動して (例 : mkdir Drawg; cd Drawg; mv ../ダウンロード/drawg.tgz .)
次の2行を実行して下さい。

tar -xvzf drawg.tgz
make

MathLibre では問題なくコンパイルできるようです。
Ubuntu では次の二行を実行して Xlib をインストールするとコンパイルできるように なるようです。

sudo apt update
sudo apt install libX11-dev

最近の Ubuntu ではインストール直後では gcc, make が入っていないようです。
which gcc make として何も表示されないようならば、次の一行を実行して下さい。

sudo apt install gcc make g++

X Window の使える Linux, Free BSD, Solaris 等の UNIX の上であれば 使えると思います。

他のデイストリビューションでうまくコンパイルできない 場合でも、Makefile の一行目の
all : drawg drawgtops ...
の drawg を削除して make すれば、drawg 以外のコマンドはコンパイルでき、 使うことができます。
ここから drawg64.tgz (64ビットOS用) をダウンロードし、
tar -xvzf drawg64.tgz
として解凍される drawg も多分使えると思います。

drawg は UNIX 上でしか使えませんが、
drawgtops は Windows 上でも C のコンパイラーを持っていて
コンパイルすることができれば 使えるはずです。


下図のような代数曲線を描くことができます。

使い方は cat sexticwith4cusps0.dat 等としてファイルの中を見てから、
./drawg -s200 ‹sexticwith4cusps0.dat &
としてみればわかると思います。

使用例
./Simson 0.5 2. 3.8 | ./drawg -s200 &   (三つの引数で頂点の位置を指定)
./Carnot 0.5 1.5 3.4 60 | ./drawg -s150 &   (4番目の引数で交わる角度を指定)
./dualcurve |  ./drawg -s50 -w800 -h700 &
./algsurf1 |  ./drawg -s200 &
./drawg < pascal3.dat &
./drawgtops < pascal3.dat >pascal3.ps

drawg と drawgtops の両方で有効なコマンド一覧
コマンド 機能
color r g b r g b (0 から 3 までの整数) で描画の色を指定する
gray f 描画の色を f(0 から 1 までの小数) で指定された灰色にする
line a b c ax + by + c = 0 で表される直線を描く
connect x1 y1 x2 y2 ... (x1, y1), (x2, y2), ... をつなぐ折れ線を描く
circle x y r 中心 (x, y), 半径 r の円を描く
circle x y r s1 s2 中心 (x, y), 半径 r で (s1/64)°から反時計回りに (s2/64)°の円弧を描く
curve P(x,y) P(x, y) = 0 で表される代数曲線を描く(P(x, y) は x, y の 24次以下の多項式)
polygon x1 y1 x2 y2 ... (x1, y1), (x2, y2), ... を頂点とする多角形を塗りつぶす
disk x y r 中心 (x, y), 半径 r の円盤を塗りつぶす

drawg だけで有効なコマンド一覧
コマンド 機能
sleep t t 秒表示を停止する
tsleep t t/100 秒表示を停止する
pause キーが押されるまで表示を停止する
active n 以後のコマンドをn番目の仮想画面に描画する(n は 0, 1, 2 のいずれか、初期設定は 0)
display n n番目の仮想画面を表示する(n は 0, 1, 2 のいずれか、初期設定は 0)
copy n1 n2 n1番目の仮想画面を n2番目の仮想画面にコピーする (n1, n2 は 0, 1, 2 のいずれか)
clear active になっている仮想画面をクリアーする

drawgtops だけで有効なコマンド一覧
コマンド 機能
lwidth w 描画する線の太さを w にする(初期設定は 1)
cwidth w curve コマンドで描画する曲線の太さを w にする(初期設定は 0.5)
clip x1 y1 x2 y2 ... 以後の描画を (x1, y1), (x2, y2), ... を頂点とする多角形の内部に制限する
rgb r g b r g b(0 から 1 までの小数) で描画の色を指定する

drawg, drawgtops起動時のオプション
-wn 横幅を n にする (n は自然数)
-hn 縦幅を n にする (n は自然数)
-xn 右方向に n ずらす (n は整数)
-yn 上方向に n ずらす (n は整数)
-sn n/10 倍に拡大 (n は自然数)

tsleep, active, display, copy コマンドを使えば、 アニメーションが作れます。 実際に、どう使うかは
./dualcurve
として、画面に表示されるものを見ればわかると思います。