检测线段是否有交集

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;
}

猜你喜欢

转载自www.cnblogs.com/ylwn817/p/12714278.html