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

题目大意:给出四个点的坐标x1,y1,x2,y2,x3,y3,x4,y4,前两个形成一条直线,后两个坐标形成一条直线。然后问你是否平行,重叠或者相交,如果相交,求出交点坐标。

算法:二维几何直线相交+叉积

解法:先用叉积判断是否相交,如果相交的话,设交点坐标为p0(x0,y0)。向量(p0p1)和(p0p2)的叉积为0,有(x1-x0)*(y2-y0)-(y1-y0)*(x2-x0)=0;同理,求出p0和p3p4直线的式子。然后联立求解x0,y0。平行或重叠的情况就自己YY了。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<cstdlib>
  5. #include<cmath>
  6. #include<algorithm>
  7. #define inf 0x7fffffff
  8. #define exp 1e-10
  9. #define PI 3.141592654
  10. using namespace std;
  11. struct Point
  12. {
  13. double x,y;
  14. Point(double x=,double y=):x(x),y() {}
  15. };
  16. typedef Point Vector;
  17. double cross(Vector A,Vector B)
  18. {
  19. return A.x*B.y-A.y*B.x;
  20. }
  21. Point GetLineIntersection(Point P,Vector v,Point Q,Vector w)
  22. {
  23. Point uu;
  24. Vector u=Point(P.x-Q.x , P.y-Q.y);
  25. double t=cross(w,u)/cross(v,w);
  26. uu.x=P.x+v.x*t;
  27. uu.y=P.y+v.y*t;
  28. return uu;
  29. }//调用训练指南上这个函数怎么错了,我写错了吗
  30. int main()
  31. {
  32. int n;
  33. double x1,y1,x2,y2,x3,y3,x4,y4;
  34. //cin>>n;
  35. while (cin>>n)
  36. {
  37. printf("INTERSECTING LINES OUTPUT\n");
  38. while (n--) {
  39. cin>>x1>>y1>>x2>>y2>>x3>>y3>>x4>>y4;
  40. Point P,Q;
  41. P.x=x1 ;P.y=y1 ;
  42. Q.x=x3 ;Q.y=y3 ;
  43. Vector v,w;
  44. v.x=x2-x1 ;v.y=y2-y1;
  45. w.x=x4-x3 ;w.y=y4-y3;
  46. if (cross(v,w)!=)
  47. {
  48. //Vector vv=GetLineIntersection(P,v,Q,w);
  49. double a1,b1,c1;
  50. double a2,b2,c2;
  51. a1=y1-y2 ;b1=x2-x1 ;c1=x1*y2-y1*x2;
  52. a2=y3-y4 ;b2=x4-x3 ;c2=x3*y4-y3*x4;
  53. double x0=(b1*c2-b2*c1)/(b2*a1-b1*a2);
  54. double y0=(a2*c1-a1*c2)/(a1*b2-a2*b1);
  55. printf("POINT %.2f %.2f\n",x0,y0);
  56. }
  57. else
  58. {
  59. if (fabs(v.x)<=exp && fabs(w.x)<=exp)
  60. {
  61. if (fabs(x1-x3)<=exp)
  62. printf("LINE\n");
  63. else printf("NONE\n");
  64. }
  65. else if (fabs(v.y)<=exp && fabs(w.y)<=exp)
  66. {
  67. if (fabs(y1-y3)<=exp)
  68. printf("LINE\n");
  69. else printf("NONE\n");
  70. }
  71. else
  72. {
  73. if (fabs((y3-w.y/w.x*x3)-(y1-w.y/w.x*x1))<=exp)
  74. printf("LINE\n");
  75. else printf("NONE\n");
  76. }
  77. }
  78. }
  79. printf("END OF OUTPUT\n");
  80. }
  81. return ;
  82. }

poj 1269 Intersecting Lines的更多相关文章

  1. POJ 1269 Intersecting Lines(判断两直线位置关系)

    题目传送门:POJ 1269 Intersecting Lines Description We all know that a pair of distinct points on a plane ...

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

    两条直线可能有三种关系:1.共线     2.平行(不包括共线)    3.相交. 那给定两条直线怎么判断他们的位置关系呢.还是用到向量的叉积 例题:POJ 1269 题意:这道题是给定四个点p1, ...

  3. ●POJ 1269 Intersecting Lines

    题链: http://poj.org/problem?id=1269 题解: 计算几何,直线交点 模板题,试了一下直线的向量参数方程求交点的方法. (方法详见<算法竞赛入门经典——训练指南> ...

  4. POJ 1269 - Intersecting Lines - [平面几何模板题]

    题目链接:http://poj.org/problem?id=1269 Time Limit: 1000MS Memory Limit: 10000K Description We all know ...

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

    题目:http://poj.org/problem?id=1269 相关知识: 叉积求面积:https://www.cnblogs.com/xiexinxinlove/p/3708147.html什么 ...

  6. POJ 1269 Intersecting Lines (判断直线位置关系)

    题目链接:POJ 1269 Problem Description We all know that a pair of distinct points on a plane defines a li ...

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

    id=1269" rel="nofollow">Intersecting Lines 大意:给你两条直线的坐标,推断两条直线是否共线.平行.相交.若相交.求出交点. ...

  8. POJ 1269 Intersecting Lines --计算几何

    题意: 二维平面,给两条线段,判断形成的直线是否重合,或是相交于一点,或是不相交. 解法: 简单几何. 重合: 叉积为0,且一条线段的一个端点到另一条直线的距离为0 不相交: 不满足重合的情况下叉积为 ...

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

    题意:给两条直线,判断相交,重合或者平行 思路:判断重合可以用叉积,平行用斜率,其他情况即为相交. 求交点: 这里也用到叉积的原理.假设交点为p0(x0,y0).则有: (p1-p0)X(p2-p0) ...

随机推荐

  1. Hive中典型的表内数据除重写法

    insert overwrite table store select t.p_key,t.sort_word from ( select p_key, sort_word , row_number( ...

  2. Cassandra 数据模型 (基于CQL,解决胖列数量限制及灵活性问题)(1.1及以上版本)

    文中主要交代Cassandra的编程模型及数据结构. 由于Cassandra版本数次更新,网上中文的资料已经有点过时,比较有代表性的比如ebuy那篇文章都已经过时了,于是自己找资料,结合官方博客写一篇 ...

  3. php生成随机字符串和验证码的类

    网上有很多的php随机数与验证码的代码与文章,真正适用的没有几个. 索性自己搞一个吧. 开始本节的php教程 吧,以下代码的实现,主要做到可以很好区分一个get_code(),另一个create_ch ...

  4. Nginx Location配置语法介绍、优先级说明

    nginx 语法规则:location   [=|~|~*|^~|!~|!~*]    /uri/   { … } location匹配的是$document_uri,$document_uri 会随 ...

  5. wing IDE破解方法

    WingIDE是我接触到最好的一款Python编译器了.但其属于商业软件,注册需要一笔不小的费用.因此,这篇简短的文章主要介绍了破解WingIDE的方法.破解软件仅供学习或者教学使用,如果您是商业使用 ...

  6. opengl基础学习专题 (三) 多边形绘制的几种样式

    题外话 聪明人之所以不会成功,是由于他们缺乏坚韧的毅力. ——艾萨克·牛顿(1643年1月4日—1727年3月31日)英国 也许可以理解为 想更深一步的时候,坚持,努力和聪明缺一不可. 挺直腰杆在此向 ...

  7. RAP开发入门-搭建RAP开发环境(一)

    ps:补充 RAP (Remote Application Platform) 官网地址eclipse.org/rap 1.下载IDE http://www.eclipse.org/downloads ...

  8. CSS3中新出现的技术

    CSS3中新出现的技术 CSS媒体查询 媒体查询 包含了一个媒体类型和至少一个使用如宽度.高度和颜色等媒体属性来限制样式表范围的表达式.CSS3加入的媒体查询使得无需修改内容便可以使样式应用于某些特定 ...

  9. hdu 1427 速算24点

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1427 速算24点 Description 速算24点相信绝大多数人都玩过.就是随机给你四张牌,包括A( ...

  10. wget的下载与安装使用

    wget的下载与安装:下载地址:ftp://ftp.cs.cuhk.edu.hk/pub/gnu/gnu/wget安装:先把wget下载到的tar文件解压,然后cd到wget目录下# ./config ...