Asymptoteの練習 No.0002 「2直線の交点」

お絵描きソフト Asymptote の練習、2回目。毎回テーマを決めて、比較的シンプルな例題で練習していこうと思う。今回は、線分を引くことと、2直線の交点を求めること。ところで、AsymptoteはMetaPostから whatever という便利な変数を引き継がなかったらしい。理由は分からないが。したがって、暗黙裡に連立1次方程式を立てることができない。(明示的に未知数を与えれば連立系を解かせることはできるらしいが、まだやっていない。ま、そのうちにね。) その代わり、普段使いそうなことはライブラリーで定義済みである。ということで、2直線の交点を求めるには、extension という関数を使う。

Asymptoteの練習 No.0002 「2直線の交点」

/*
  Asymptoteの練習 No.0002 「2直線の交点」
  t0002.asy
 */

size(8cm,0);

pair A=(0,0), B=(2,2);
pair C=(0,2), D=(3,0);

pair E=extension(A,B,C,D); // E=直線ABと直線CDの交点

path l1=A--B; // パス l1=直線AB
path l2=C--D;

draw(l1^^l2);           // ^^ はパスを結合する
dot("E",E,1.5N,red);    // ラベルはN(=North)方向、1.5倍の位置。赤(red)で描く。
dot("$A$",A,dir(B--A)); // ラベルの位置はB--Aなるパスの方角(dir)
dot("$B$",B,dir(A--B));
dot("$C$",C,dir(D--C));
dot("$D$",D,dir(C--D));

線分は別々に引いても良いが、パスの結合というのを試してみた。それから、ラベルの位置指定に注目。東西南北などの他に、ラベルを貼る方角が指定できる。それもダイナミックに。例えば dir(B–A) と指定すれば、ベクトルBA の方角にラベルが貼られる。さらに面白いには、方角の前に実数を書くと、その分だけラベルまでの距離が引き伸ばされるのである。なるほどね! :mrgreen: なんとなく実装の方式が想像できるというものだ。というか、極めて論理的かつ柔軟な仕様と言える。素晴らしい!

コメントを残す

メールアドレスが公開されることはありません。