言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

行列にムカムカムカ!

今日は久しぶりに行列の仕事だった。OpenDocument では全ての座標を絶対座標(紙の左上から何センチか?)で表現するのに比べて、Tweak では、というか普通は親の画像からの相対座標(乗ってる場所からの差分)で表現する。だから入れ子になった図形を OpenDocument で保存するためには座標の変換が必要だ。

素直にまっすぐな図形だけなら単に座標を足したり引いたりするだけで良いのだが、ナナメになってたり拡大縮小したりしてるのが混ざっているので、行列という物を使う。行列の内容は 2 x 3 = 6 個の数字から成る構造だが、あまりそういう事は気にしないで、どれだけ進んでどれだけ曲がってどれだけ拡大したかを覚えておく何か便利な物だと思えば良い。

行列もまた数学から来た概念なので、数学の記法を真似して使うのだが、ムカつく事に、微妙に四則演算と計算の仕方が違う。こんな馬鹿な話は無い。もしも平行移動だけだと座標変換はこんな風になるだろう。

親の座標 + 子の座標 = 子の絶対座標
子の座標 = 親の座標 *-1 + 子の絶対座標 (子の絶対座標 - 親の座標のことです)

行列の時はこうする

親の行列 ・ 子の行列 = 子の絶対行列
子の行列 = 親の行列 ^-1 ・ 子の絶対行列

これだけ見ると同じに見えるが、デバッグ中実際の値を入れて考えるとき、四則演算は左から計算してゆくのに、行列は読む順番とは逆に、右から計算してゆく、と言うのも、行列の積は

結果の座標 = 親の行列変換 ( 子の行列変換 (とある座標)) ;; 意味は、とある座標 -> 子の行列変換 -> 親の行列変換 -> 結果の座標

を書き換えた物だから。頭が慣れるとどうってこと無いのだろうが、数ヶ月に一回しか行列を使わない者にとってこういうのはめっちゃムカつくのです。何故先人は、右なら右、左なら左に統一しておいてくれなかったのだろう。しかも、都合の悪い事に回転を含まない時は右と左を間違ってもそれなりに動いてしまう。。。ああ、イライラする!

関係ない話だが、大体私はマクドかファミレスで仕事をしているのだが、つい目の前でマルチの勧誘が始まった!はじめて見た。すごい。気合入りまくり。カモの方は影ありまくり。営業の人めっちゃべっぴんさん。

。。。乾電池で動くお肌が綺麗になるすごいマシンを売っている。あかん。面白すぎて仕事が出来ない。。。