判断是否相交
一般的写法
参考如下:
bool IsSegmentsIntersect(Vector2 a, Vector2 b, Vector2 c, Vector2 d)
{
Vector2 ab = b - a;
Vector2 ac = c - a;
Vector2 ad = d - a;
Vector2 cd = d - c;
Vector2 ca = a - c;
Vector2 cb = b - c;
float crossAB_AC = CrossProduct(ab, ac);
float crossAB_AD = CrossProduct(ab, ad);
float crossCD_CA = CrossProduct(cd, ca);
float crossCD_CB = CrossProduct(cd, cb);
// Check general case
if (crossAB_AC * crossAB_AD < 0 && crossCD_CA * crossCD_CB < 0) return true;
// Check special cases where points are collinear
if (Mathf.Approximately(crossAB_AC, 0) && IsPointOnSegment(c, a, b)) return true;
if (Mathf.Approximately(crossAB_AD, 0) && IsPointOnSegment(d, a, b)) return true;
if (Mathf.Approximately(crossCD_CA, 0) && IsPointOnSegment(a, c, d)) return true;
if (Mathf.Approximately(crossCD_CB, 0) && IsPointOnSegment(b, c, d)) return true;
return false;


3482

被折叠的 条评论
为什么被折叠?



