[51nod1264]线段相交

给定两个点:

typedef  struct {

  double  x, y;

} Point;

Point A1,A2,B1,B2;

首先引入两个实验:

a.快速排斥实验

设以线段A1A2和线段B1B2为对角线的矩形为M,N;

若M,N 不相交,则两个线段显然不相交;

所以:满足第一个条件时:两个线段可能相交。

 

b.跨立实验

 

如果两线段相交,则两线段必然相互跨立对方.若A1A2跨立B1B2,则矢量( A1 - B1 ) 和(A2-B1)位于矢量(B2-B1)的两侧,

即(A1-B1) × (B2-B1) * (A2-B1) × (B2-B1)<0。

上式可改写成(A1-B1) × (B2-B1) * (B2-B1) × (A2-A1)>0。

应该判断两次,即两条线段都要为直线,判断另一直线的两端点是否在它两边,若是则两线段相交。

若积极满跨立实验是不行的,如下面的情况:

 

即两条线段在同一条直线上。所以我们要同时满足两次跨立和快速排斥实验。

 

总体分析:

当(A1-B1) × (B2-B1)=0时,说明(A1-B1)和(B2-B1)共线,但是因为已经通过快速排斥试验,所以 A1一定在线段 B1B2上;同理,(B2-B1)×(A2-B1)=0 说明A2一定在线段B1B2上。所以判断A1A2跨立B1B2的依据是:(A1-B1) × (B2-B1) * (B2-B1) × (A2-B1) >= 0。

同理判断B1B2跨立A1A2的依据是:(B1-A1) × (A2-A1) * (A2-A1) × (B2-A1) >= 0。

如图:

 

应用:

1.       判断两个线段相交

2.       判断线段与直线相交

3.       判断点在矩形内

 

模板题

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 struct line{
 5     double x1,y1,x2,y2;
 6 }p,q;
 7 double cross1(line &a,line &b){
 8     return (a.x1-b.x1)*(b.y2-b.y1)-(a.y1-b.y1)*(b.x2-b.x1);
 9 }
10 double cross2(line &a,line &b){
11     return (a.x2-b.x1)*(b.y2-b.y1)-(a.y2-b.y1)*(b.x2-b.x1);
12 }
13 bool judge(line &a,line &b){
14     if(max(a.x1,a.x2)>=min(b.x1,b.x2)&&
15         max(a.y1,a.y2)>=min(a.y1,a.y2)&&
16         max(b.x1,b.x2)>=min(a.x1,a.x2)&&
17         max(b.y1,b.y2)>=min(a.y1,a.y2)&&
18         cross1(a,b)*cross2(a,b)<=0&&
19         cross1(b,a)*cross2(b,a)<=0)
20     return true;
21     return false;
22 }
23 int main(){
24     int t;
25     cin>>t;
26     while(t--){
27         cin>>p.x1>>p.y1>>p.x2>>p.y2>>q.x1>>q.y1>>q.x2>>q.y2;
28         if(judge(p,q)) cout<<"Yes\n";
29         else cout<<"No\n";
30     } 
31 }

 

转载于:https://www.cnblogs.com/elpsycongroo/p/6914812.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/269297.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

谁来理解外来工的孩子的心理健康?

儿子的心情最近不太好。我住在公司管理层宿舍里&#xff0c;儿子一直都感觉比较寂寞&#xff0c;因为这里基本上没有他的同伴。中午&#xff0c;儿子拿着他心爱的枪&#xff0c;站在食堂的旁边&#xff0c;忧郁地看着每一个匆匆赶路的人。他的心里肯定在想&#xff1a;这些人为…

Qt 在designer 中给QToolBar 添加 action控件

Qt 在designer 中给QToolBar 添加 action控件 1.在action editor 添加控件 SendData不出现使用打钩时 2. 使用鼠标直接拖拽到Ui指定位置

Windows环境下通过Git来管理自己的Android代码

前面已经介绍了在Windows下使用git工具来下载Android的源代码&#xff0c;Windows环境下通过Git得到Android源代码&#xff0c;这里记录我使用git工具来管理我自己的代码&#xff0c;git是一种分布式的项目管理工具而CVS及SVN都是集中式的版本号控制系统集中式版本号控制系统最…

rh9.0虚拟机dmesg启动过程分析(1)

Linux version 2.4.20-8 ([email]bhcompileporky.devel.redhat.com[/email]) (gcc version 3.2.2 20030222 (Red Hat Linux 3.2.2-5)) #1 Thu Mar 13 17:54:28 EST 2003#linux内核版本&#xff1a;2.4.20-8#Gcc版本&#xff0c;c编译器版本&#xff1a;3.2.2#当前发行版本的发布…

Qt QByteArray 转换 QString QT5.12.7

Qt QByteArray 转换 QString QT5.12.7 void MainWindow::slot_send() { const QString data m_sendLineEdit->text(); qDebug() << "shu ru: " << data.toLocal8Bit(); QByteArray data1 data.toLocal8Bit(); writeData(data1); }

Hello world开始

一切都从Hello world开始&#xff0c;代码如下&#xff1a; 1 #!/usr/bin/env python 定义程序执行过程中调用的环境 在linux下 直接调用python来解析执行该文件 2 #-*- coding:utf-8 -*- 也可以是 #codingutf-8 &#xff0c;作用是设置代码在执行过程中的编码形式&…

ASP中事务处理资料收集

在IIS 中&#xff0c;ASP结构提供了六个内建对象&#xff0c; 内建对象的特殊性在于&#xff0c;它们在 ASP 页内生成且在脚本中使用它们前无须创建。其中&#xff0c;内建对象ObjectContext专门用于支持开发基于Microsoft Transaction Server&#xff08;MTS&…

2020年工作总结大会感悟

数字孪生&#xff1a;具有数据预测分析意义 开发工作: 高质量以做产品的标准去思考 最主要的问题&#xff1a;沟通增加 现场经验: 遇事处理先冷静下来想办法&#xff0c;戒急戒躁 转变观念: 善于求助问题&#xff0c;乐于帮助求助者&#xff0c;心中有集体花少的时间做更多的事…

2016和2017的区别就是昨晚和今早

2016和2017的区别就是昨晚和今早 也是历史和未来 只是在跨年份是时候更有感觉&#xff0c;更让人思考和感叹。一年这个周期寒来暑往秋收冬藏&#xff0c;对我们的目标再审视&#xff0c;我们的收莸再总结&#xff0c;对我们的不足再反思&#xff0c;对我们的心态用调整。 形势比…

dot Net Frameworks中常见的设计模式

响应一下Anders Liu的号召(http://www.cnblogs.com/AndersLiu/archive/2007/05/29/763456.html)&#xff0c;列几个自己经常遇到的实现SINGLETON&#xff1a;System.DBNull.Value FACTORY METHOD&#xff1a;System.Data.IDbConnection.CreateCommand ()、System.Data.IDbComma…

如何构建一个向导操作模式程序

引导新用户熟悉产品的方式多种多样&#xff0c;向导程序是其中最经典也是最常用的一种。今天的文章&#xff0c;我们来聊聊向导程序的设计模式。 什么是向导程序 向导程序通常会提供一系列的步骤或者目标&#xff0c;让用户在完成步骤达成目标的过程中&#xff0c;逐步熟悉这个…

13 Tensorflow机制(翻译)

代码&#xff1a; tensorflow/examples/tutorials/mnist/ 本文的目的是来展示如何使用Tensorflow训练和评估手写数字识别问题。本文的观众是那些对使用Tensorflow进行机器学习感兴趣的人。 本文的目的并不是讲解机器学习。 请确认您已经安装了Tensorflow。 教程文件 文件作用mn…

鸟哥的 Linux 私房菜7 -- 首次开机关机与基本指令执行

鸟哥的 Linux 与 ADSL 私房菜 开机、关机、在线求助与指令下达方式最近更新日期&#xff1a;2004/05/01第一次登入系统与离开系统 图形模式与文字模式的切换方式 指令下达方式与基础指令练习 在线求助&#xff1a;man, info 正确的关机方式 开机过程的问题排解 本章习题练习 第…

Ignoring query to other database

Ignoring query to other database Ignoring query to other database 自己今天刚遇到&#xff0c;进入MySQL的时候&#xff0c;输入show databases; 产生如下错误 错误提示 Ignoring query to other database 郁闷&#xff0c;半天&#xff0c;怎么查询不了&#xff0c;开…

Qt QObject::connect: Parentheses expected错误原因

Qt 运行提示 QObject::connect: Parentheses expected, signal QUdpSocket::readyRead in …\terminal\net103.cpp:55 这个是 signal希望一个父类&#xff0c;其实是因为slot 函数 &#xff0c;声明没有在放在private slots: 错误原因&#xff1a;槽函数错误的放在 private&a…

有趣的Web版Ubuntu Linux

其实这不是真的 Ubuntu 啦。不过&#xff0c;在看到 Wubuntu 时&#xff0c;其逼真的模仿效果真是令人惊叹不已。不管怎么样&#xff0c;让我们来体验一把 Web 版的 Ubuntu 吧。首先&#xff0c;我们会经历一个 Ubuntu 启动过程。其启动画面与真实的 Ubuntu 一模一样。接着&…

东软、天健、金仕达、杭创、中联、NECHIS、军字一号 HIS产品的比较

HIS主流厂商产品介绍1、沈阳东软医疗系统有限公司创立于1998年公司是中国目前最大的软件集团——东软集团为技术和资源依托&#xff0c;以研制生产大型医疗设备为主&#xff0c;同时为医院数字化提供全面解决方案。但是&#xff0c;公司改制后&#xff0c;PACS事业部与HIS事业部…