一生使いまわせる
2線分の交点。
厚みがない壁などは突き抜けてしまったりするので、移動しているそれぞれのフレームでの移動量(速度)のベクトルと、壁との当たり判定を調べる。
それぞれの線分の始点、終点をVector2で渡す。交差してる場合は交点を戻す。outはC#の参照渡し。
式を計算を進めて変形して実装している。
詳しい計算式はこちら
public static bool LineLineIntersect(Vector2 a, Vector2 b,Vector2 c, Vector2 d, out Vector2 point) {
point = Vector2.Zero;
double r, s;
double denominator = (b.X - a.X) * (d.Y - c.Y) - (b.Y - a.Y)*(d.X - c.X);
//分母が0の場合平行
if(denominator == 0) {
return false;
}
double numeratorR = (a.Y - c.Y) * (d.X - c.X) - (a.X - c.X)*(d.Y - c.Y);
r = numeratorR / denominator;
double numeratorS = (a.Y - c.Y)*(b.X - a.X) - (a.X - c.X) * (b.Y - a.Y);
s = numeratorS / denominator;
//交差しない
if(r < 0 || r > 1 || s<0 || s > 1) {
return false;
}
point.X = (float)(a.X + (r * (b.X - a.X)));
point.Y = (float)(a.Y + (r * (b.Y - a.Y)));
return true;
}
0 コメント :: 当たり判定 2線分の交点
コメントを投稿