なぜなら、 と非常にシンプルだからです。
そこで、この構造体を使って、このサイトに書かれてあるサンプルコードを書いてみましょう。コメントや使い方などは、このサンプルコードのもととなったサイトを見てください。(ご自由にお使いくださいということなので…。)
//線分の構造体
struct Segment{
Vector2 s;
Vector2 v;
};
//2Dベクトルの外積
float Vector2Cross(Vector2* v1,Vector2* v2){
return v1->x * v2->Y - v1->y * v2->x;
}
bool ColSegments(Segment &seg1,Segment &seg2,float* outT1 = 0,float* outT2 = 0, Vector2* outPos = 0){
Vector2 v = seg2.s- seg1.s;
float Crs_v1_v2 = Vector2Cross(&seg1.v,&seg2.v);
if(Crs_v1_v2 == 0.0F){
return false;
}
float Crs_v_v1 = Vector2Cross(&v,&seg1.v);
float Crs_v_v2 = Vector2Cross(&v,&seg2.v);
float t1 = Crs_v_v2 / Crs_v1_v2;
float t2 = Crs_v_v1 / Crs_v1_v2;
if ( outT1 )
*outT1 = Crs_v_v2 / Crs_v1_v2;
if ( outT2 )
*outT2 = Crs_v_v1 / Crs_v1_v2;
const float eps = 0.00001f;
if ( t1 + eps 1 || t2 + eps 1 ) {
// 交差していない
return false;
}
if( outPos )
*outPos = seg1.s + seg1.v * t1;
return true;
}