4.複素数平面上の図形
複素数平面上の図形について、線分の長さや角を複素数で計算することを考えます。
まず、
・複素数の和は点の平行移動
・複素数の積は回転と拡大縮小
であったことを思い出してください。複素数平面上で図形を扱うとき、この2つのことが大きな役割を果たします。
2点間の距離:線分の長さ
複素数平面上に点A,Bを端点とする線分ABがあり、それぞれ複素数 α , β が対応しているとします。これを A(α),B(β)と表します。
点Aを原点に平行移動するには、αを引いて0にしますので、この平行移動によって点BはB'(β−α)に移ります。
OB'の長さはBに対応する複素数の絶対値|βーα|です。したがって、線分ABの長さは AB=|β−α|となります。
もちろん、AB=|αーβ|としてもかまいません。
2直線のなす角
次に、複素数平面上に点A(α) , B(β) , C(γ) があるとします。このとき、角ABCを考えます。
今度はBを原点に平行移動します。
このことを、Cinderellaで確かめてみましょう。
まず、線分を2つ描いて角を作ります。「角度を測る」ツールでこの角を表示します。
つぎに、CindyScriptを書きます。
残念ながら、複素数の偏角を求める関数はCindyScriptには用意されていないので、まずこれを作ります。
Initializationスロットで定義をします。
arg(z):=arctan2(gauss(z));
ここで、arctan2 という関数は、ベクトルがx軸となす角を求めるものです。gauss(z) によって、複素数zは複素数平面上の点の座標に変換されます。こがベクトルで表されているので、そのまま角が出るわけです。
1行だけなら、わざわざ関数として定義しなくてもよさそうですが、こうすることにより、スクリプトの可読性(読みやすさ)が高まるのです。
それでは、作図した3点A,B,Cについて、なす角を上の式によって計算して表示してみましょう。図形として測った角はすでに画面上に表示されていますので、こちらは print 関数で、CindyScriptエディタの右下のコンソールに表示します。
AとCの位置関係が逆になると、角は負になります。動かすモードで、点Aを移動してみましょう。
2直線のなす角が偏角で表せるという原理がわかれば、4点が与えられたとき、直線ABと直線CDのなす角についても、同様の式が成り立つことがわかります。
ことから、次のようなことが言えます。
正三角形を作る
さて、ここで使った、「原点への平行移動」という方法は、複素数平面上で図形を扱うときにかなり有力な方法となります。
たとえば、線分ABを一つの辺とする正三角形のもうひとつの頂点Cの位置を求めることを考えてみましょう。
まず、辺ABを、点Aが原点にくるように平行移動します。このときBはB’に移動したとします。
すると、正三角形となる点C’は、Bを原点周りに60°または−60°回転した点となります。原点からの距離は変わらないので、これは絶対値1、偏角60°または−60°の複素数をかければよいことになります。
これをCinderellaでやってみましょう。
まず、画面下のツールバーの磁石アイコン(グリッドにスナップする)をクリックして、座標軸と方眼を表示します。
「点を加えるツール」を用いて、適当なところでクリックして点を3つ取ります。点の名前はA,B,Cとなるでしょう。また、線分を加えるツールで、それぞれの点を結んで三角形を作ります。今の時点では正三角形でなくてかまいません。
次に、スクリプトメニューからCindyScriptを選び、左側の Draw アイコン(Draw スロット と呼んでいます)をクリックして、右側の広いエリアをクリックし、次のスクリプトを書き込みます。
z1=complex(A);
z2=complex(B);
zz2=z2-z1;
zz3=zz2*(cos(60°)+i*sin(60°));
draw([0,0],gauss(zz2));
draw([0,0],gauss(zz3));
draw(gauss(zz2),gauss(zz3));
C.xy=gauss(zz3+z1);
1行目、2行目で、点A,Bを表す複素数をそれぞれz1,z2とします。
3行目、zz2は点B'を表す複素数です。平行移動しました。
4行目、zz3はzz2を60°回転した点を表す複素数です。
5,6,7行目で、原点,zz2,zz3を結んで三角形を描きます。
8行目で、点Cの位置をzz3+z1 つまり、zz3を平行移動した点にします。
結局、点Cを表す複素数は、A(z1) , B(z2) とすると
(z2−z1) ×(cos(60°)+i sin(60°))+z1
で計算できたことになります。
右上の歯車アイコンをクリックするとこのスクリプトが実行されます。Shift+Enterでも実行できます。
動かすモードにして、点A,Bを動かしてみましょう。
分点
複素数平面上の点は、直交座標系あるいはベクトルと同様に扱うことができますので、分点についても同じ式が適用できます。