Yearly Archives: 2008

2008-03-18

誤差

聞いてくださいよ、今日私はひどいミスをしでかしてしまっていたことに気がついたんですよ。

          float pixelToCell(float pixel_x) { return (pixel_x - cell_origin_x) / cell_width;}
        

こういうpixel_xからcell_xへ変換する関数があったんですね。一種のグリッド(表)を想像してください。グリッドの左端のピクセル座標がcell_origin_x、セルのピクセル幅がcell_width。だから、任意のピクセル座標pixel_xをグリッド内のセル座標に変換するには、pixel_xからグリッド左端の座標を引いて、セルの幅で割ればいい。まあ、良くある形です。

それで、やってしまったミスは次のようなもの。

          float pixel_lower_x = (下限値、含む);
          float pixel_upper_x = (上限値、含まない);
          float cell_lower_ix = floor(pixelToCell(pixel_lower_x));
          float cell_upper_ix = ceil(pixelToCell(pixel_upper_x));
        

半開区間、[pixel_lower_x, pixel_upper_x)を整数のセル座標の範囲[cell_lower_ix, cell_upper_ix)にマップする処理。元の範囲と少しでもかぶっているセルは、範囲に含めなければなりません。

皆さんおわかりですか? おわかりですよね。当たり前だろって? うわーん!

pixel_x - cell_origin_xで情報落ちが起こりえるので、その後floorやceilしたって手遅れなんですね。

2008-03-15

新しいバッグと古いバッグ

長いこと使っていたデイバッグのファスナーがどうにも上手く機能しなくなってきたので、諦めて新しいバッグを買うことにしました。

条件としては、

  • 3wayで使えること。自転車に乗ることを考えると背負えないとダメ。電車に乗るなら肩掛けの方が楽だし安全。
  • 容量はそんなにいらない。ただし、帰りにスーパーによることもあるので、あまり小さいと困る。

というくらいで、その他あまりこだわりはありません。というか、そんなにバッグなんて買わないし、よく分かりません。ネット通販で見ても全然ピンと来ませんし。なのでちょっとした用事のついでに店に寄って色々見て回ったら良さそうなのを見つけました。

ノーマディック 3Wayリュック/トート/ショルダーバッグ [WI-01]

「街歩き専用リュック&ショルダートートバッグ」だそうです。ポケットがたくさんついてます。イヤホン用の穴までついてます。まさに機能美。気に入りました。というわけで購入。新しいバッグはこれに決まりです。

古いバッグよ、お疲れ様でした。思えばかなり大きなものまで無理矢理詰め込んだり、色々無茶をしました(ファスナーが壊れたのはそのせいですかね?)。ものを見ればバッグにはいるか入らないか、すぐに分かるくらい慣れ親しんだバッグ。新しいバッグに慣れるまでにはまだまだかかりそうです。