This documentation is automatically generated by online-judge-tools/verification-helper
View the Project on GitHub mugen1337/procon
#include "Geometry/Distance.hpp"
// Distance (Requires: Projection, Intersect) Real dis(Point a,Point b){ return abs(a-b); } Real dis(Line l,Point p){ return abs(p-projection(l,p)); } Real dis(Segment s,Point p){ Point r=projection(s,p); if(intersect(s,r)) return abs(r-p); return min(abs(s.p1-p),abs(s.p2-p)); } Real dis(Segment a,Segment b){ if(intersect(a,b)) return 0; return min({dis(a,b.p1),dis(a,b.p2),dis(b,a.p1),dis(b,a.p2)}); } Real dis(Polygon a,Polygon b){ Real ret=-10; int n=(int)a.size(),m=(int)b.size(); for(int i=0;i<n;i++)for(int j=0;j<m;j++){ Real d=dis(Segment(a[i],a[(i+1)%n]),Segment(b[j],b[(j+1)%m])); if(ret<0) ret=d; else ret=min(ret,d); } return ret; } Real dis(Polygon poly,Point p){ Real ret=-10; int n=(int)poly.size(); for(int i=0;i<n;i++){ Real d=dis(Segment(poly[i],poly[(i+1)%n]),p); if(ret<0) ret=d; else ret=min(ret,d); } return ret; }
#line 1 "Geometry/Distance.hpp" // Distance (Requires: Projection, Intersect) Real dis(Point a,Point b){ return abs(a-b); } Real dis(Line l,Point p){ return abs(p-projection(l,p)); } Real dis(Segment s,Point p){ Point r=projection(s,p); if(intersect(s,r)) return abs(r-p); return min(abs(s.p1-p),abs(s.p2-p)); } Real dis(Segment a,Segment b){ if(intersect(a,b)) return 0; return min({dis(a,b.p1),dis(a,b.p2),dis(b,a.p1),dis(b,a.p2)}); } Real dis(Polygon a,Polygon b){ Real ret=-10; int n=(int)a.size(),m=(int)b.size(); for(int i=0;i<n;i++)for(int j=0;j<m;j++){ Real d=dis(Segment(a[i],a[(i+1)%n]),Segment(b[j],b[(j+1)%m])); if(ret<0) ret=d; else ret=min(ret,d); } return ret; } Real dis(Polygon poly,Point p){ Real ret=-10; int n=(int)poly.size(); for(int i=0;i<n;i++){ Real d=dis(Segment(poly[i],poly[(i+1)%n]),p); if(ret<0) ret=d; else ret=min(ret,d); } return ret; }