とあるゲームプログラマの挑戦と敗北の歴史

UE4とプログラミングとmayaとpythonとマラソンを中心に情報を発信する元「技術ブログを目指すブログ」から再始動した毎日の日々を発信するブログです。

ゲーム数学:線分どうしが交差するかどうか判定

線分どうしが交差するかどうかを判別する手順メモ

p0:直線0の座標

v0:直線0のベクトル

p1:直線1の座標

v1:直線1のベクトル

f:id:toncrimentan_w:20200429145847j:plain

計算用分母をもとめ交差するかどうかを判別する

bunbo = v0.x * v1.z - v0.z * v1.x
if( bunbo == 0.0 )
{
    交差しません
    return 
}

ベクトルp0-p1を求める

vec = p1 - p0

 

直線のベクトルで進んだ場合における交差する時間を取得できます。

t0 = ( v1.z * vec.x - v1.x * vec.z) / bunbo
t1 = ( v0.z * vec.x - v0.x * vec.z) / bunbo

線分と線分の交差判定が行いたい場合はこで計算終了

時間が0以上1以内の判別で交差判定を行える

if0.0f<=t0 && t0<=1.0f && 0.0f<=t1 && t1<=1.0f )
{
    線分内で交差
}else
{
    線分外で交差
}

 

直線の場合はさらに交差座標を求めたい場合があるはずその場合は以下の式で終了

交点q0 q1をもとめることができます。

q0 = v0 * t0 + p0
q1 = v1 * t1 + p1

 

おしまい