スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

2Dの当たり判定

3Dばっかりやっててあんまり2次元の事をやっていなかった。

2DMAPで経路を探索してくれるシステムを作っていて、当たり判定が必要になったのでメモ。


public static bool lineCollision3(Vector2 c, Vector2 d, Vector2 a, Vector2 b)
{
if (cross2d(b - a, c - a) * cross2d(b - a, d - a) > 0)
return false;
if (cross2d(a - c, d - c) * cross2d(b - c, d - c) > 0)
return false;
return true;
}


      
public static bool lineCollision2(Vector2 a, Vector2 b, Vector2 c, Vector2 d)
{
Vector2 ab = b - a;
Vector2 ac = c - a;
Vector2 cd = d - c;

float A = cross2d(ab, cd);

if (Math.Abs(A) < 0.001f)
return false;

float B = cross2d(ac, ab);
float C = cross2d(ac, cd);

float ret1 = B / A;
if (ret1 < 0 || 1 < ret1)
return false;

float ret2 = C / A;
if (ret2 < 0 || 1 < ret2)
return false;

return true;
}


二つ作って見やすく載せてみたけど、速度とか気にして作ってないのであしからず。

というか間違ってるかもしれない。(ぉぃ
浮動少数の事考えるともう少しチェックいるかもねぇ・・(遠い目

いろんな場面で速度試したら途中で細かくreturn返すほうが1.7倍ほど早かった。
そりゃそうか。

交点だすなら後半のヤツが便利。


間違ってる場所見つけて直してくれた人
最適化して速度を早くしてくれた人
いたら御一報をば
愛という名の粗品差し上げます。


ねよっと。

コメントの投稿

非公開コメント

プロフィール

あしゅ

Author:あしゅ
ぷぃぷぃ日常。
いつのまにか雑記ブログに。

カテゴリ
最新記事
検索フォーム
最新コメント
リンク
このブログをリンクに追加する
ブロとも申請フォーム

この人とブロともになる

カウンター
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。