POJ 1269 Intersecting Lines 解题报告 (2010-05-07 19:10)

一、问题描述

http://acm.pku.edu.cn/JudgeOnline/problem?id=1269

题目大意:给两个点能够确定一条直线,题目给出两条直线(由4个点确定),要求判断出这两条直线的关系:平行,同线,相交。如果相交还要求出交点坐标。

二、解题思路

先判断两条直线是不是同线,不是的话再判断是否平行,再不是的话就只能是相交的,求出交点。

如何判断是否同线?由叉积的原理知道如果p1,p2,p3共线的话那么(p2-p1)X(p3-p1)=0。因此如果p1,p2,p3共线,p1,p2,p4共线,那么两条直线共线。direction()求叉积,叉积为0说明共线。

如何判断是否平行?由向量可以判断出两直线是否平行。如果两直线平行,那么向量p1p2、p3p4也是平等的。即((p1.x-p2.x)*(p3.y-p4.y)-(p1.y-p2.y)*(p3.x-p4.x))==0说明向量平等。

如何求出交点?这里也用到叉积的原理。假设交点为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=(c1*b2-c2*b1)/(a2*b1-a1*b2);

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

因为此处两直线不会平行,所以分母不会为0。

三、代码

#include<iostream>
using namespace std;
struct point
{
  double x,y;
};
double multi(point p1,point p2,point p0)
{
    return((p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y));
}
int judge(point a,point b,point c,point d)
{
    if((multi(a,b,c))==0&&(multi(b,c,d))==0) return 0;
    else if( ((a.x-b.x)*(c.y-d.y)-(a.y-b.y)*(c.x-d.x))==0 )  return -1;
    else return 1;

}
int main()
{
    point a,b,c,d;
    int n;
    double a1,b1,c1,a2,b2,c2,k;
    cin>>n;
    cout<<"INTERSECTING LINES OUTPUT"<<endl;
    for(int i=0;i<n;i++)
    {  cin>>a.x>>a.y>>b.x>>b.y>>c.x>>c.y>>d.x>>d.y;
       k=judge(a,b,c,d);
       if(k==0) cout<<"LINE"<<endl;
       if(k==-1) cout<<"NONE"<<endl;
       if(k==1)
       {
          a1=a.y-b.y;b1=b.x-a.x;c1=a.x*b.y-b.x*a.y;
          a2=c.y-d.y;b2=d.x-c.x;c2=c.x*d.y-d.x*c.y;
          point p;
          p.x=(c1*b2-c2*b1)/(a2*b1-a1*b2);
          p.y=(a2*c1-a1*c2)/(a1*b2-a2*b1);
          printf("POINT %.2f %.2f\n",p.x,p.y);

}
      }
      cout<<"END OF OUTPUT"<<endl;
      system("pause");
      return 0;
    }

poj 1069 Intersecting Lines相关推荐

  1. POJ 1269 Intersecting Lines(求直线交点)

    http://poj.org/problem?id=1269 求交点见zhhx课件 #include<iostream> #include<cstdio> #include&l ...

  2. POJ - 1269 Intersecting Lines(计算几何 + 叉积 + 跨立实验)

    链接 Intersecting Lines 题意 给出两条线段,判断是否共线,平行,或者相交,如果相交输出交点: 思路 如何判断共线: 我们知道两个向量叉积为 000,两向量共线: 所以我们只需要判断 ...

  3. 【POJ - 1269 】Intersecting Lines (计算几何,直线间的位置关系)

    题干: We all know that a pair of distinct points on a plane defines a line and that a pair of lines on ...

  4. POJ1269:Intersecting Lines(判断两条直线的关系)

    题目:POJ1269 题意:给你两条直线的坐标,判断两条直线是否共线.平行.相交,若相交,求出交点. 思路:直线相交判断.如果相交求交点. 首先先判断是否共线,之后判断是否平行,如果都不是就直接求交点 ...

  5. POJ1269 Intersecting Lines 计算几何 C语言

    题目:http://poj.org/problem?id=1269 题目大意:给出四个点确定两条直线.如果是一条线输出"LINE",如果平行输出"NONE", ...

  6. POJ1269:Intersecting Lines——题解

    http://poj.org/problem?id=1269 题目大意:给四个点,求前两个点所构成的直线和后两个点所构成的直线的位置关系(平行,重合,相交),如果是相交,输出交点坐标. ------- ...

  7. uva 378 Intersecting Lines

    题意:给你两条直线,求交点 分析:用叉积结合行列式做题,若共线重合输出LINE,若共线不重合输出NONE,若相交求出交点p0 /* 线段相交 */ #include <iostream> ...

  8. poj 3662 Telephone Lines spfa算法灵活运用

    意甲冠军: 到n节点无向图,它要求从一个线1至n路径.你可以让他们在k无条,的最大值.如今要求花费的最小值. 思路: 这道题能够首先想到二分枚举路径上的最大值,我认为用spfa更简洁一些.spfa的本 ...

  9. poj 3662 Telephone Lines(好题!!!二分搜索+dijkstra)

    Description Farmer John wants to set up a telephone line at his farm. Unfortunately, the phone compa ...

最新文章

  1. ORA-32004: obsolete and/or deprecated parameter(s) specified
  2. [Bash] Search for Text with `grep`
  3. 【多线程】多线程锁住的是什么、std::lock_guard<std::mutex> locker(mutex_)
  4. (转)Spring Boot(十二):Spring Boot 如何测试打包部署
  5. python pytest
  6. mysql 61错误解决方法
  7. Mysql中contact、group_concat、concat_ws、repeat
  8. python优秀源码2019_SUCTF2019,python源码分析,漏洞原理
  9. C语言 计算机考研408数据结构历年真题算法题简易暴力解
  10. 数字逻辑与数字电路知识点整理
  11. 3DMax教程: 3DMax快捷键与界面操作!
  12. @import ‘./common/stylus/mixins.styl‘引起的一系列错误
  13. 图像相似度比较之哈希算法
  14. 基础入门学习Python爬取微信公众号文章、标题、文章地址
  15. 印尼推出新的光伏发展激励措施
  16. Echarts参数属性学习Gird演示案例
  17. Go语言核心之美 3.4-Struct结构体
  18. android loadsvm raw,OpenCV机器学习:Android上利用SVM实现手写体数字识别
  19. IDEA mybatis XML文件格式化问题
  20. Android:音乐播放器(3)—从播放列表到播放歌曲

热门文章

  1. 联想笔记本摄像头被禁用
  2. 中国石油大学(北京)-《操作系统》第一次在线作业
  3. python网络爬虫技术课件_Python网络爬虫技术第7章 Scrapy爬虫.ppt
  4. proteus如何添加stm32_一个应用软件程序员的单片机STM32零基础入门
  5. 测试幼儿园指南纲要的软件,幼儿园指导纲要测试题
  6. 华科计算机学硕和武大,纠结武大和华科,看完这个分析表,你就会选了
  7. Mac系统快捷键大全(建议收藏)
  8. 网络安全老师的提问---第六章特洛伊木马
  9. 简单爬取阿里巴巴商品信息
  10. RGB 色彩表(tkinter使用,色彩名称,十六进制名称)