第一道计算几何。什么也不会-_-|||
先涨点姿势:
#define eps 1e-8 int sig(double d) { return (d>eps)-(d<-eps); }
下面是关于向量叉积的知识补充:
(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; }