−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
   応用数学II                         1995.12.21/22
   18.実践(4)−幾何学IIの三回目              飯島

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

18.1 はじめに

 早いもので、もう年内は今日で最後。やり残したこともいろいろありますが、できるこ としかできませんからね。あれもこれもと欲張っても結局虻蜂取らずとなるので、焦点を 絞って、今日も頑張っていきましょう。  焦点は今日も「幾何学II」です。まずは先週のまとめから始めましょう。

18.2 変換行列のそれぞれの意味の確認

 前回,射影変換の表現行列のそれぞれの値を変化させてみることを行いました。授業の 中でも,ある程度触れたことではありますが,もう一度確認しておきましょう。                +−a11 a12 a13−+              A=| a21 a22 a23 |                +−a31 a32 a33−+ において,a31=a32=0の場合,つまり,                +−−−−−−+−−+              +−|a11 a12 |a13|−+            A=| |a21 a22 |a23| |              | +−−−−−−+−−+ |              +− 0  0  |a33|−+                       +−−+ という形をしているときには,上の3つのブロックは,それぞれ意味が違います。また, この場合には,Aが表すのは,射影変換の部分集合でもあるアフィン変換の場合です。  上の行列の「0」の部分が「0」でなくなると,アフィン変換ではなくなります。つま り,              普通の点が「無限遠点」に移る              「無限遠点」が普通の点に移る ことが起こります。たとえば,  +−2 1 0−+       +−2 1 0−++−x−+ +−2x+y−+  | 1 2 0 | の場合には,| 1 2 0 || y |=| x+2y |  +−1 0 1−+       +−1 0 1−++−1−+ +−x+1 −+ なので,x=−1ならば,無限遠点に移ることになります。先週のプログラムであれば, 単位円の「一点」が無限遠点に移るので,「放物線」に移ることになります。  らもう少し一般的に考えると,    * * *          * * *  x    ****    * * *   の場合には, * * *  y  = ****    a b 1          a b 1  1    ax+by+1 なので,直線 ax+by+1=0が無限遠直線に移ります。  ・単位円が楕円 に移るということは,どういう場合でしょう。  ・単位円が双曲線に移るということは,どういう場合でしょう。  ・単位円が放物線に移るということは,どういう場合でしょう。  それぞれ,自分なりに結論をまとめてみてください。

18.3 四角形や円の内部はどう移るか

 これまでは、円周や四角形の辺がどう移るかを調べてきましたが、その内部はどう移っ ているのでしょう。それを調べてみてください。  ヒント:  x=RND  y=RND だけで、四角形内の点を取ることができる。  同様にして、円の内部はどう移るのかを調べてみよう。  ヒント:  radius = RND  t = RND * 2 * pi  x = radius * COS(t)  y = radius * SIN(t) また、これだけでは見にくい場合には、境界を明示するのも一つの手かもしれません。 +−−−−−−−−−−−−−−−−−−+−−−−−−−−−−−−−−−−−−+ |                  |                  | |                  |                  | |                  |                  | |                  |                  | |                  |                  | |                  |                  | |                  |                  | +−−−−−−−−−−−−−−−−−−+−−−−−−−−−−−−−−−−−−+              スケッチ( 四角形について) +−−−−−−−−−−−−−−−−−−+−−−−−−−−−−−−−−−−−−+ |                  |                  | |                  |                  | |                  |                  | |                  |                  | |                  |                  | |                  |                  | |                  |                  | +−−−−−−−−−−−−−−−−−−+−−−−−−−−−−−−−−−−−−+         円→楕円               円→双曲線 +−−−−−−−−−−−−−−−−−−+−−−−−−−−−−−−−−−−−−+ |                  |                  | |                  |                  | |                  |                  | |                  |                  | |                  |                  | |                  |                  | |                  |                  | +−−−−−−−−−−−−−−−−−−+−−−−−−−−−−−−−−−−−−+         円→放物線              その他

18.4 Pascal の定理を変換してみる

 テキストのp.**に******の定理、つまり、次の定理があります。 ******の定理: 楕円上にa1,a2,a3,a4,a5,a6 の6 点がある。        a1とa4,a5 :a2 とa4,a6 : a3とa5,a6        を結ぶ。それらの交点は共線である。        (なお、「楕円」は他の二次曲線に置き換えられる)  これを調べるための方法として、Euclid幾何的に、いろいろな二次曲線を作図し、その 上に点をとり、そしてそれらを結ぶという方法もありますが、ここでは、変換しても保た れる性質という点に注目してみましょう。つまり、 (1) もっとも作図しやすい場合で作図する。(単位円上に6点を取り結ぶ。) (2) それを射影変換によって変換し、性質が保たれるかどうかを調べる。 たとえば、つぎのようなsub を考えてみましょう。 SUB DrawObject2 (a())   DIM C AS PrPoint2   radius = 3   CALL SetPrPointXY(C, 0, 0)   CALL DrawCircle(a(), C, radius)   DIM P(6) AS PrPoint2   FOR i = 1 TO 6     t = 2 * pi * i / 6     CALL SetPrPointXY(P(i), COS(t) * radius, SIN(t) * radius)   NEXT   CALL DrawSegment(a(), P(1), P(4))   CALL DrawSegment(a(), P(1), P(5))   CALL DrawSegment(a(), P(2), P(4))   CALL DrawSegment(a(), P(2), P(6))   CALL DrawSegment(a(), P(3), P(5))   CALL DrawSegment(a(), P(3), P(6)) END SUB  意外にうまくいかないこともありますね。それはどういうところでしょう。  つまり、変換のしたで、保存されることと保存されないことがあるわけですね。  また、どこにどの点が移っているのかが分からず不便です。これらの点を部分的に解消 するものとして、次のものを提示しておきます。 SUB DrawObject2 (a())   DIM C AS PrPoint2   radius = 3   CALL SetPrPointXY(C, 0, 0)   CALL DrawCircle(a(), C, radius)   DIM P(6) AS PrPoint2   FOR i = 1 TO 6     t = 2 * pi * i / 6     CALL SetPrPointXY(P(i), COS(t) * radius, SIN(t) * radius)     CALL PrPointName(a(), P(i), STR$(i))   NEXT   FOR i = 1 TO 6    FOR j = i + 1 TO 6     CALL DrawSegment(a(), P(i), P(j))    NEXT   NEXT END SUB SUB PrPointName (a(), P AS PrPoint2, s$)   DIM Q AS PrPoint2   CALL TransForm(a(), P, Q)   IF ABS(Q.z) <= .001 THEN EXIT SUB   x = Q.x / Q.z   y = Q.y / Q.z   IF ABS(x) < MaxOfX AND ABS(y) < MaxOfY THEN     Cx = PMAP(x, 0) \ 8     Cy = PMAP(y, 1) \ 16     LOCATE Cy, Cx     PRINT s$   END IF END SUB 注:このPrPointName というsub は結構テクニックを使っているんですが分かりますか。 PMAPという関数は、座標の変換公式で、論理座標(WINDOW で設定したもの) と物理座標( ピクセルそのものによる番地[ (0,0)-(639,479)]) との変換を行います。それをさらに文 字の位置に変換しているのがこの式です。                   ・・・  この場合でも、たとえば双曲線の両側にうまく 3つずつの点が分かれてくれるとは限り ません。このように、     問題の解決が少し進展したかと思うと、また別の問題点が見えてくる ということは、問題解決の中ではよくあることです。むしろ、           問題というのはいつも見かける問題のように         「正解」が決まっているものではないのが普通です。                   そして                 問題の価値は、          それを出発点として、何が分かるようになったか                   で決まる と考えると、           この問題から何を感じるか・何を見つけるか というところに、大きな意味があり、またそこでセンスがものを言うというとことを理解 してください。