正三角形・正方形
複素平面上での正三角形は、問題図としてよく使います。
Cinderellaの作図ツールで正三角形を描くこともできますが、複素数を使えば簡単にできます。
線分ABを1辺とする正三角形を描きます。ABに対してどちらに作るかは、角を正にとるか負にとるかで決まります。
与えられた線分(2点を表す複素数)に対してその都度計算式を書いてもよいのですが、その手続きを関数にしてしまえばあとからが楽でしょう。引数を2つの複素数と、回転角にして、3点を取って結ぶ関数です。
triangle(z1,z2,th):=(
A.xy=gauss(z1);
B.xy=gauss(z2);
C.xy=gauss((z2-z1)*(cos(th)+i*sin(th))+z1);
);
これを使って、A(-1-i) と B(1+2i)の場合について描いてみましょう。
三角形ABCは、作図ツールであらかじめ適当に書いておきます。正三角形でなくてかまいません。
triangle(-1-i,1+2*i,pi/3);
Listplot([A,B,C,A]);
Letter([A,"se","A($-1-i$)",B,"e","B($1+2i$)",C,"w2","C"]);
(2) 正方形
全く同じ要領で正方形ができます。
そこで、これを使って、三平方の定理の図を描いてみましょう。
直角三角形ABCは、方眼を使って適当に書くことにします。
3つの正方形を描くので、三角形のときのように点をA..,B,Cに限定するのはあまり好ましくないでしょう。
そこで、引数は2つの複素数と角で同じですが、点の座標を設定するのではなくdrawpoly()を使って直接正方形を描くことにします。
square(z1,z2,th):=(
p1=gauss(z1);
p2=gauss(z2);
p3=gauss((z1-z2)*(cos(-th)+i*sin(-th))+z2);
p4=gauss((z2-z1)*(cos(th)+i*sin(th))+z1);
drawpoly([p1,p2,p3,p4]);
);
三角形ABCに対して、次のようにして使えば三平方の定理の図が描けます。
square(complex(A),complex(B),-pi/2);
square(complex(B),complex(C),-pi/2);
square(complex(A),complex(C),pi/2);
次に、これをKETCindyで書き出すのですが、点を作っていませんので、そのまま座標のリストを書き出すことにします。
square()関数の中の p1,p2,p3,p4は局所変数ではありませんので関数の外でも使えます。
したがって、関数を呼び出したら、そのまま[p1,p2,p3,p4,p1]をListplot()で書き出します。
Addax(0);
square(complex(A),complex(B),-pi/2);
Listplot("1",[p1,p2,p3,p4,p1]);
square(complex(B),complex(C),-pi/2);
Listplot("2",[p1,p2,p3,p4,p1]);
square(complex(A),complex(C),pi/2);
Listplot("3",[p1,p2,p3,p4,p1]);
Letter([A,"w2","A",B,"se2","B",C,"n2e","C"]);
< 戻る >