hduoj 1558 并查集、计算几何(判断两线断是否相交)

来源:互联网 发布:unity3d 项目开发2d 编辑:程序博客网 时间:2024/06/10 16:53
http://acm.hdu.edu.cn/showproblem.php?pid=1558
关于计算几何:判断两线断是否相交
* 返回(P1-P0)*(P2-P0)的叉积。 *
* 若结果为正,则 <P0,P1> 在 <P0,P2> 的顺时针方向; *
* 若为0则 <P0,P1> <P0,P2> 共线; *
* 若为负则 <P0,P1> 在 <P0,P2> 的在逆时针方向; *
* 可以根据这个函数确定两条线段在交点处的转向, *
* 比如确定p0p1和p1p2在p1处是左转还是右转,只要     *
*               求(p2-p0)*(p1-p0),若 <0则左转,> 0则右转,=0则   *
*               共线                                                                                     *
* *
/********************************************************/
/*float   multiply(TPoint   p1,TPoint   p2,TPoint   p0)
{
return((p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y));
}
 
 //确定两条线段是否相交
 int   intersect(TLineSeg   u,TLineSeg   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));
 }
*/
/*忘记了说明TPoint和TLineSeg的定义了:)
struct   TPoint   {
float   x,y;
};
  struct   TLineSeg   {
  TPoint   a,b;
  };
此题代码
原创粉丝点击