链接:http://poj.org/problem?id=1269

题意:给两条直线,判断它们是重合、平行还是相交,相交则求交点。

#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstdio>
using namespace std;const double eps=1e-8;struct Point
{double x,y;Point(double x=0,double y=0):x(x),y(y) {}
} p[4];typedef Point Vector;Vector operator + (Vector A,Vector B)
{return Vector(A.x+B.x,A.y+B.y);
}Vector operator - (Vector A,Vector B)
{return Vector(A.x-B.x,A.y-B.y);
}Vector operator * (Vector A,double p)
{return Vector(A.x*p,A.y*p);
}double Cross(Vector A,Vector B)
{return A.x*B.y-A.y*B.x;
}Point LineIntersection(Point P,Vector v,Point Q,Vector w)//两条直线求交点
{Vector u=P-Q;double t=Cross(w,u)/Cross(v,w);return P+v*t;
}int main()
{int n;Point p0;double t;cin>>n;cout<<"INTERSECTING LINES OUTPUT"<<endl;while(n--){for(int i=0; i<4; ++i)cin>>p[i].x>>p[i].y;Vector v1(p[1]-p[0]),v2(p[3]-p[2]);if(fabs(Cross(v1,v2))<eps)//共线{
//            t=(p[2].x-p[0].x)/v1.x;//v1.x为0,就错了
//            if(fabs(p[2].y-p[0].y-t*v1.y)<eps)t=(p[2].x-p[0].x);if(fabs(v1.x*(p[2].y-p[0].y)-t*v1.y)<eps)cout<<"LINE"<<endl;else cout<<"NONE"<<endl;}else//相交{p0=LineIntersection(p[0],v1,p[2],v2);cout<<"POINT ";printf("%.2lf %.2lf\n",p0.x,p0.y);}}cout<<"END OF OUTPUT"<<endl;return 0;
}

这里判断两直线重合是用的参数方程,但是一开始没有考虑到v1.x为0的情况,必然过不了,然后改成现在这样。

也可以用叉积来判断是否重合。

p2与p0和p1共线,且p3与p0和p1共线。

        if(fabs(Cross(v1,p[2]-p[0]))<eps && fabs(Cross(v1,p[3]-p[0]))<eps)//重合cout<<"LINE"<<endl;else if(fabs(Cross(v1,v2))<eps)//平行cout<<"NONE"<<endl;

或者是用直线的一般式:ax+by+c=0 利用相似来判读

平行则有:a1/a2=b1/b2

重合有:a1/a2=b1/b2=c1/c2

高中的几何知识真是忘得差不多了啊。。。。泪。。。

转载于:https://www.cnblogs.com/54zyq/archive/2013/05/07/3064269.html

poj 1269 直线相交情况相关推荐

  1. 判断线段和直线相交 POJ 3304

    1 // 判断线段和直线相交 POJ 3304 2 // 思路: 3 // 如果存在一条直线和所有线段相交,那么平移该直线一定可以经过线段上任意两个点,并且和所有线段相交. 4 5 #include ...

  2. Segments POJ 3304 直线与线段是否相交

    题目大意:给出n条线段,问是否存在一条直线,使得n条线段在直线上的投影有至少一个公共点. 题目思路:如果假设成立,那么作该直线的垂线l,该垂线l与所有线段相交,且交点可为线段中的某两个交点 证明:若有 ...

  3. n条直线相交最多有几个邻补角_【初一】 n(n1)模型在相交线中的应用

    数形结合 跳动空间思维点.线.面 分类讨论 灌溉逻辑严密的田 化归思想 悟得推己及人.大道至简 函数方程 最值求出个"醉"极限 你待数学如初见 题目待你如初恋 智慧本是星星点点 积 ...

  4. n条直线相交最多有几个邻补角_【初中数学】102条做初中几何辅导线的规律

    今天给大家整理的是[初中数学]102条做初中几何辅导线的规律 资料如果能帮到你,希望你可以帮忙点赞-感谢-收藏支持一下! 若你需要下载word来打印,可以查看我的个人简介,上面有资料下载方式. (资料 ...

  5. 判断两条线段/直线相交,并求交点

      一.矢量基本知识     因为后面的计算需要一些矢量的基本知识,这里只是简单的列举如下,如果需要更加详细的信息,可以自行搜索wikipedia或google. 1.矢量的概念:如果一条线段的端点是 ...

  6. 三维空间中的两直线相交

    很多资料上提供的两直线相交求点问题一般都是基于二维空间的,而且是直接使用坐标系进行求解.实际上知道二维空间中的求法(使用坐标系进行求解的),要想从中推导到三维空间中的求法是不容易的.在进行几何问题求解 ...

  7. 平面图形原理总结(1):直线相交

    前言 在平面几何中通常我们判断或求直线的相交方法是:用两直线的表达方程,判断其斜率或求二元方法解:但是这种方法经常要考虑很多特殊情况,例如:与坐标轴X平行时(斜率 k = 0 k=0 k=0),与坐标 ...

  8. 判断平面上两直线相交

    直线相交 首先引出计算几何学中一个最基本的问题:如何判断向量在的顺时针方向还是逆时针方向? 把p0定为原点,p1的坐标是(x1,y1),p2的坐标是(x2,y2).向量的叉积(cross produc ...

  9. 暑期集训3:几何基础 练习题C: POJ - 1269

    2018学校暑期集训第三天--几何基础 练习题B --  POJ - 1269 Intersecting Lines We all know that a pair of distinct point ...

最新文章

  1. R语言使用fs包的path_wd函数基于自定义文件路径规则,批量生成多个文件或者文件夹对应的绝对(absolute)文件路径(constructs absolute path)
  2. Oracle单机版开机自启动
  3. B-Tree索引在sqlserver和mysql中的应用
  4. [BZOJ1131][POI2008]Sta
  5. python 冒泡排序算法(超级详细)
  6. 初探swift语言的学习笔记九(OC与Swift混编)
  7. 只在堆上或只在栈上定义对象
  8. Lync Server 2013:边缘服务器 -- Set CA Error
  9. Prim和Dijkstra居然写起来一模一样
  10. python读取音频文件_python 读取wav 音频文件的两种方式
  11. day15 java接口在开发中的作用
  12. 46.@弹出点击次数
  13. TeraTerm自动登录(Login)
  14. 数学类网站、代码(Matlab Python R)、编程站点
  15. 数据库系统 图书管理系统 C语言
  16. UTF-8字符集中文排序方法研究
  17. DPCM差分预测编码原理及实现
  18. python 隐藏excel的列和行
  19. MLIR深入 —— 转换流程详解(以Toy接入为例)
  20. 【计算机毕业设计】034学生请假系统设计与实现

热门文章

  1. 数据结构7.3_图的遍历
  2. 怎样获取linux命令帮助?
  3. socket编程初级
  4. 快速开发系统之前台页面 ---- NO1----登录页面
  5. ASP无组件上传带进度条
  6. 历时四年,给Google提交的Android Framework Bug终于被Fixed了
  7. 网络爬虫--22.【CrawlSpider实战】实现微信小程序社区爬虫
  8. nginx+uwsgi部署Django
  9. Random Forest算法简介
  10. python 类变量(属性)和实例变量(属性