ぎょーむ日誌 2001-08-20
2001 年 08 月 20 日 (月)
- 0700 起床.
なぜか眠い.
7 時間ぐらい寝たはずなんだが.
- 朝飯・弁当の準備.
あれ炊飯終ってない.
タイマーの設定間違えたか.
シャワー.
朝飯.
コーヒー.
朝のラジオ,
なんかヘンだ
……
腕時計で時刻を確認.
0540.
- ……
これは,
つまり
……
昨晩,
半分寝てるアタマで目覚し時計を設定したときに,
間違えて時刻を 2 時間すすめてしまった!!
うう.
訂正.
0500 起床.
5 時間しか寝てない.
- とはいえ,
気温高くなる前に移動したいので
独房群にむかう.
0555 自宅発.
曇だけど日がさしている.
特急に乗って
0605 京急平和島発.
普通に乗り換えて
0635 京急上大岡発.
0650 研究所着.
いつもより 2 時間早くついてしまった.
- 眠い.
とりあえずメイル書いたり,
matpack
コンパイルしてみたり.
- matpack
……
こりゃあ,
カンタンだわ.
八木アンテナのローブを描画させる
こういうデモプログラムなんかも入っていたんだけど,
#include "matpack.h"
int main (void)
{
Scene scene;
...
scene.Transform(...)
...
scene.AddLight( Vector3D(-0.5,-4,0.5), white, 1);
...
Vector3D camera_position( distance, 1.2*distance, 1.4*distance),
look_direction (-distance,-1.2*distance,-1.4*distance);
scene.Look(camera_position, look_direction, FieldOfView(45), 0);
...
MpImage image(size,size);
scene.Open(image);
...
scene.Show();
...
}
image.WritePngFile("isosurf-demo3.png");
と追加するだけで,
下のような図を PNG ファイルとして出力してくれる.
出力先は各種ビットマップだけでなく,
Postscript なども含まれている.
なかなかよさそう.
- おっと,
こんなことやって遊んでいたらもう 0900 か.
朝から何をやってんだか.
- とりあえず Abis PipeTree を側面から支援するはずの
VitPolygon クラスを定義してみる.
- 途中で 1 時間ほど,
これまた仕事と関係ない,
Perl モジュールの導入というか
perl -MCPAN -e 'install ...'
が使いこなせなくてぢたばたする.
- VitPolygon の基底たる Vit で
string を使った名前の登録なんかをやってる.
なんでこんなモノいれたんだろう?
わけわからんけど,
基底にさかのぼって削除.
ついでに Location も
純粋仮想関数として定義する必要ナシ.
モノを考えずに作ってるというか
……
- いや,
Vit::Location は必要だったみたいだ.
うう.
- 早起きしたわりには,
というか早起きしためにというか
……
あまり仕事のはかどらなかった長い午前終了.
昼飯食う.
- 甲山さんからアロメトリーメイル.
Abies では
(シュート長さ) = 28 * (シュート太さ)1.1 ?
ほとんど線形だな
……
- 昼からも三次元ライブラリ関係の改善.
VitPolygon という変な名前はやめて
VitTriangle とする.
核心部は三次元空間にひらひらと飛ぶ三角形を
ビームで撃ったときに当たったかハズれたか,
の判定である.
いずれ詳しく説明するとして,
やることは 3 × 3 の逆行列の計算である.
こんなかんぢ.
... // Preparation to generate 3x3 inverse matrix
double x0( p0.X() ), y0( p0.Y() ), z0( p0.Z() );
double x1( p1.X() ), y1( p1.Y() ), z1( p1.Z() );
double x2( p2.X() ), y2( p2.Y() ), z2( p2.Z() );
double xy01_10( x0 * y1 - x1 * y0 );
double xy12_21( x1 * y2 - x2 * y1 );
double xy20_02( x2 * y0 - x0 * y2 );
double yz01_10( y0 * z1 - y1 * z0 );
double yz12_21( y1 * z2 - y2 * z1 );
double yz20_02( y2 * z0 - y0 * z2 );
double zx01_10( z0 * x1 - z1 * x0 );
double zx12_21( z1 * x2 - z2 * x1 );
double zx20_02( z2 * x0 - z0 * x2 );
// Determinant
double det( x0 * yz12_21 + x1 * yz20_02 + x2 * yz01_10 );
...
// Vector composition
Xyz gaze_vector( gaze->NormalizedDirection() );
double gx( gaze_vector.X() );
double gy( gaze_vector.Y() );
double gz( gaze_vector.Z() );
double a0( yz12_21 * gx + zx12_21 * gy + xy12_21 * gz );
double a1( yz20_02 * gx + zx20_02 * gy + xy20_02 * gz );
double a2( yz01_10 * gx + zx01_10 * gy + xy01_10 * gz );
...
- 私はふだんはもうすこし読みやすいコード書くんだけど,
この部分はあえてこう書いた.
そう,
いつかの失敗を彷彿とさせるんだけど,
つねに愚かしくなりがちな高速化のためである.
かかる自己満足的な努力はあれこれあって
……
たとえば,
みればわかるように一度も割り算を使っていない,
とか
(しかしあとで小規模な実験してみたら,
ぢつはこういう工夫はあまり意味なかった).
- さてと,
あとは
{ a0, a1, a2 }
の符号がことごとく同じであれば「当たり」,
でなければ「ハズれ」となる
……
んだけど
……
あれれ?
うまくいかないなぁ.
- バグとれぬまま無念の撤退.
1800 研究所発.
普通に乗って
1810 京急杉田発.
特急に乗り換えて
1819 京急上大岡発.
1900 帰宅.
- 晩飯終ってからも気合のバグとり.
- 2230 よーやくまともに動いた.
すごくつまらん間違いだった.
最後の
{ a0, a1, a2 }
の算出でしくじっていた
(上のコードは修整ずみ).
|
[VitTriangle]
三角形の障害物 (緑).
赤線はそれにぶつかってる「視線」.
黄線はわきをすりぬけたもの.
これは POV-Ray による作図.
(左図クリックすると拡大)
|
- こんなチンケな三角形のためにまるまる一日つぶしてしまった.
前途遼遠,
先ゆき暗雲.
嗚呼.
- しかも久しぶりに galeon やめて Netscape で見てみると
……
過去 10 日ほどの「ぎょーむ日誌」レイアウトかなりがたがた.
これは Netscape が悪いんだい,
とべそをかきつつ,
ぢりぢり修整する.
ああ,
睡眠時間が.
- (一言近況)
「ニセ」アカマツの難所は越えたけど,
いまだ終らず.
オオシラビソな PipeTree はドロ沼の予感.
大型で強い勢力の台風 11 号は接近中.
いったいどうなるんでしょうね.
(2001.08.20)
- 今日の食卓
- 朝 (0530):
米 0.7 合.
ゴーヤ・タマネギ・ニンジン・マイタケの
炒めもの.
- 昼 (1210):
弁当.
米 0.7 合.
朝と同じ.
- 晩 (1910):
米 0.7 合.
朝と同じ.