标签:
#include<ctime> #include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> #include<cmath> using namespace std; //========================================================================= struct V{ double px,py; V operator - (const V c){ V a; a.px = px - c.px,a.py = py - c.py; return a; } bool operator <= (const V c){ return px <= c.px && py <= c.py; } bool min(V a,V b){ if(b <= a) swap(a,b); return a <= *this; } bool max(V a,V b){ if(a <= b) swap(a,b); return *this <= a; } double CP(V c){ return px*c.py - py*c.px; } double DP(V c){ return px*c.px + py*c.py; } };//vector struct L{ V p1,p2; bool p0;//p0? beeline : segment int pa; /* switch(pa){ case 1: parallel-x; case 2: parallel-y; default: k < oo && k != 0; } */ double k; void getk(){ if(p1.px == p2.px) pa = 1; else if(p1.py == p2.py) pa = 2; else pa = 0,k = (p1.py-p2.py) / (p1.px-p2.px); } bool IP(V q){ return q.min(p1,p2) && q.max(p1,p2); }//in the ploygon of the line bool CR(L c){ V v1 = p2 - p1,v2 = c.p1 - p1,v3 = c.p2 - p1; if(v1.CP(v2) * v1.CP(v3) < 0) return true; else{ if(v2.DP(v3) <= 0) return true; else return false; } }//line cross };//line struct BL{ };//broken line struct PL{ };//ploygon //========================================================================= double CP(V a,V b){ return a.px*b.py - a.py*b.px; }//cross product double DP(V a,V b){ return a.px*b.px + a.py*b.py; }//dot product double DIS(V a,V b){ return sqrt((a.px-b.px)*(a.px-b.px) + (a.py-b.py)*(a.py-b.py)); }//disdance //========================================================================= bool POL(V q,L p){ /*double x1 = p.p1.px,x2 = p.p2.px,y1 = p.p1.py,y2 = p.p2.py, x0 = q.px,y0 = q.py; if((!p.p0) && (!(x0 <= max(x1,x2) && x0 >= min (x1,x2) && y0 <= max(y1,y2) && y0 >= min(y1,y2)))) return false;*/ //if((!p.p0) && (!(q.min(p.p1,p.p2) && q.max(p.p1,p.p2)))) return false; if((!p.p0) && (!p.IP(q))) return false; if(!CP(q-p.p1,p.p2-p.p1)) return true; else return false; }//wheather a point is on a line bool SCR(L a,L b){ return a.CR(b) && b.CR(a); } //========================================================================= int main(){ }
已解决问题:
判断点是否在线段上
判断两线段是否相交
(这是草稿,未完待续~)
标签:
原文地址:http://www.cnblogs.com/woodenhead/p/5081861.html