フリーソフト 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
として、画面に表示されるものを見ればわかると思います。