链接 Intersecting Lines

题意

给出两条线段,判断是否共线,平行,或者相交,如果相交输出交点;

思路

如何判断共线:

我们知道两个向量叉积为 000,两向量共线;

所以我们只需要判断 a⃗×d⃗=0\vec{a} \times\vec{d} = 0a×d=0 和 a⃗×b⃗=0\vec{a}\times\vec{b} = 0a×b=0 即可;

如何判断平行:

写出两点式直线方程,判断斜率即可;

如何判断相交:

这个题其实不用考虑相交条件,当上面两个条件都不符合的时候就相交了,但是还是想说一下,用跨立实验


跨立实验也就是 AAA 线段的两个端点在 BBB 线段两侧, BBB 线段的两个端点在 AAA 线段两侧;

至于如何判断两点在线段两侧,需要用到叉积;


当 (b⃗×c⃗)∗(a⃗×c⃗)<=0(\vec{b}\times\vec{c})*(\vec{a}\times\vec{c})<=0(b×c)∗(a×c)<=0 即可判断两端点在线段两侧;

求交点


我们只需要解一个方程组:

AQ⃗×AB⃗=0\vec{AQ}\times\vec{AB}=0AQ​×AB=0
CQ⃗×CD⃗=0\vec{CQ}\times\vec{CD}=0CQ​×CD=0

带入坐标即可求得交点;

呼~应该说的够详细了叭QAQ

AC代码

#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstring>
#define mes memset
#define mec memcpy
#define x first
#define y second
#define pb push_back
#define be(x) (x).begin(), (x).end()
#define cl(x) memset((x), 0, sizeof (x))
#define sz(x) (int)(x).size()using namespace std;typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> PII;
typedef pair<ll, ll> PLL;
typedef pair<double, double> PDD;//const double pi = acos(-1);
const double eps = 1e-8;
const int N = 100010;
const int null = 0x3f3f3f3f,INF = 1e9;
const ll mod = 998244353;int T;
PDD x1, y_1, x2, y2;double cross(PDD a, PDD b) {return a.x * b.y - b.x * a.y;}PDD mul(PDD a, PDD b)
{PDD c;c.x = a.x - b.x;c.y = a.y - b.y;return c;
}int cmp(double x, double y)
{if (fabs(x - y) < eps) return 0;if (x < y) return -1;return 1;
}double sign(double x)
{if (fabs(x) < eps) return 0;if (x < 0) return -1;return 0;
}int main()
{scanf("%d", &T);puts("INTERSECTING LINES OUTPUT");while (T --){scanf("%lf%lf%lf%lf%lf%lf%lf%lf", &x1.x, &x1.y, &y_1.x, &y_1.y, &x2.x, &x2.y, &y2.x, &y2.y);if (!cross(mul(x1, y_1), mul(x2, y_1)) && !cross(mul(x1, y_1), mul(x1, y2))) puts("LINE");else if (!cmp((y_1.y - x1.y) * (y2.x - x2.x), (y2.y - x2.y) * (y_1.x - x1.x))) puts("NONE");else{double x = (y_1.x - x1.x);double y = (y_1.y - x1.y);double z = (y2.x - x2.x);double w = (y2.y - x2.y);double u = (x2.y - x1.y);double v = (x1.x - x2.x);double x0 = (x1.x * y * z - x2.x * w * x + u * z * x) / (y * z - w * x);double y0 = (x2.y * z * y - x1.y * x * w + v * y * w) / (z * y - w * x);printf("POINT %.2lf %.2lf\n", x0, y0);//cout << x0 << endl;}}puts("END OF OUTPUT");
}

END

POJ - 1269 Intersecting Lines(计算几何 + 叉积 + 跨立实验)相关推荐

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

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

  2. poj 1069 Intersecting Lines

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

  3. 【计算几何】判断线段相交(跨立实验)

    题意:有n条线段(编号为1n),按1n的顺序放在二维坐标系上(就是先放1号,再放2号--),要求输出最上面的那些线段的编号.(就是没有其他线段压在它上面的那些线段) 注意:有交点即为被压. 1.叉积 ...

  4. 【代码超详解】ZOJ 2551 / POJ 2653 Pick-up Sticks(快速排斥实验 + 跨立实验判断线段是否相交 · 模板)

    一.传送门 http://poj.org/problem?id=2653 https://zoj.pintia.cn/problem-sets/91827364500/problems/9182736 ...

  5. 计算几何——快速排斥实验和跨立实验

    两条线段有且仅有一个公共点,且这个点不是任何一条线段的端点时,称这两条线段是严格相交的. 也就是说线段不严格相交时可以将端点作为交点,但本文不讨论不严格相交,只讨论严格相交的情况(即使它们在算法实现上 ...

  6. 计算几何--快速排斥实验和跨立实验

    1.快速排序实验 两条线段有且仅有一个公共点,且这个点不是任何一条线段的端点时,称这两条线段是严格相交的.快速排斥实验能很快的排除掉线段不相交的情况,但并没法成为线段相交的充要条件,在快速排斥实验之后 ...

  7. 【计算几何】快速排斥实验和跨立实验

    1.快速排序实验 两条线段有且仅有一个公共点,且这个点不是任何一条线段的端点时,称这两条线段是严格相交的.快速排斥实验能很快的排除掉线段不相交的情况,但并没法成为线段相交的充要条件,在快速排斥实验之后 ...

  8. 计算几何_线段交点的快速排斥_跨立实验

    附上题的地址 https://vjudge.net/problem/HDU-1086# // 点是否在矩形 // 矩形点是 st 和 ed bool IsPointInRectangle(Point ...

  9. POJ 1127 跨立实验和快速排斥实验

    还是那道题 但是这次有一个全新的解法了,涉及到的跨立实验和快速排斥实验,在学习部分我有提及过. 不多说直接上一下核心代码 直接进行双实验,如果快速排斥不通过 直接PASS 之后再进行跨立实验,如果成了 ...

最新文章

  1. java 的 i++ 和 ++i 的区别
  2. 在 JavaFX 中,如何计算文本所占像素的宽度
  3. 【最详细解析】1052 卖个萌 (20分)_28行代码AC
  4. mysql统计数据的代码_MySQL按时间统计数据的方法介绍(代码示例)
  5. 待遇 新时达机器人_践行中国制造2025:工业机器人企业突围之路
  6. 记一次 Vue2 迁移 Vue3 的实践总结
  7. 年度加密漏洞提前锁定:Java JDK 加密实现漏洞可用于伪造凭据
  8. windows2008系统缓存修改
  9. atitit 信息存储理论专题 目录 1.1. ACID 1 1.2. 一致性相关的理论 CAP(CA、CP、AP 的相关算法) 1 1.3. BASE 理论。 1 1.4. FLP不可能原理 1
  10. Listary 6双击Ctrl失效
  11. 《Nature》论文插图复刻第3期—面积图(Part2-100)
  12. 渗透测试工程师常见面试33题——应届生
  13. java生成png热力图_热力图与原始图像融合
  14. waterfall model
  15. wnmp mysql_WNMP(Window系统+Nginx服务器+Mysql数据库+PHP)
  16. 关于笔记本加固态硬盘装系统的问题的解决办法
  17. python关闭excel进程_python win32com关闭Excel进程
  18. vue网页打印针式打印机内容显示不全
  19. HTML 星空动图背景(canvas+JS)
  20. 微信小程序获取数据接口动态渲染Echarts折线图

热门文章

  1. easy-captcha
  2. ubuntu设置网络连接
  3. 用python写秒杀程序_Python 实现淘宝秒杀的示例代码
  4. 淘宝首页之导航条——弹出式悬浮菜单
  5. 【网页前端】CSS常用布局之定位
  6. DirectDraw 基础篇
  7. 计算时间差 用timespan函数
  8. android 只输入数字与小数点_Android EditText设置只能输入数字和小数点
  9. 如何用java代码生成Word文档和签字以及导出pdf文件
  10. 方差,样本方差,修正样本方差,均值,样本均值等概念