float Vector2IsLeft(FVector v, FVector vStart, FVector vEnd)
{
return (vStart.X - v.X)*(vEnd.Y - v.Y) - (vEnd.X - v.X)*(vStart.Y - v.Y);
}
bool CheckCollision1(FVector vStart1, FVector vEnd1, FVector vStart2, FVector vEnd2)
{
static const float YD_EPS_REAL32 = 0.00000001f;
float leftS, leftE;
leftS = Vector2IsLeft(vStart1, vStart2, vEnd2);
leftE = Vector2IsLeft(vEnd1, vStart2, vEnd2);
if (leftS * leftE > YD_EPS_REAL32)
{
return false; // vStart1, vEnd1在另一条直线的同侧
}
leftS = Vector2IsLeft(vStart2, vStart1, vEnd1);
leftE = Vector2IsLeft(vEnd2, vStart1, vEnd1);
if (leftS * leftE > YD_EPS_REAL32)
{
return false; // vStart2, vEnd2在另一条直线的同侧
}
return true;
}