poj1269 Intersecting Lines(计算几何--两条直线的交点)
2014-11-08 23:05
387 查看
Intersecting Lines
Description
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
Sample Output
题目大意:在平面直角坐标系中,两点确定一条直线,题目给出4个点,前面2点和后面2点一共确定两条直线,求出这两条直线的交点。
思路:由于两条直线斜率不一定存在,所以方程选择一般式,即ax+by+c = 0,这样比较严谨,两条直线同样存在很多种情况,比如两条直线存在平行,相交,重合3种情况,分情况讨论。代码如下:
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 11307 | Accepted: 5110 |
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
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
题目大意:在平面直角坐标系中,两点确定一条直线,题目给出4个点,前面2点和后面2点一共确定两条直线,求出这两条直线的交点。
思路:由于两条直线斜率不一定存在,所以方程选择一般式,即ax+by+c = 0,这样比较严谨,两条直线同样存在很多种情况,比如两条直线存在平行,相交,重合3种情况,分情况讨论。代码如下:
#include<iostream> #include<cstdio> using namespace std; typedef struct { int x,y; }Point; typedef struct { int a,b,c; }Line; int line(int x1,int y1,int x2,int y2) //向量(x1,y1),(x2,y2); { return x1 * y2 - y1 * x2; } Line lineform(int x1,int y1,int x2,int y2) //ax + by + c = 0; { Line temp; temp.a = y2 - y1; temp.b = x1 - x2; temp.c = x2 * y1 - x1 * y2; return temp; } double x,y; void lineintersect(Line l1,Line l2) //求两条直线的交点 { double d = l1.a * l2.b - l2.a * l1.b; x = (l2.c * l1.b - l1.c * l2.b) / d; y = (l2.a * l1.c - l1.a * l2.c) / d; } int main() { int n; Point p1,p2,p3,p4; Line l1,l2; //freopen("1.in","r",stdin); cin>>n; cout<<"INTERSECTING LINES OUTPUT"<<endl; while(n--) { cin>>p1.x>>p1.y>>p2.x>>p2.y>>p3.x>>p3.y>>p4.x>>p4.y; if(line(p2.x - p1.x,p2.y - p1.y,p3.x - p1.x,p3.y - p1.y) == 0 && line(p2.x - p1.x,p2.y - p1.y,p4.x - p1.x,p4.y - p1.y) == 0) { cout<<"LINE"<<endl; //满足共线的条件 } else if(line(p2.x - p1.x,p2.y - p1.y,p4.x - p3.x,p4.y - p3.y) == 0) { cout<<"NONE"<<endl;//满足平行的条件 } else { l1 = lineform(p1.x,p1.y,p2.x,p2.y);//求两条直线的一般式 l2 = lineform(p3.x,p3.y,p4.x,p4.y); lineintersect(l1,l2);//求两条直线的交点 printf("POINT %.2lf %.2lf\n",x,y); } } }
相关文章推荐
- (计算几何step8.1.2.2)POJ 1269 Intersecting Lines(使用叉积来计算两条直线的交点)
- hdoj 1466 计算直线的交点数 (几何 DP)
- poj1269(计算几何+直线位置)
- 计算两条直线的交点
- hdu 2528:Area(计算几何,求线段与直线交点 + 求多边形面积)
- poj 1408 Fishnet(计算几何 叉积求面积 求两直线交点 暴力)
- POJ3304 Segments(计算几何,线段和直线的交点)
- 计算几何练习题――直线交点
- bzoj1822: [JSOI2010]Frozen Nova 冷冻波 计算几何:直线与圆的交点 最大流 二分答案
- cf#21-B-Intersection-计算几何-求直线交点个数
- POJ1269---Intersecting Lines (计算几何基础:直线相交求交点)
- POJ 1269 Intersecting Lines(计算几何 直线交点 点在直线上 直线平行)
- POJ1269 简单的计算几何判断直线相交
- 计算几何之相交直线交点的求法
- 计算几何模板补充(三维空间体积、平面、直线、向量相关计算。附上hdu4741,求异面直线的最短距离与交点)
- 计算两条直线的交点--C语言
- UVa 11437:Triangle Fun(计算几何综合应用,求直线交点,向量运算,求三角形面积)
- HDU 2857 Mirror and Light (计算几何求 对称点和两直线的交点)
- 7月10号 计算几何 对向量叉积 判断两条直线是否相交的理解
- 计算两直线的交点 poj 1269 我的第一道几何题