跟踪轨迹识别——判断两条线段相交
在视频跟踪中,求得目标的运动轨迹,即历史位置信息,可以判断该目标的历史运动路径是否跨越设定的规则线。
#define EP 1e-10
struct Point{
double x,y;
};
struct Line{
Point a,b;
};
//确定两条线段是否相交
int intersect(Line u,Line v)
{
return( (max(u.a.x,u.b.x)>=min(v.a.x,v.b.x))&&
(max(v.a.x,v.b.x)>=min(u.a.x,u.b.x))&&
(max(u.a.y,u.b.y)>=min(v.a.y,v.b.y))&&
(max(v.a.y,v.b.y)>=min(u.a.y,u.b.y))&&
(multiply(v.a,u.b,u.a)*multiply(u.b,v.b,u.a)>=0)&&
(multiply(u.a,v.b,v.a)*multiply(v.b,u.b,v.a)>=0));
}
//判断两个点是否相等
int Euqal_Point(Point p1,Point p2)
{
return((fabs(p1.x-p2.x)<EP)&&(fabs(p1.y-p2.y)<EP));
}
//一种线段相交判断函数,当且仅当u,v相交并且交点不是u,v的端点时函数为true;
int intersect_A(Line u,Line v)
{
return((intersect(u,v))&&
(!Euqal_Point(u.a,v.a))&&
(!Euqal_Point(u.a,v.b))&&
(!Euqal_Point(u.b,v.a))&&
(!Euqal_Point(u.b,v.b)));
}
转载自:https://blog.csdn.net/ahayo123/article/details/19544915