德莱联盟 计算几何 线段相交
- 描述
-
欢迎来到德莱联盟。。。。
德莱文。。。
德莱文在逃跑,卡兹克在追。。。。
我们知道德莱文的起点和终点坐标,我们也知道卡兹克的起点和 终点坐标,问:卡兹克有可能和德莱文相遇吗?,并且保证他们走的都是直线。
- 输入
-
几组数据,一个整数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
德莱联盟 计算几何 线段相交相关推荐
- NYOJ 1016 德莱联盟(计算几何 线段相交判定)
判断两条线段是否相交. 在判断两条线段是否相交时,我们常用快速排斥实验跟跨立实验这两种方法,快速排斥实验能很快的排除掉线段不相交的情况,但并没法成为线段相交的充要条件,在快速排斥实验之后接上跨立实验就 ...
- 德莱联盟[判断线段相交]
德莱联盟 时间限制:1000 ms | 内存限制:65535 KB 难度:1 描述 欢迎来到德莱联盟.... 德莱文... 德莱文在逃跑,卡兹克在追.... 我们知道德莱文的起点和终点坐标,我们也 ...
- NYOJ1016(德莱联盟)(判断线段相交)
德莱联盟 时间限制:1000 ms | 内存限制:65535 KB 难度:1 描述 欢迎来到德莱联盟.... 德莱文... 德莱文在逃跑,卡兹克在追.... 我们知道德莱文的起点和终点坐标,我们也 ...
- 德莱联盟(判断两个线段是否相交)
德莱联盟 时间限制:1000 ms | 内存限制:65535 KB 难度:1 描述 欢迎来到德莱联盟.... 德莱文... 德莱文在逃跑,卡兹克在追.... 我们知道德莱文的起点和终点坐标,我们也 ...
- 德莱联盟(判断线段是否相交)
德莱联盟 时间限制:1000 ms | 内存限制:65535 KB 难度:1 描述 欢迎来到德莱联盟.... 德莱文... 德莱文在逃跑,卡兹克在追.... 我们知道德莱文的起点和终点坐标,我们也 ...
- nyoj1016德莱联盟【判断两线段是否相交】
德莱联盟 时间限制:1000ms | 内存限制:65535KB 难度:1 描述 欢迎来到德莱联盟.... 德莱文... 德莱文在逃跑,卡兹克在追.... 我们知道德莱文的起点和终点坐标,我们也知道 ...
- NYOJ1016:德莱联盟(判线段相交)
德莱联盟 时间限制:1000ms | 内存限制:65535KB 难度:1 描述 欢迎来到德莱联盟.... 德莱文... 德莱文在逃跑,卡兹克在追.... 我们知道德莱文的起点和终点坐标,我们也知道 ...
- 德莱联盟(判断两点是否相交 nyist)
描述 欢迎来到德莱联盟.... 德莱文... 德莱文在逃跑,卡兹克在追.... 我们知道德莱文的起点和终点坐标,我们也知道卡兹克的起点和中点坐标,问:卡兹克有可能和德莱文相遇吗?,并且保证他们走的都是 ...
- XYNUOJ-2139 德莱联盟
2139: 德莱联盟 时间限制: 1 Sec 内存限制: 64 MB 提交: 7 解决: 3 您该题的状态:已完成 [提交][状态][讨论版] 题目描述 欢迎来到德莱联盟.... 德莱文... 德 ...
最新文章
- 单片机c语言的按键程序,51单片机按键扫描C程序
- CentOS7安装配置redis5.0.5
- win10打开计算机黑屏怎么办,教你如何解决win10电脑开机黑屏的问题
- js正则 匹配 正则表达式
- linux内核那些事之buddy
- 优秀!Jupyter 与 PyCharm 可以完美融合!
- P1510 精卫填海
- Jabber 创建一个application dial rule
- cuda10安装_Mmdetection的安装和使用
- java向注册表单传递数据php_form表单传递数组数据、php脚本接收的实例
- photoshop 前端切图基础教程
- cad立面索引符号 规范_cad立面索引符号怎么画
- 二进制加法器原理c语言,加法器电路原理图解_二进制加法器理解
- 文档类型字符集即HTML标签的语义化
- 中科大和华师大计算机,今天就是你最后的机会,2019华师软件工程跨考经验
- postgres 删除 shema
- 为你的App瘦身,优化你的App
- 跨境电商综试区为跨境电商发展添活力
- Handler: Activity 之间通过 Handler 通信
- 网购使用的计算机网络技术,浅议计算机网络技术的应用与发展