2010/11/05(金) [n年前の日記]
#1 [flash] 多角形とのアタリ判定
ネットで参考になるソースを見つけて、感謝しつつ実装。
一応以前似たようなソレを実験したときは、交差回数を調べる方法と、多角形を三角形に分割して、点が各三角形の頂点から見て全部同じ側にあるか調べる方法を試したけれど。たしかその時は三角形に分割するほうが処理時間が短かったような記憶が。ただ、今回は、最終的に直線と反射させなきゃいけないので、2直線の交差判定処理が使い回せそうな、交差回数を調べる方法を選んでみたり。
一応以前似たようなソレを実験したときは、交差回数を調べる方法と、多角形を三角形に分割して、点が各三角形の頂点から見て全部同じ側にあるか調べる方法を試したけれど。たしかその時は三角形に分割するほうが処理時間が短かったような記憶が。ただ、今回は、最終的に直線と反射させなきゃいけないので、2直線の交差判定処理が使い回せそうな、交差回数を調べる方法を選んでみたり。
◎ 多角形データの作成方法で少し悩んだ。 :
どうやって多角形データを作ればいいのだろう。ビットマップ画像を開いて、その上に多角形を描いてトレースしなければいけないわけだけど…。
とりあえず、最初に Inkscape を使ってみた。ビットマップ画像をインポートして、その上にパスを引いて、svgで保存して、保存したsvgをエディタで開いて、パスの座標値群を取り出す、という感じで作業。しかし、どうも座標値がおかしい。ビットマップ画像の側と合っていない頓珍漢な座標値群が出てくる。どうやら、パスの乗っているレイヤーに、translateなる情報が入っていて、そのせいでずれてしまうらしい。ソレを反映させれば良さそうだけど、どうも値の規則性?が読めない。
ふと、パスを作れるのは Inkscape だけではなく、GIMPでも作れることを思い出した。GIMPでパスを作ってsvgでエクスポート。ビットマップ画像と対応していることが比較的分かりやすい座標値群が取れた。Perlで簡単な変換スクリプトを書いて、変換出力した座標値群をコピペしてソースに反映。画面に表示してみたが、かなりイイ感じ。位置はかなり合っている。
ただ、GIMPで出力したsvgにも、整数だけではなく小数点を持った値が混ざってしまうあたり少し気になる。座標値がドット単位になっている多角形のデータを作りたいのだが…。いやまあ、Perlスクリプトで四捨五入して整数にしているけれど…。svgを経由するあたりがよろしくない・仕方ないのだろうか。
多角形の各直線を引く段階から、ドット単位でピチッと指定したい。つまり、ドット単位で線が引けて、かつ、各座標値をテキストデータで取り出せるドローツールは無いものか。無いだろうな。需要がニッチ過ぎる。
とりあえず、最初に Inkscape を使ってみた。ビットマップ画像をインポートして、その上にパスを引いて、svgで保存して、保存したsvgをエディタで開いて、パスの座標値群を取り出す、という感じで作業。しかし、どうも座標値がおかしい。ビットマップ画像の側と合っていない頓珍漢な座標値群が出てくる。どうやら、パスの乗っているレイヤーに、translateなる情報が入っていて、そのせいでずれてしまうらしい。ソレを反映させれば良さそうだけど、どうも値の規則性?が読めない。
ふと、パスを作れるのは Inkscape だけではなく、GIMPでも作れることを思い出した。GIMPでパスを作ってsvgでエクスポート。ビットマップ画像と対応していることが比較的分かりやすい座標値群が取れた。Perlで簡単な変換スクリプトを書いて、変換出力した座標値群をコピペしてソースに反映。画面に表示してみたが、かなりイイ感じ。位置はかなり合っている。
ただ、GIMPで出力したsvgにも、整数だけではなく小数点を持った値が混ざってしまうあたり少し気になる。座標値がドット単位になっている多角形のデータを作りたいのだが…。いやまあ、Perlスクリプトで四捨五入して整数にしているけれど…。svgを経由するあたりがよろしくない・仕方ないのだろうか。
多角形の各直線を引く段階から、ドット単位でピチッと指定したい。つまり、ドット単位で線が引けて、かつ、各座標値をテキストデータで取り出せるドローツールは無いものか。無いだろうな。需要がニッチ過ぎる。
[ ツッコむ ]
以上です。