poj 1269 Intersecting Lines

来源:互联网 发布:java开发流程图 编辑:程序博客网 时间:2024/06/06 20:26
We all know that a pair of distinct points on a plane defines a line and that a pair of lines on a plane will intersect in one of three ways: 1) no intersection because they are parallel, 2) intersect in a line because they are on top of one another (i.e. they are the same line), 3) intersect in a point. In this problem you will use your algebraic knowledge to create a program that determines how and where two lines intersect. 
Your program will repeatedly read in four points that define two lines in the x-y plane and determine how and where the lines intersect. All numbers required by this problem will be reasonable, say between -1000 and 1000. 

Input

The first line contains an integer N between 1 and 10 describing how many pairs of lines are represented. The next N lines will each contain eight integers. These integers represent the coordinates of four points on the plane in the order x1y1x2y2x3y3x4y4. Thus each of these input lines represents two lines on the plane: the line through (x1,y1) and (x2,y2) and the line through (x3,y3) and (x4,y4). The point (x1,y1) is always distinct from (x2,y2). Likewise with (x3,y3) and (x4,y4).

Output

There should be N+2 lines of output. The first line of output should read INTERSECTING LINES OUTPUT. There will then be one line of output for each pair of planar lines represented by a line of input, describing how the lines intersect: none, line, or point. If the intersection is a point then your program should output the x and y coordinates of the point, correct to two decimal places. The final line of output should read "END OF OUTPUT".

Sample Input

50 0 4 4 0 4 4 05 0 7 6 1 0 2 35 0 7 6 3 -6 4 -32 0 2 27 1 5 18 50 3 4 0 1 2 2 5

Sample Output

INTERSECTING LINES OUTPUTPOINT 2.00 2.00NONELINEPOINT 2.00 5.00POINT 1.07 2.20

END OF OUTPUT

题意: 判断两条线是平行,共线,还是相交;

#include<iostream>#include<cstdio>#include<cmath>using namespace std;const double eps=1e-8;struct point {double x,y;};struct vector{point start,end;};point p;double multi(point p1,point p2,point p0){return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y);}int Across(vector v1,vector v2){if(max(v1.start.x,v1.end.x)>=min(v2.start.x,v2.end.x)&&max(v2.start.x,v2.end.x)>=min(v1.start.x,v1.end.x)&&max(v1.start.y,v1.end.y)>=min(v2.start.y,v2.end.y)&&multi(v2.start,v1.end,v1.start)*multi(v1.end,v2.end,v1.start)>=0&&multi(v1.start,v2.end,v2.start)*multi(v2.end,v1.end,v2.start)>=0)return 1;return 0;}int  intersection(vector u,vector v){p.x=(multi(v.end,u.end,u.start)*v.start.x-multi(v.start,u.end,u.start)*v.end.x)/(multi(v.end,u.end,u.start)-multi(v.start,u.end,u.start));p.y=(multi(v.end,u.end,u.start)*v.start.y-multi(v.start,u.end,u.start)*v.end.y)/(multi(v.end,u.end,u.start)-multi(v.start,u.end,u.start));return 0;}vector a,b;int main(){int n;while(cin>>n){printf("INTERSECTING LINES OUTPUT\n");for(int i=0;i<n;i++){cin>>a.start.x>>a.start.y>>a.end.x>>a.end.y>>b.start.x>>b.start.y>>b.end.x>>b.end.y;if(fabs(multi(a.start,a.end,b.start))<eps&&fabs(multi(a.start,a.end,b.end))<eps)printf("LINE\n");else if((a.end.x-a.start.x)*(b.end.y-b.start.y)==(a.end.y-a.start.y)*(b.end.x-b.start.x))printf("NONE\n");else{intersection(a,b);printf("POINT %.2f %.2f\n",p.x,p.y);p.x=0.0,p.y=0.0;}}printf("END OF OUTPUT\n");}return 0;}

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 u盘电脑无法识别怎么办 系统无法识别u盘怎么办 手机u盘无法识别怎么办 u盘无法被识别怎么办 电脑不能读取u盘怎么办 电脑装系统卡了怎么办 怀孕三个月胚胎停育怎么办 被蟑螂咬了怎么办图片 有家人进了传销怎么办 有亲人进了传销怎么办 误入传销违法了怎么办 tt游戏账号忘了怎么办 被臭蚊子咬了怎么办 狗狗鼻子掉皮了怎么办 火碱弄到皮肤上怎么办 蓝斑马鱼怀孕后怎么办 汽油喝到肚子里怎么办 加了不好的汽油怎么办 不小心喝了汽油怎么办 如果误喝了汽油怎么办 小孩误喝了汽油怎么办 欠债活不下去了怎么办 待产住院住早了怎么办 狗狗一天吃一顿怎么办 四个月宝宝消化不好怎么办 内火旺盛长痘怎么办 我有恋爱恐惧症怎么办 白鹤芋叶子蔫了怎么办 白掌叶子蔫了怎么办 鱼塘的鱼不吃食怎么办 新买的鱼不吃食怎么办 养的鱼不吃食怎么办 罗汉掉鳞还是洞怎么办 刚买的鱼不吃食怎么办 锦鲤鱼掉鱼鳞片怎么办 锦鲤鱼身上烂了怎么办 鱼掉了一片鳞是怎么办 地图鱼身上烂了怎么办 小腿上有鱼鳞皮怎么办 食道里长了息肉怎么办 蟒蛇皮包翘皮了怎么办