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

那么

x=(b1*c2-b2*c1)/(a1*b2-a2*b1)
y=(a2*c1-a1*c2)/(a1*b2-a2*b1)

#include<stdio.h>
#include<string.h>
#include<math.h>
struct point{
    double x,y;
    point(){}
    point(double x_,double y_){
        x=x_,y=y_;
    }
    point operator -(const point &b)const{
        return point(x-b.x,y-b.y);
    }
    double operator *(const point &b)const{//点积
        return x*b.x+y*b.y;
    }
    double operator ^(const point &b)const{//叉积
        return x*b.y-y*b.x;
    }
}A,B,C,D;
double cal(point p0,point p1,point p2){//小于0表示在p1处左折,大于0右折,等于0同线
    return (p1-p0)^(p2-p0);
}
const double eps=1e-8;
int main(){
    int n,i;
    while(scanf("%d",&n)!=EOF){
        puts("INTERSECTING LINES OUTPUT");
        for(i=1;i<=n;i++){
            scanf("%lf%lf%lf%lf",&A.x,&A.y,&B.x,&B.y);
            scanf("%lf%lf%lf%lf",&C.x,&C.y,&D.x,&D.y);
            if(fabs(cal(C,A,B))<eps&&fabs(cal(D,A,B))<eps)    puts("LINE");
            else if((B.x-A.x)*(D.y-C.y)==(D.x-C.x)*(B.y-A.y))    puts("NONE");
            else{
                double a1=A.y-B.y;
                double b1=B.x-A.x;
                double c1=A.x*B.y-B.x*A.y;
                double a2=C.y-D.y;
                double b2=D.x-C.x;
                double c2=C.x*D.y-D.x*C.y;
                double x=(b1*c2-b2*c1)/(a1*b2-a2*b1);
                double y=(a2*c1-a1*c2)/(a1*b2-a2*b1);
                printf("POINT %.2f %.2f\n",x,y);
            }
        }
        puts("END OF OUTPUT");
    }
    return 0;
}
时间: 2024-10-15 05:21:24

POJ 1269 Intersecting Lines【判断直线相交】的相关文章

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 (判断直线位置关系)

题目链接:POJ 1269 Problem 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 becau

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(判相交交点与平行)

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(判断两直线关系,并求交点坐标)

Intersecting Lines Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 12421   Accepted: 5548 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

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

两条直线可能有三种关系: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 直线与直线相交

题意:    判断直线间位置关系: 相交,平行,重合 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——叉积求直线交点坐标

题目: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:面