POJ 1269 Intersecting Lines

来源:互联网 发布:梅西大学怎么样 知乎 编辑:程序博客网 时间:2024/05/01 08:58

求交点

直接套模板

#include<stdio.h>#include<math.h>#include<iostream>using namespace std;const int N=105;int n;double max(double a,double b) {return a>b?a:b;}double min(double a,double b) {return a<b?a:b;}const double eps = 1e-8;const double PI = acos(-1.0);int sgn(double x){if(fabs(x) < eps)return 0;if(x < 0)return -1;else return 1;}struct Point{double x,y;Point(){}Point(double _x,double _y){x = _x;y = _y;}Point operator -(const Point &b)const{return Point(x - b.x,y - b.y);}//叉积double operator ^(const Point &b)const{return x*b.y - y*b.x;}//点积double operator *(const Point &b)const{return x*b.x + y*b.y;}//绕原点旋转角度B(弧度值),后x,y的变化void transXY(double B){double tx = x,ty = y;x = tx*cos(B) - ty*sin(B);y = tx*sin(B) + ty*cos(B);}};struct Line{Point s,e;Line(){}Line(Point _s,Point _e){s = _s;e = _e;}//两直线相交求交点//第一个值为0表示直线重合,为1表示平行,为0表示相交,为2是相交//只有第一个值为2时,交点才有意义pair<int,Point> operator &(const Line &b)const{Point res = s;if(sgn((s-e)^(b.s-b.e)) == 0){if(sgn((s-b.e)^(b.s-b.e)) == 0)return make_pair(0,res);//重合else return make_pair(1,res);//平行}double t = ((s-b.s)^(b.s-b.e))/((s-e)^(b.s-b.e));res.x += (e.x-s.x)*t;res.y += (e.y-s.y)*t;return make_pair(2,res);}};bool inter(Line l1,Line l2){returnmax(l1.s.x,l1.e.x) >= min(l2.s.x,l2.e.x) &&max(l2.s.x,l2.e.x) >= min(l1.s.x,l1.e.x) &&max(l1.s.y,l1.e.y) >= min(l2.s.y,l2.e.y) &&max(l2.s.y,l2.e.y) >= min(l1.s.y,l1.e.y) &&sgn((l2.s-l1.e)^(l1.s-l1.e))*sgn((l2.e-l1.e)^(l1.s-l1.e)) <= 0 &&sgn((l1.s-l2.e)^(l2.s-l2.e))*sgn((l1.e-l2.e)^(l2.s-l2.e)) <= 0;}Line seg[N];int main() {#ifndef ONLINE_JUDGEfreopen("in.txt","r",stdin);#endifscanf("%d",&n);int i,j;Point s,g;printf("INTERSECTING LINES OUTPUT\n");for(i=0;i<n;i++) {scanf("%lf%lf%lf%lf",&s.x,&s.y,&g.x,&g.y);seg[0].s=s;seg[0].e=g;scanf("%lf%lf%lf%lf",&s.x,&s.y,&g.x,&g.y);seg[1].s=s;seg[1].e=g;pair<int,Point> a;a=seg[0]&seg[1];if (a.first==0) printf("LINE\n");else if(a.first==1) printf("NONE\n");else {printf("POINT ");printf("%.2lf %.2lf\n",a.second.x,a.second.y);}}printf("END OF OUTPUT\n");return 0;}


0 0
原创粉丝点击