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

题目大意:给出四个点确定两条直线。如果是一条线输出“LINE”,如果平行输出“NONE”, 如果有交点输出交点坐标。

思路:注意是直线,不是线段啊。

用两点式推出两条直线方程 :

 (y1 - y2)x + (x2 - x1)y = x2y1 - x1y2;
 (y3 - y4)x + (x4 - x3)y = x4y3 - x3y4;
 又由Cramer法则:
 a1x + b1y = c1;
 a2x + b2y = c2;
 D = a1b2 - a2b1; D1 = c1b2 - c2b1; D2 = a1c2 - a2c1;
 D != 0时, x = D1 / D, y = D2 / D; 得到交点坐标。
 D = 0时;如果a1 / a2 = b1 / b2 = c1 / c2 , 则四个点在一条直线上;否则两直线平行,无交点。
 
AC code:
#include <stdio.h>#include <stdlib.h>
 int main () { int n; int x1, y1, x2, y2, x3, y3, x4, y4; int a1, b1, c1, a2, b2, c2; int D, D1, D2; double x, y; scanf ("%d", &n); printf ("INTERSECTING LINES OUTPUT\n"); while (n--) {  scanf ("%d%d%d%d%d%d%d%d",&x1, &y1, &x2, &y2, &x3, &y3, &x4, &y4);  a1 = y1 - y2;                     // 由公式推出的关系  a2 = y3 - y4;  b1 = x2 - x1;  b2 = x4 - x3;  c1 = x2 * y1 - x1 * y2;  c2 = x4 * y3 - x3 * y4;  D = a1 * b2 - a2 * b1;  if (D) {                          // D != 0 运用Cramer法则求交点   D1 = c1 * b2 - c2 * b1;   D2 = a1 * c2 - a2 * c1;   x = (double)((double)D1 / D);   y = (double)((double)D2 / D);   printf ("POINT %.2lf %.2lf\n", x, y);  }  else   if (a1 * c2 == a2 * c1 && b1 * c2 == b2 * c1)  // 两直线重合    printf ("LINE\n");   else    printf ("NONE\n"); } printf ("END OF OUTPUT\n"); //system ("pause"); return 0;}
 
 
还有一个同学的代码, 用了结构体,但方法是一样的。
#include <stdio.h>#include <stdlib.h>
struct point{double x, y;};
int main(){ point p[4]; double A1, A2, B1, B2, C1, C2, D, D1, D2; int CASE; scanf("%d", &CASE); printf("INTERSECTING LINES OUTPUT\n"); while(CASE --){  for(int i = 0; i < 4; i ++)   scanf("%lf %lf", &p[i].x, &p[i].y); A1 = p[1].y - p[0].y;  B1 = p[0].x - p[1].x; C1 = p[0].y * (p[1].x - p[0].x) - p[0].x * (p[1].y - p[0].y); A2 = p[3].y - p[2].y;  B2 = p[2].x - p[3].x; C2 = p[2].y * (p[3].x - p[2].x) - p[2].x * (p[3].y - p[2].y); D = A1 * B2 - A2 * B1; if(D == 0){  if(A1 * p[2].x + B1 * p[2].y + C1 == 0) printf("LINE\n");  else printf("NONE\n");  continue; } D1 = C1 * B2 - C2 * B1; D2 = A1 * C2 - A2 * C1; printf("POINT %.2lf %.2lf\n", -D1 / D, -D2 / D); } printf("END OF OUTPUT\n"); //system("pause"); return 0;}
 
 这个题做完发现思路还是比较清晰的。开始时推直线方程用的是点斜式,相当麻烦,还会出现分母是不是零的问题,后来改用两点式,一下就简单了。判断直线重合时又出现了点小问题,后来想到a、b、c都要对应成比例才行,再提交就AC了。

转载于:https://www.cnblogs.com/cloehui/archive/2011/07/20/2111395.html

POJ1269 Intersecting Lines 计算几何 C语言相关推荐

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

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

  2. 【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 ...

  3. POJ1269:Intersecting Lines——题解

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

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

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

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

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

  6. uva 378 Intersecting Lines

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

  7. poj 1069 Intersecting Lines

    POJ 1269 Intersecting Lines 解题报告 (2010-05-07 19:10) 一.问题描述 http://acm.pku.edu.cn/JudgeOnline/problem ...

  8. 杭电oj题目题型分类(转)

    1001 整数求和 水题 1002 C语言实验题--两个数比较 水题 1003 1.2.3.4.5... 简单题 1004 渊子赛马 排序+贪心的方法归并 1005 Hero In Maze 广度搜索 ...

  9. HDOJ题目分类大全

    版权声明:本文为博主原创文章,欢迎转载,转载请注明本文链接! https://blog.csdn.net/qq_38238041/article/details/78178043 杭电里面有很多题目, ...

最新文章

  1. [洛谷3812]【模板】线性基
  2. 零售行业O2O盛行 或成黑客窃取数据目标
  3. JAVA单态设计模式
  4. linux history 历史命令行查询和使用
  5. 2021年北京高校数学建模校际联赛题目_B
  6. TensorRT(2)-基本使用:mnist手写体识别
  7. 初学linux,在Linux上创建c程序并运行!
  8. Oracle与MySQL使用区别
  9. 计算机视觉实战(七)图像金字塔与轮廓检测
  10. 光学定位与追踪技术_从显微镜到显纳镜:小于2nm定位精度光学显微镜
  11. 【jQueryWEUI】自定义对话框-带有textarea
  12. TapTap 发布游戏
  13. 2019年云计算发展趋势,今年十大云计算趋势
  14. 反客为主:巧妙用grldr冒名顶替ntldr引导XP/Ubuntu
  15. 回炉重造--PHP编程速成
  16. c语言用十年算入门,初识C语言_十年饮冰 难凉热血的技术博客_51CTO博客
  17. 互联网领袖高峰对话:大佬们之间的对掐
  18. Word高效指南 - 快速合并多个文档
  19. 华测P550数据导入睿铂Skyscanner工作流程
  20. 汇哲信息系统审计师考试源题库Pass CISA非你莫属

热门文章

  1. SpringBoot集成Redis用法笔记
  2. c语言统计数据,数据统计
  3. Maven,在pom.xml配置JDK 9版本。
  4. 提升UI技能的5个步骤
  5. matlab中的:的优先级_内容早期设计:内容优先
  6. 初级爬虫师_初级设计师的4条视觉原则
  7. 写在2021: 值得关注/学习的前端框架和工具库
  8. webpack 配置详解
  9. Ajax基本案例详解之load的实现
  10. HBuilder 打包流程