78-直线相交-计算几何
Posted zhumengdexiaobai
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了78-直线相交-计算几何相关的知识,希望对你有一定的参考价值。
- 描述
-
欢迎来到德莱联盟。。。。
德莱文。。。
德莱文在逃跑,卡兹克在追。。。。
我们知道德莱文的起点和终点坐标,我们也知道卡兹克的起点和 终点坐标,问:卡兹克有可能和德莱文相遇吗?,并且保证他们走的都是直线。
- 输入
- 几组数据,一个整数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
- 来源
- 原创
- 上传者
- ACM_王亚龙
-
#include <iostream> using namespace std; typedef struct node{ double x,y; }node; double chachen(node a, node b, node c){ //叉乘,ab X ac double x1, x2, y1, y2; x1 = b.x - a.x; y1 = b.y - a.y; x2 = c.x - a.x; y2 = c.y - a.y; return x1 * y2 - x2 * y1; } int isjiao(node a, node b, node c, node d){ //线段ab,cd的排斥实验,看是否可能相交 if(max(a.x, b.x) < min(c.x, d.x) || max(a.y, b.y) < min(c.y, d.y) || min(a.x, b.x) > max(c.x, d.x) || min(a.y, b.y) > max(c.y, d.y)) return 0; return 1; } int main(){ int t; cin >> t; while(t--){ node a[4]; for(int i = 0; i < 4; i++){ cin >> a[i].x >> a[i].y; } if(isjiao(a[0], a[1], a[2], a[3]) && chachen(a[0], a[1], a[2]) * chachen(a[0], a[1], a[3]) <= 0 && chachen(a[2], a[3], a[1]) * chachen(a[2], a[3], a[0]) <= 0 ){ cout << "Interseetion" << endl; } else{ cout << "Not Interseetion" << endl; } } return 0; }
以上是关于78-直线相交-计算几何的主要内容,如果未能解决你的问题,请参考以下文章
POJ 3304 Segments [计算几何,判断直线和线段相交]
Save Money for Your Company 最小矩形覆盖(非计算几何)/找出N条直线相交点的边缘点/ find the dominating points of N lines