/// <summary>
/// 判断两条线段是否相交
/// </summary>
/// <param name="a1"></param>
/// <param name="a2"></param>
/// <param name="b1"></param>
/// <param name="b2"></param>
/// <returns></returns>
public bool IsBanana(Vector2 a1, Vector2 a2, Vector2 b1, Vector2 b2)
{
if (Mathf.Min(a1.x, a2.x) > Mathf.Max(b1.x, b2.x) || Mathf.Max(a1.x, a2.x) < Mathf.Min(b1.x, b2.x) ||
Mathf.Min(a1.y, a2.y) > Mathf.Max(b1.y, b2.y) || Mathf.Max(a1.y, a2.y) < Mathf.Min(b1.y, b2.y))
{
return false;
}
if (Math.Sign(Vector3.Cross(b1 - a1, a2 - a1).z) * Math.Sign(Vector3.Cross(b2 - a1, a2 - a1).z) > 0 ||
Math.Sign(Vector3.Cross(b1 - a2, a1 - a2).z) * Math.Sign(Vector3.Cross(b2 - a2, a1 - a2).z) > 0 ||
Math.Sign(Vector3.Cross(a1 - b1, b2 - b1).z) * Math.Sign(Vector3.Cross(a2 - b2, b2 - b1).z) > 0 ||
Math.Sign(Vector3.Cross(a1 - b2, b1 - b2).z) * Math.Sign(Vector3.Cross(a2 - b2, b1 - b2).z) > 0)
{
return false;
}
return true;
}
判断两条线段是否相交
于 2022-01-24 17:44:00 首次发布