POJ 1269 求两直线交点

简介:

题意:给出4个点,两个一组在两条直线上,求出这两条直线的重合部分,NONE就是平行,LINE就是重合,POINT就是有交点并且输出交点。

解析几何那么求,没什么好说的直接看代码吧。

#include <iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
typedef double PointType;
struct point
{
    PointType x,y;
};
point jd;
int Jiaodian(point a,point b,point c,point d)//平行返回0 重合返回1 相交返回2
{
    double A1=b.y-a.y,A2=d.y-c.y,B1=a.x-b.x,B2=c.x-d.x;
    double C1=b.y*(b.x-a.x)-b.x*(b.y-a.y),C2=d.y*(d.x-c.x)-d.x*(d.y-c.y);
    if(A1*B2==B1*A2)//平行或重合
    {
        if(A2*C1==A1*C2&&B1*C2==B2*C1)
            return 1;
        return 0;
    }
    jd.x=(B1*C2-B2*C1)/(B2*A1-B1*A2);
    jd.y=(A1*C2-A2*C1)/(A2*B1-A1*B2);
    return 2;
}
int main()
{
    point a,b,c,d;
    int n;
    puts("INTERSECTING LINES OUTPUT");
    scanf("%d",&n);
    while(n--)
    {
        scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&a.x,&a.y,&b.x,&b.y,&c.x,&c.y,&d.x,&d.y);
        int ans=Jiaodian(a,b,c,d);
        if(ans==0)
            puts("NONE");
        else if(ans==1)
            puts("LINE");
        else
            printf("POINT %.2f %.2f\n",jd.x,jd.y);
    }
    puts("END OF OUTPUT");
    return 0;
}


目录
相关文章
|
3月前
|
算法 C++ Windows
空间射线与三角形相交算法的两种实现
空间射线与三角形相交算法的两种实现
38 0
|
6月前
|
测试技术
【深度优先搜索】【组合数学】【动态规划】1467.两个盒子中球的颜色数相同的概率
【深度优先搜索】【组合数学】【动态规划】1467.两个盒子中球的颜色数相同的概率
|
算法 C++ BI
经典算法详解(10)图中有多少个三角形
题目:请说出下面图形中包含多少个三角形?请用一个程序完成计算。 C++版本 1 #include 2 3 using namespace std; 4 5 const char NO_POINT = '0'; 6 7 //任意的一条线 8 const char *map[]...
4010 0
求两直线交点和三角形内外心
一.求两直线交点 class Point { double x; double y; public Point() { this.
1750 0