POJ 1269 (直线相交) Intersecting Lines

水题,以前总结的模板还是很好用的。

 1 #include <cstdio>
 2 #include <cmath>
 3 using namespace std;
 4
 5 const double eps = 1e-8;
 6
 7 int dcmp(double x)
 8 {
 9     if(fabs(x) < eps) return 0;
10     return x < 0 ? -1 : 1;
11 }
12
13 struct Point
14 {
15     double x, y;
16     Point(double x=0, double y=0):x(x), y(y) {}
17 };
18 typedef Point Vector;
19
20 Point read_point()
21 {
22     double x, y;
23     scanf("%lf%lf", &x, &y);
24     return Point(x, y);
25 }
26
27 Point operator + (const Point& A, const Point& B)
28 { return Point(A.x+B.x, A.y+B.y); }
29
30 Point operator - (const Point& A, const Point& B)
31 { return Point(A.x-B.x, A.y-B.y); }
32
33 Point operator * (const Point& A, double p)
34 { return Point(A.x*p, A.y*p); }
35
36 double Cross(const Point& A, const Point& B)
37 { return A.x*B.y - A.y*B.x; }
38
39 double Length(const Vector v)
40 { return sqrt(v.x*v.x + v.y*v.y); }
41
42 double DistanceToLine(Point P, Point A, Point B)
43 {
44     Vector v1 = B - A, v2 = P - A;
45     return fabs(Cross(v1, v2)) / Length(v1);
46 }
47
48 Point GetLineIntersection(Point P, Vector v, Point Q, Vector w)
49 {
50     Vector u = P - Q;
51     double t = Cross(w, u) / Cross(v, w);
52     return P + v*t;
53 }
54
55 int main()
56 {
57     //freopen("in.txt", "r", stdin);
58
59     int n;
60     scanf("%d", &n);
61     puts("INTERSECTING LINES OUTPUT");
62     Point A, B, C, D;
63     while(n--)
64     {
65         A = read_point(); B = read_point();
66         C = read_point(); D = read_point();
67         Vector v1 = B - A, v2 = D - C;
68         if(dcmp(Cross(v1, v2)) == 0)
69         {
70             if(dcmp(DistanceToLine(C, A, B)) == 0) puts("LINE");
71             else puts("NONE");
72
73         }
74         else
75         {
76             Point ans = GetLineIntersection(A, v1, C, v2);
77             printf("POINT %.2f %.2f\n", ans.x, ans.y);
78         }
79     }
80     puts("END OF OUTPUT");
81
82     return 0;
83 }

代码君

时间: 2024-11-13 10:41:21

POJ 1269 (直线相交) Intersecting Lines的相关文章

poj 1269 线段相交/平行

模板题 注意原题中说的线段其实要当成没有端点的直线.被坑了= = 1 #include <cmath> 2 #include <cstdio> 3 #include <iostream> 4 #include <cstring> 5 using namespace std; 6 7 #define eps 1e-8 8 #define PI acos(-1.0)//3.14159265358979323846 9 //判断一个数是否为0,是则返回true,否

POJ 1269 Intersecting Lines(判断直线相交)

题目地址:POJ 1269 直接套模板就可以了...实在不想自己写模板了...写的又臭又长....不过这题需要注意的是要先判断是否有直线垂直X轴的情况. 代码如下: #include <iostream> #include <cstdio> #include <string> #include <cstring> #include <stdlib.h> #include <math.h> #include <ctype.h>

POJ 1269 - Intersecting Lines 直线与直线相交

题意:    判断直线间位置关系: 相交,平行,重合 1 include <iostream> 2 #include <cstdio> 3 using namespace std; 4 struct Point 5 { 6 int x , y; 7 Point(int a = 0, int b = 0) :x(a), y(b) {} 8 }; 9 struct Line 10 { 11 Point s, e; 12 int a, b, c;//a>=0 13 Line() {

POJ 1269 Intersecting Lines【判断直线相交】

题意:给两条直线,判断相交,重合或者平行 思路:判断重合可以用叉积,平行用斜率,其他情况即为相交. 求交点: 这里也用到叉积的原理.假设交点为p0(x0,y0).则有: (p1-p0)X(p2-p0)=0 (p3-p0)X(p2-p0)=0 展开后即是 (y1-y2)x0+(x2-x1)y0+x1y2-x2y1=0 (y3-y4)x0+(x4-x3)y0+x3y4-x4y3=0 将x0,y0作为变量求解二元一次方程组. 假设有二元一次方程组 a1x+b1y+c1=0; a2x+b2y+c2=0

POJ 1269 Intersecting Lines 直线相交判断

D - Intersecting Lines Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Submit Status Practice POJ 1269 Appoint description:  System Crawler  (2016-05-08) Description We all know that a pair of distinct points on a plane d

POJ 1269 Intersecting Lines(线段相交,水题)

Intersecting Lines 大意:给你两条直线的坐标,判断两条直线是否共线.平行.相交,若相交,求出交点. 思路:线段相交判断.求交点的水题,没什么好说的. struct Point{ double x, y; } ; struct Line{ Point a, b; } A, B; double xmult(Point p1, Point p2, Point p) { return (p1.x-p.x)*(p2.y-p.y)-(p1.y-p.y)*(p2.x-p.x); } bool

判断两条直线的位置关系 POJ 1269 Intersecting Lines

两条直线可能有三种关系:1.共线     2.平行(不包括共线)    3.相交. 那给定两条直线怎么判断他们的位置关系呢.还是用到向量的叉积 例题:POJ 1269 题意:这道题是给定四个点p1, p2, p3, p4,直线L1,L2分别穿过前两个和后两个点.来判断直线L1和L2的关系 这三种关系一个一个来看: 1. 共线. 如果两条直线共线的话,那么另外一条直线上的点一定在这一条直线上.所以p3在p1p2上,所以用get_direction(p1, p2, p3)来判断p3相对于p1p2的关

poj 1269 Intersecting Lines(判相交交点与平行)

http://poj.org/problem?id=1269 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 10379   Accepted: 4651 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

poj 1269 Intersecting Lines——叉积求直线交点坐标

题目:http://poj.org/problem?id=1269 相关知识: 叉积求面积:https://www.cnblogs.com/xiexinxinlove/p/3708147.html什么是叉积:https://blog.csdn.net/sunbobosun56801/article/details/78980467        其二维:https://blog.csdn.net/qq_38182397/article/details/80508303计算交点:    方法1:面