难度:1
描述

欢迎来到德莱联盟。。。。

德莱文。。。

德莱文在逃跑,卡兹克在追。。。。

我们知道德莱文的起点和终点坐标,我们也知道卡兹克的起点和 终点坐标,问:卡兹克有可能和德莱文相遇吗?,并且保证他们走的都是直线。

输入
几组数据,一个整数T表示T组数据
每组数据 8个实数,分别表示德莱文的起点和终点坐标,以及卡兹克的起点和终点坐标
输出
如果可能 输出 Interseetion,否则输出 Not Interseetion
样例输入
2
-19.74 7.14 22.23 -27.45 -38.79 -5.08 47.51 34.01
-8.61 9.91 -32.47 6.47 -3.81 -16.1 7.82 -6.37
样例输出
Interseetion
Not Interseetion
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<sstream>
#include<algorithm>
#include<queue>
#include<deque>
#include<iomanip>
#include<vector>
#include<cmath>
#include<map>
#include<stack>
#include<set>
#include<fstream>
#include<memory>
#include<list>
#include<string>
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
#define MAXN 2000000003
#define N 21
#define MOD 1000000
#define INF 1000000009
//#define eps 0.00000001
const double PI = acos(-1.0);
double torad(double deg) { return deg / 180 * PI; }struct Point
{double x, y;Point(double x = 0, double y = 0) :x(x), y(y) { }
};typedef Point Vector;Vector operator + (const Vector& A, const Vector& B) { return Vector(A.x + B.x, A.y + B.y); }
Vector operator - (const Point& A, const Point& B) { return Vector(A.x - B.x, A.y - B.y); }
Vector operator * (const Vector& A, double p) { return Vector(A.x*p, A.y*p); }
Vector operator / (const Vector& A, double p) { return Vector(A.x / p, A.y / p); }bool operator < (const Point& a, const Point& b)    //结构体运算符的重载
{return a.x < b.x || (a.x == b.x && a.y < b.y);
}const double eps = 1e-8;
int dcmp(double x) { if (fabs(x) < eps) return 0; else return x < 0 ? -1 : 1; }bool operator == (const Point& a, const Point &b)
{return dcmp(a.x - b.x) == 0 && dcmp(a.y - b.y) == 0;
}//基本运算:
double dist(const Vector& A, const Vector& B) { return sqrt(pow(A.x - B.x, 2) + pow(A.y - B.y, 2)); }
double Dot(const Vector& A, const Vector& B) { return A.x*B.x + A.y*B.y; }//点乘
double Length(const Vector& A) { return sqrt(Dot(A, A)); }
double Angle(const Vector& A, const Vector& B) { return acos(Dot(A, B) / Length(A) / Length(B)); }
double Cross(const Vector& A, const Vector& B) { return A.x*B.y - A.y*B.x; }//叉乘
double Area2(Point A, Point B, Point C) { return Cross(B - A, C - A); }//向量旋转 rad是弧度
Vector Rotate(const Vector& A, double rad)
{return Vector(A.x*cos(rad) - A.y*sin(rad), A.x*sin(rad) + A.y*cos(rad));
}
//点和直线:
//两直线的交点
Point GetLineIntersection(const Point& P, const Point& v, const Point& Q, const Point& w)
{Vector u = P - Q; double t = Cross(w, u) / Cross(v, w);return P + v*t;
}//点到直线的距离
double DistanceToLine(const Point& P, const Point& A, const Point& B)
{Vector v1 = B - A, v2 = P - A;return fabs(Cross(v1, v2)) / Length(v1);
}//点到线段的距离
double DistanceToSegment(const Point& P, const Point& A, const Point& B)
{if (A == B) return Length(P - A);Vector v1 = B - A, v2 = P - A, v3 = P - B;if (dcmp(Dot(v1, v2)) < 0) return Length(v2);else if (dcmp(Dot(v1, v3)) > 0) return Length(v3);else return fabs(Cross(v1, v2)) / Length(v1);
}//点在直线上的投影
Point GetLineProjection(const Point &P, const Point &A, const Point &B)
{Vector v = B - A;return A + v*(Dot(v, P - A) / Dot(v, v));
}//线段相交判定
bool SegmentProperIntersection(const Point& a1, const Point& a2, const Point& b1, const Point& b2)
{double c1 = Cross(a2 - a1, b1 - a1), c2 = Cross(a2 - a1, b2 - a1),c3 = Cross(b2 - b1, a1 - b1), c4 = Cross(b2 - b1, a2 - b1);return dcmp(c1)*dcmp(c2)<0 && dcmp(c3)*dcmp(c4)<0;
}//判断点在线段上(两个端点除外)
bool OnSegment(const Point& p, const Point& a1, const Point& a2)
{return dcmp(Cross(a1 - p, a2 - p)) == 0 && dcmp(Dot(a1 - p, a2 - p)) < 0;
}int main()
{Vector a, b, c, d;int T;scanf("%d", &T);while (T--){cin >> a.x >> a.y >> b.x >> b.y >> c.x >> c.y >> d.x >> d.y;if (SegmentProperIntersection(a, b, c, d))printf("Interseetion\n");elseprintf("Not Interseetion\n");}return 0;
}

转载于:https://www.cnblogs.com/joeylee97/p/6925005.html

德莱联盟 计算几何 线段相交相关推荐

  1. NYOJ 1016 德莱联盟(计算几何 线段相交判定)

    判断两条线段是否相交. 在判断两条线段是否相交时,我们常用快速排斥实验跟跨立实验这两种方法,快速排斥实验能很快的排除掉线段不相交的情况,但并没法成为线段相交的充要条件,在快速排斥实验之后接上跨立实验就 ...

  2. 德莱联盟[判断线段相交]

    德莱联盟 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 描述 欢迎来到德莱联盟.... 德莱文... 德莱文在逃跑,卡兹克在追.... 我们知道德莱文的起点和终点坐标,我们也 ...

  3. NYOJ1016(德莱联盟)(判断线段相交)

    德莱联盟 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 描述 欢迎来到德莱联盟.... 德莱文... 德莱文在逃跑,卡兹克在追.... 我们知道德莱文的起点和终点坐标,我们也 ...

  4. 德莱联盟(判断两个线段是否相交)

    德莱联盟 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 描述 欢迎来到德莱联盟.... 德莱文... 德莱文在逃跑,卡兹克在追.... 我们知道德莱文的起点和终点坐标,我们也 ...

  5. 德莱联盟(判断线段是否相交)

    德莱联盟 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 描述 欢迎来到德莱联盟.... 德莱文... 德莱文在逃跑,卡兹克在追.... 我们知道德莱文的起点和终点坐标,我们也 ...

  6. nyoj1016德莱联盟【判断两线段是否相交】

    德莱联盟 时间限制:1000ms  |  内存限制:65535KB 难度:1 描述 欢迎来到德莱联盟.... 德莱文... 德莱文在逃跑,卡兹克在追.... 我们知道德莱文的起点和终点坐标,我们也知道 ...

  7. NYOJ1016:德莱联盟(判线段相交)

    德莱联盟 时间限制:1000ms  |  内存限制:65535KB 难度:1 描述 欢迎来到德莱联盟.... 德莱文... 德莱文在逃跑,卡兹克在追.... 我们知道德莱文的起点和终点坐标,我们也知道 ...

  8. 德莱联盟(判断两点是否相交 nyist)

    描述 欢迎来到德莱联盟.... 德莱文... 德莱文在逃跑,卡兹克在追.... 我们知道德莱文的起点和终点坐标,我们也知道卡兹克的起点和中点坐标,问:卡兹克有可能和德莱文相遇吗?,并且保证他们走的都是 ...

  9. XYNUOJ-2139 德莱联盟

    2139: 德莱联盟 时间限制: 1 Sec  内存限制: 64 MB 提交: 7  解决: 3 您该题的状态:已完成 [提交][状态][讨论版] 题目描述 欢迎来到德莱联盟.... 德莱文... 德 ...

最新文章

  1. 单片机c语言的按键程序,51单片机按键扫描C程序
  2. CentOS7安装配置redis5.0.5
  3. win10打开计算机黑屏怎么办,教你如何解决win10电脑开机黑屏的问题
  4. js正则 匹配 正则表达式
  5. linux内核那些事之buddy
  6. 优秀!Jupyter 与 PyCharm 可以完美融合!
  7. P1510 精卫填海
  8. Jabber 创建一个application dial rule
  9. cuda10安装_Mmdetection的安装和使用
  10. java向注册表单传递数据php_form表单传递数组数据、php脚本接收的实例
  11. photoshop 前端切图基础教程
  12. cad立面索引符号 规范_cad立面索引符号怎么画
  13. 二进制加法器原理c语言,加法器电路原理图解_二进制加法器理解
  14. 文档类型字符集即HTML标签的语义化
  15. 中科大和华师大计算机,今天就是你最后的机会,2019华师软件工程跨考经验
  16. postgres 删除 shema
  17. 为你的App瘦身,优化你的App
  18. 跨境电商综试区为跨境电商发展添活力
  19. Handler: Activity 之间通过 Handler 通信
  20. 网购使用的计算机网络技术,浅议计算机网络技术的应用与发展

热门文章

  1. 双系统开机 进入grub resource,并且进不bios
  2. BTN7971电机驱动
  3. JS复习笔记之造new轮子
  4. 差文解析 IIRC: Incremental Implicitly-Refined Classification
  5. 18张图,揭开阿里巴巴开发手册强制使用SLF4J作为门面担当的秘密
  6. 服务器cadence比虚拟机慢,Cadence版本选择浅见
  7. 我是如何录制技术视频教程的?
  8. python 写入Excel
  9. Envoy 架构、术语与基本配置解析
  10. 用CMSS指令提高串口群发短信的效率