POJ 1269 Intersecting Lines(判断直线的位置关系)

来源:互联网 发布:淘宝信誉在哪里看 编辑:程序博客网 时间:2024/05/17 23:22

第一道计算几何。什么也不会-_-|||

先涨点姿势:

#define eps 1e-8int sig(double d){    return (d>eps)-(d<-eps);}

精度判断,只有当d在(-eps,eps)之间时才返回0,此时d的值可以忽略不计(即忽略误差).


下面是关于向量叉积的知识补充:

(1).坐标表示:

设矢量P=(x1,y1),Q=(x2,y2),则矢量叉积定义为P X Q =x1*y2-x2*y1(标量)

(2).叉乘的重要性质:

若P X Q >0,则P在Q的顺时针方向

若P X Q <0,则P在Q的逆时针方向

若P X Q =0,则P与Q共线。

显然当sig(s1)==0&&sig(s2)==0两向量共线

而当sig(s2-s1)==0时两向量平行。

下面只剩相交的情况,求交点什么的还是不会,先贴下ZEROm牛的判位置关系代码,日后再来过

double Cross(Point o,Point a,Point b){    return (a.x-o.x)*(b.y-o.y)-(a.y-o.y)*(b.x-o.x);}int LineCross(Point a,Point b,Point c,Point d,Point &p){    double s1,s2;    s1=Cross(a,b,c);    s2=Cross(a,b,d);    if(sig(s1)==0&&sig(s2)==0) return 2;    if(sig(s2-s1)==0) return 0;    p.x=(c.x*s2-d.x*s1)/(s2-s1);    p.y=(c.y*s2-d.y*s1)/(s2-s1);    return 1;}



原创粉丝点击