<山口からの希望>
レポートに質問を書いてもらうのは良いのだが,皆の質問に文章で答えようとすると,非常に時間がかかる.できれば,授業時間中に口頭で質問してもらえると助かる.

<レポートに対する注意事項>
レポートのプログラムが「<」,「>」のせいで途中で切れてしまっている人が見かけられる.「<」や「>」を用いること.また,何よりも提出前に一度全体を確認してから提出すること.今回は javaファイルなどを確認したが,評価はレポートのPDFファイルに対して行なうので,今後は注意してもらいたい.

<授業の進度>
・教科書には 20 章までありますが、毎週 1 章ずつ進むのでしょうか。
・授業では教科書のどのへんまで扱う予定 なのでしょうか? 一時間一章のペースでは授業時間が足りないと思うのですが、飛ばしたり、一時間 に二章以上やることもあるのでしょうか?
・教科書は20章ぐらいあったと思うんですが、このペースで終わるんですか?
↓
概ね,そのペースで進む予定である.ただし,途中の章を飛ばすこともある.おそらく第7,9章は扱わない.残念ながら,最後までは到達できないが,第15章か第16章くらいまで進みたい.

<自習方法>
・質問なのですが、授業時間内だと明らかにレポートを仕上げられないので、 1事前 に打ち込んで、説明後はレポートを仕上げるだけにする 2説明も全部終わってから まとめて仕上げる のどちらが良いでしょうか?
↓
個人的には例題だけは,事前に入力しておくことが望ましいと思うので,前者がお薦め.

<レポートの作製法 - 行番号の付け方>
・提出物制作の際に、レポートの書き方のサンプル に書かれていたようにcat -n を使っているのですが、ときどき一番始めに「1」とだ けでて、行数がナンバリングされません。どうやら改行コードがLF(UNIX)で元の ファイルを保存しているときはきちんとできていて、CR(MAC)で保存していた場合 は上記のようになっているみたいです。改行コードが違うとcat -n はできないものな のでしょうか
・プログラムに行番号をつけるコマンドを試してみたが最初の一行 にしかつかなかった。
↓
UNIXの多くのコマンドは,改行コードとして LF を前提としている.cat -n は LF の数をカウントしながら,LF の直後に数値を入れていくような処理をしているのだと思われる.したがって,CR ではうまく動かないのだろう.

<授業内容について - 1>
・抽象的な概念よりももっとプログラムそのものの細かい用語の意味などを説明して ほしいです。
↓
という意見もあるが…

<授業内容について - 2>
・三原色の話も知っているつもりだったが、加法混色と減法混色の関係などはよく分 かっていなかったし、ベクトルの勉強をした後で目の仕組みを学ぶと話の意味がよ く分かった。 過去のコメントで「導入こそが重要」とあったが、これには賛成である。
・プログラム自体は理解できているので, 図形科学ですから, 他の図形描画への応用 などにも触れてほしいです。プログラムの内容を説明するのは確かに必要ですが, あ まり細かなところまで一つ一つ説明するのではなく, 図形を描く上で重要な点をもっ と深く説明してもらえるとうれしいです。
↓
という意見もある.Javaに固有のことで,つまづきそうなところは,なるべく説明するように心がけるが,この授業としてはやはり導入部分を大切にしたい.

<色について - 1>
・色は暖色ほど膨張して見え, 寒色ほど収縮して見えるはずであり, 理論的には赤円 >緑円>青円の順に小さくなるはずである。しかし, 実際に出力された三原色の円を みる限りにおいては赤円<青円<緑円の順に大きくなっているように感じる。座標 を計算してみたところ各部分の大きさはほぼ対称であり, 非常に奇異に感ぜられた。 微妙な大きさの違いや, 色のバランス, 配置などに問題があるのだろうが, 単に色の性 質をみただけではその理由は分からなかった。
↓
たぶん,配置のせいではないだろうか? 周辺に余白(というか余黒)のある赤が小さく見えるのだろう.これは私の個人的な想像.

<色について - 2>
・色円盤において中央からC,M,Yに向かって明るい線が, R,G,Bに向かって暗い線が 出ているように見えるが, 明度が一定なのでこうなる理由がよくわからない。同じ半 径に位置する色であれば彩度も一緒であるから, 色相によってそのような認識が出る ということになるのだろうが, それ以上のことは分からなかった。
・大雑把にみて六本の筋が入っているように見えるがそのうち60°、180°、300°にあた る部分の筋は円の中心のからの距離が等しいほかの部分に比べても明るいように見 える。
・明度は角度によらずに定まってい るはずだが、体感的には赤、緑、青の色が暗く思える部分(下図の青で囲んだ部分) とシアン、マゼンダ、黄の明るく思える部分(下図の赤)がある。
・(色相円のプログラムで)R,G,Bの値の和は1~2を動いているにもかかわらず、HSB表現で彩度、明度が1で ある円になるところが興味深い。
↓
HSB表現の明度はかなり怪しくて,人間の近くする明度に比例しているわけではない.具体的な例を挙げるならば,赤 [1 0 0] と緑 [0 1 0] の加法混色された 黄色 [1 1 0] の方が明るくなるのは当然であろう.その意味では,HSBの明度とは,当該の色相で発色可能な最大の明度を 1 として正規化していると考えた方が良いだろう.最後のコメントは,明度に関する直観的なコメントとして面白い.

<色について - 3>
・実行結果として PDF に取り込んだ画像を Adobe Reader で表示すると、色が正しく表示されなかった。 Preview では正しく表示された。色の扱い方が違うのだろうか。
↓
RGB形式や CMY形式で表現された色は,表示/印刷する機械やソフトウェアによって,結果が変わってくる.それは基準色としての RGBやCMYの混色の比率を表しただけで,何をRGBやCMYにするかは,機械/ソフトウェアに依存して,変わってしまうからである.実際に,色を正確に指定したい場合には,知覚色を表現する CIE-L*a*b*, CIE-XYZなどの表色系を用いるべきである.

<色について - 4>
・CMYからRGBは理論的には完全に再現できるが、実際にはCMYK形式で 再現できないRGB形式の色があるようである。(参考: http://www.sakawa.jp/datauseful_back/data_rgbcmyk01.html)このため色円盤の画像が教 科書にのっている図とやや違っている(中心が教科書の図より白い)のはこうした印 刷上の問題だと思われる。三原色の絵でも原色の彩度が落ちているのが確認でき る。
↓
CMYとCMYKは,やや違った表現であり,CMYKは印刷を意識している.具体的には,CMYインクだけで黒を再現することができないため,印刷機/プリンタでは CMYインクだけでなく,少なくとも黒インクを利用するようになっている.その黒インクに相当する成分を Kで表現しているが,CMYKの場合,暗さを K = 黒インクで調整しようとするために,当該のページで指摘されているような問題が起こる.上にも書いたように,色を正確に指定したい場合には,知覚色を表現する CIE-L*a*b*, CIE-XYZなどの表色系を用いるべきである.

<Javaプログラミングについて - 1>
・私は for ループなども、Ruby ではどのように書けるかを考 えて大まかなプログラムを 頭で組んでから、Java の表現でどう書いていくかを考えています。 しかし、Java 独特の表現 private や protected、class 名とそれ に応じた引数の値など Java にある程度親しんでいないと、どのように自分のやりたいこ とを表現してよいのか わからないことも多々あります。例題プログラムを書き換えるに しても、そのような表現に 戸惑ってしまい、プログラムを組み立て方針を立てる時間よりも、 Java でやりたいことをどう表現したら良いのかと 悩む時間の方が多くなってしまっています。 もちろん授業時間には限りがあるので全部は難しいと思いますが、 出来れば Class や引数について たまにコメントを入れていただけると有難いです。
↓
確かに Java の説明もしなくてはならない場面もある.たとえば,イベント処理などは,Javaプログラミングそのものであった.時間がもう少しあると嬉しいのだが….ちなみに private, protected などがあるところは,全部 public に統一しておけば,とりあえず走るだろう.行儀のよいプログラムにしたいという気持ちがあって,private だの protected だの書いているが,Javaの初心者には厳しすぎるかもしれない.

<Javaプログラミングについて - 2>
・0.0fなどのfの意味がいまいちわからなかった。
・「1.0f」「0.0f」は、なぜfがついて いるのでしょうか。10進法でない値であったりするのでしょうか。
↓
0.0f は float 型の 「0.0」のこと.fをつけないと double型の「0.0」になる.実際には,どちらでもプログラムは走る.これも行儀良さを気にしたせい.

<Javaプログラミングについて - 3>
・コンパイルエラーを取った後に以下のようなエラーが出た。NullPointExeptionはなぜ発生したのか教えてください。
$ javac ColorRingHSB.java
$ java ColorRingHSB 12 
Exception in thread "main" java.lang.NullPointerException
at ColorRingHSB.setData(ColorRingHSB.java:44) at ColorRingHSB.(ColorRingHSB.java:26) at ColorRingHSB.main(ColorRingHSB.java:9)
↓
Javaは Rubyと同様に配列の実体(実際に記憶するメモリ領域)を newで作らないといけない.つまり,
protected float[] hue; 
だけでは,hue のための配列の実体へのポインタがない(nullになっている)ために,実行時に NullPointerExceptionと言われてしまっている.

<Javaプログラミングについて - 4>
・colorRingRGB.javaの18行目 (以下の行)の理由・意義がよくわかりません。
protected Color[] colors;
↓
これも上に似ている.ここでは配列へのポインタだけが作られており,配列の実体がない.実際に配列のメモリ領域は,そのあとの,
colors=new Color[numberOfPoints+1];
という行で作られている.これらのプログラムでは,配列の大きさが事前に決まっているわけでなく,コマンド引数で与えられた数値に応じて,必要な分だけメモリ領域を確保している.

<Javaの振舞いについて - 1>
・(色円盤のプログラムで)自宅のWindowsでプログラムを実行した際、画像が上(yが小さい方) から順番に表示されていった。 先週までのプログラムは、ほぼ一瞬で全画面表示さ れたのに対し、今回のプログラムが若干時間がかかったのは、全ピクセルについて 作業をしたからだろう。 また、Macで実行すると、少し間をおいてから、一気に完成した画像が出た。OSによって作業の方法が違うということなのだろうか。
↓
Javaの仮想マシンは OS やバージョンごとに,内部の実現方法が異なっている.最終的な処理はほぼ同じになるように APIの仕様が決められているが,細かな挙動は変わってくる.

<Javaの振舞いについて - 2>
・Colorのコンストラクタには0から1までのfloat型を引数とするものと0から 255までのint型を引数とするものがあったがColorの内部ではどのように値を 保持するのだろうか?
↓
仕様書で決められているのは,API(アクセス可能なフィールドやメソッド)で,内部表現は隠されている.内部の表現を意識しなくて良い/見せないのがオブジェクト指向らしいところでもある.

<Javaの振舞いについて - 3>
・章末課題 の3つ目の考察に書いたように、色の値として代入されるのに想定される値以外の ものが代入されるとどのように処理されているのでしょうか。これらのことについ て解説をしていただきたいです。
↓
API仕様書に書かれていることが保証されており,範囲外の使い方をすると何が起きるかはわからない.s, b は [0, 1],hは任意の値を指定して良いことになっている.
http://java.sun.com/javase/ja/6/docs/ja/api/java/awt/Color.html#getHSBColor(float,%20float,%20float)