POJ 1269 Intersecting Lines(求直线交点)
生活随笔
收集整理的這篇文章主要介紹了
POJ 1269 Intersecting Lines(求直线交点)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
http://poj.org/problem?id=1269
求交點(diǎn)見zhhx課件
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> using namespace std; const double eps=1e-8; const int maxn=100004; int dcmp(double x) {if(fabs(x) < eps) return 0;return x < 0 ? -1 : 1; } #define Point Vector struct Vector{double x,y;Vector(double x=0,double y=0):x(x),y(y){};Vector operator + (const Vector &A) const{return Vector(x+A.x,y+A.y);}Vector operator - (const Vector &A) const{return Vector(x-A.x,y-A.y);}Vector operator * (const double &A) const{return Vector(x*A,y*A);}Vector operator / (const double &A) const{return Vector(x/A,y/A);}bool operator == (const Vector &A) const{return dcmp(x-A.x)==0&&dcmp(y-A.y)==0;} }; struct Line{Point p1,p2;Line(){};Line(Point p1,Point p2):p1(p1),p2(p2){} }li[maxn]; bool operator < (Line l1,Line l2){if(l1.p1.x==l2.p1.x) return l1.p1.y<l2.p1.y;else return l1.p1.x<l2.p1.x; } int ans[maxn],num[maxn],n,m; double U,L,R,D; double PolarAngle(Vector A){return atan2(A.y,A.x); } Vector rotate(Vector &A,double a){return A=Vector(A.x*cos(a)-A.y*sin(a),A.x*sin(a)+A.y*cos(a)); } double Dot(Vector A,Vector B){return A.x*B.x+A.y*B.y; } double Cross(Vector A,Vector B){return A.x*B.y-A.y*B.x; } Point GLI(Point P,Vector v,Point Q,Vector w){Vector u=P-Q;double t=Cross(w,u)/Cross(v,w);return P+v*t; } int main(){scanf("%d",&n);printf("INTERSECTING LINES OUTPUT\n");for(int i=1;i<=n;i++){Point a,b,c,d;scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&a.x,&a.y,&b.x,&b.y,&c.x,&c.y,&d.x,&d.y);Vector p1,p2;p1=b-a,p2=d-c;if(dcmp(Cross(p1,p2))==0){if(dcmp(Cross(c-a,p1))==0&&dcmp(Cross(d-a,p1))==0) printf("LINE\n");else printf("NONE\n");continue;}Point p=GLI(a,p1,c,p2);printf("POINT %.2lf %.2lf\n",p.x,p.y);}printf("END OF OUTPUT"); }?
轉(zhuǎn)載于:https://www.cnblogs.com/wifimonster/p/10323956.html
總結(jié)
以上是生活随笔為你收集整理的POJ 1269 Intersecting Lines(求直线交点)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。