質問: rotationで、回転させたオブジェクトとの当たり判定は、どうやったらいいのでしょうか? runstant サンプル rotationが反映されて無い状態で判定されてるみたい。 (もしかして未対応?) tmlib.jsだけでは、無理なら普通はどのように判定するのがいいのかとか参考になるものがあったら教えてください。
回答: 他所で回答したのでこちらも。 tmlib.js Document ``` return (rect0.left < rect1.right) && (rect0.right > rect1.left) && (rect0.top < rect1.bottom) && (rect0.bottom > rect1.top); ``` 見た感じ、tmlib.js は回転した矩形の対応はしてないですね。 この解法はいくつもありますし、一般的な "これ" と言えるものがありません。 なのでどうしても主観的な回答になってしまいます。 解き方の 1 例 1. 矩形自体をベクトルの集合体として考える. 矩形は 4 辺ありますので、 v1, v2, v3, v4 といった 4 つのベクトルとして定義することができます. この時、右回りに v1, v2, v3, v4 として定義されていると矩形の内側に他図形の頂点が入った場合は、どのベクトルから見ても右側にあるように見えます。左回りはこの逆です. ↓ v1 ~ v4, どのベクトルから見ても内側の点は右側にある状態ですね. ``` v1→ ┏━━━┓ ↑ ┃ ・ ┃ v2 v4┃ ┃ ↓ ┗━━━┛ ←v3 ``` 2. あるベクトルに対して左右のどちらにあるかは外積で求める. 例えば、上記 v1 の始点を (v1x1,v1y1) とします. そして、同様に終点を (v1x2,v1y2) とします. 調査対象の頂点を P (Px,Py) とした時に外積を用いて、その結果を見てみます. `(v1x2-v1x1)*(Py-v1y1) - (Px-v1x1)*(v1y2-v1y1)` 上記の結果、 + の値であれば頂点 P は v1 の左側に位置している、と言えます. まとめ 上記のように右回り矩形として考えた場合、全頂点 (A も B も)に対して上記計算を行い、外積の結果 + であれば未衝突、どれか 1 つでも - であれば衝突している、と言えます。 このように、衝突判定という処理自体は非常に効率が悪いものになります。 最適化の方法等を知りたい場合は、他に衝突判定を行っているライブラリを覗いてみると良いかもしれません。