BOOL IsIntersect(CPos &p1, CPos &p2,CPos &p3,CPos &p4)
{
double c1 = CrossProduct(p1, p2, p3);
double c2 = CrossProduct(p1, p2, p4);
double c3 = CrossProduct(p3, p4, p1);
double c4 = CrossProduct(p3, p4, p2);
if(((IsEqual(c1, 0) && (IsEqual(c2, 0)) || (c1 * c2 <= 0)) &&
((IsEqual(c3, 0) && (IsEqual(c4, 0)) || (c3 * c4 <= 0)))
{
return TRUE;
}
return FALSE;
}
线段P1P2,线段P3P4,要满足两条线段相交,而不是延长线相交,需要满足P1,P2两点在P3P4的两侧,同时P3,P4在P1P2的两侧,所以应该满足(c1*c2 <= 0)&&(c3*c4<=0)就行了。
上述代码的逻辑是不是有点问题? 叉乘等于0代表共线,两条线段如果仅仅共线,并不一定会有交点啊!!这个需要验证一下