<章末問題> ・章末問題ができなくても、提出して構いませんか?? ↓ 別に構わないが,考察を書くことが重要.途中までであってもプログラムを示し, 何を考えて書いたのか,どこがうまくいかず,その理由がどのあたりにあると 考えているのかなどを書いてください.もちろん,なるべくならば頑張って完成して もらいたいですが… ・難しくなってきているため章末問題に関してはもっとプログラム完成のためのヒントが欲しい。 ↓ 授業時間中にできるだけ説明しているつもりだが,理解できない部分は積極的に質問してください. ・今回の章末課題はこれまでのものとは比較にならない難度だったと思う。 ↓ 再帰呼出に関する理解の差が大きく影響していると思う. ただし,Lシステムの課題以外は再帰を意識しなくても図形の性質だけ理解できれば回答できるはずなのだが… <改訂したプログラムの扱い> ・前週課題等でプログラムに手直し(訂正)の余地があることを指摘された場合, もしも直したプログラムがあればここに一緒に記述した方が良いでしょうか? ↓ 書かれているものは一応目を通すつもりではいます. <未完の課題> ・前回も今回の課題も答えが分からないので復習のしようがなく、また次にその習った結果を生かすこともできないので、できることならC-Fiveの教材のところなどに、答えをおいといてほしいです。 ・今までの課題の解答をどこかしらにアップしていただけると参考になります。今まであまり理解できなかったプログラムを復習したいです。 ↓ プログラムは走るに越したことはないが,プログラムを走らせることが目的ではなく,それまでの過程が重要です. プログラムを走らせれば良いのであれば,プログラムを丸写しするか,さらに言えばコピーすれば良いでしょう. プログラムを走らせるまでに過程で,何を考えたか,どのように工夫できるのかなどが重要です. <コッホ曲線について> ・(コッホ曲線が)なぜ曲線ではないのに曲線と呼ばれているのかが理解できなかった ↓ 局所的に見ればコッホ図形上のいかなる点も前か後にしか移動できない1自由度の点であり, 位相的に曲線であることは間違いない. <ドラゴン曲線について> ・再帰的なプログラムを書く際には,実行の順序を追いかけてしまうと,問題の本質が見えなくなります. 重要なことは現在のレベルと1つ詳細化されたレベルとの関係に注目することです.反復関数系のフラク タル図形の場合には,現在の図形と縮小写像が適用された後の図形の関係がポイントとなります. ・ドラゴン曲線とコッホ曲線とは,殆ど似た構造を持っている.1つのセグメントが 4セグメントになる (コッホ曲線)か,2セグメントになる(ドラゴン曲線)かの違いしかありません.つまり,縮小写像が 4つのアフィン変換か,2つのアフィン変換かの違いだけである.したがって,プログラムは m[0], m[1], v[0],v[1] を適切に定めるだけであり,他の部分を考える必要はない.行列 m[0], m[1]は, 縮小変換と回転変換で構成されます.授業でも説明したように,縮小率は 1/√2 である.回転は,π/4 と -π/4 のように思われますが,それではC曲線になってしまう(授業で説明しました).したがって, 回転(特に後者)を考えることと,平行移動量の v[0], v[1] を決めることが重要です. ・ドラゴン曲線内に格子模様の様なものが浮き上がって見える. ↓ これは整数座標に丸められるために生じるパターン. <C曲線について> ・C曲線もハウスドルフ次元は2であるが,面積を持つのだろうか? ↓ C曲線は自己交差を起こしてしまうので,キレイに平面を充填することができない. <五角形片について> ・五角形片の長さの変化は1/¥phiではなく1/(1+¥phi)ではないでしょうか ↓ 五角形片のスケールに関する教科書の記述は間違いであった.1/(1+¥phi) または 1/(¥phi^2)である. (黄金比は 1:¥phi = ¥phi:(1+¥phi) すなわち 1+¥phi = ¥phi^2 となる) <フラクタル図形の周長計算> ・画面に表示された図形の周長を表示してみようと思った ↓ drawObject(g, points) で totalLength = totalLength + points[1].subtract(points[0]).norm() のようにすれば良いだろう (ただし,Fractalクラスの paint メソッドで周長(上記のtotalLength)を初期化する必要がある). <setRangeについて> ・章末課題でsetRangeによって描画空間を設定できますが、いくつにすれば適当なのかが、分からないので、 いくつに設定するのが良いのか、またなぜその値になるのか教えてください。 ↓ setRange はワールド座標系における描画領域の大きさを決めるためのメソッドであり,縦横がうまく 収まる大きさにすれば良いでしょう.たとえば,コッホ曲線の場合には横幅が 1 なので,少し大きめの 1.2,シェルピンスキーガスケットの場合には横幅が 2 なので,2.4 に設定しています.ドラゴン曲線 やC曲線は,初期形状よりも大きくなっていくので,最終的な図形の大きさを想像しながら,決めれば良い でしょう. <メソッドのオーバロード> ・(Fractalクラスにおいて)2引数と3引数のdrawObjectメソッドは問題にならないのか? ↓ 同じメソッド名を用いることをオーバロードと呼ぶが, 知っておいても良かろうと考えて同一名のメソッドとした. メソッド名は同じでも,引数の並び(シグニチャ)が違う限り,別のメソッドとして扱われる. 今回は,再帰のレベルが入ったメソッドとそうでないメソッドなので,区別は明らかだろう. <行列の配列について> ・同じ行列を繰り 返し配列に格納する必要がある点においてはやや非効率的である ↓ Javaの配列は(Rubyと同様)参照変数であり,メモリ上の別の場所にある実体を参照しているにすぎない. したがって,同じ行列オブジェクトを共有することも可能である. <Javaでの羃乗計算> ・java では演算子に累乗が入ってなくて困った ↓ x^n は,Math.pow(x, n) で計算できる.