标签:des style blog http color os io strong
解题报告
题意:
判断直线的位置关系(平行,重合,相交)
思路:
两直线可以用叉积来判断位置关系。
AB直线和CD直线
平行的话端点C和端点D会在直线AB的同一侧。
重合的话在直线AB上。
剩下就是相交。
求两直线交点可以用面积比和边长比来求。
看下面的图就知道了,推导就比较容易了
#include <iostream> #include <cstring> #include <cstdio> #define eps 1e-6 #define zero(x) (((x)>0?(x):-(x))>eps) using namespace std; struct Point { double x,y; }; struct L { Point l,r; }; double xmulti(Point a,Point b,Point p) { return (b.x-a.x)*(p.y-a.y)-(p.x-a.x)*(b.y-a.y); } int main() { int n,i,j; scanf("%d",&n); cout<<"INTERSECTING LINES OUTPUT"<<endl; L l1,l2; Point p; for(i=0; i<n; i++) { scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&l1.l.x,&l1.l.y,&l1.r.x,&l1.r.y,&l2.l.x,&l2.l.y,&l2.r.x,&l2.r.y); double a,b,c,d; a=xmulti(l1.l,l1.r,l2.l);//c b=xmulti(l1.l,l1.r,l2.r);//d c=xmulti(l2.l,l2.r,l1.l); d=xmulti(l2.l,l2.r,l1.r); if(a==0&&b==0) cout<<"LINE"<<endl; else if(a*b>0&&c*d>0) { cout<<"NONE"<<endl; } else { p.x=(b*l2.l.x-a*l2.r.x)/(b-a); p.y=(b*l2.l.y-a*l2.r.y)/(b-a); printf("POINT %.2lf %.2lf\n",p.x,p.y); } } cout<<"END OF OUTPUT"<<endl; }
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 10764 | Accepted: 4803 |
Description
Input
Output
Sample Input
5 0 0 4 4 0 4 4 0 5 0 7 6 1 0 2 3 5 0 7 6 3 -6 4 -3 2 0 2 27 1 5 18 5 0 3 4 0 1 2 2 5
Sample Output
INTERSECTING LINES OUTPUT POINT 2.00 2.00 NONE LINE POINT 2.00 5.00 POINT 1.07 2.20 END OF OUTPUT
Source
POJ1269_Intersecting Lines(几何/叉积判断直线位置关系),布布扣,bubuko.com
POJ1269_Intersecting Lines(几何/叉积判断直线位置关系)
标签:des style blog http color os io strong
原文地址:http://blog.csdn.net/juncoder/article/details/38544545