POJ1410 Intersection 计算几何
题目大意:给出一个线段的两端,和矩形两端(不一定是左上和右下),问线段是否与矩形相交(若线段在矩形内也算相交)。这题蒸鹅心……
题目思路:判断所有情况:线段是否在矩形内,线段内一点是否在矩形内,线段是否与四边相交(叉积),线段的两端是否在矩形上,矩形的四点是否在线段上。
要注意的是:
1.如果两条线段的叉积为0,也可能共线但不相交。
2.判断点在线段上的方法:叉积为0,且到两点的距离与线段等长。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
#define MAXSIZE 100005
#define INF 0x3f3f3f3f
#define LL long long using namespace std; //给出一个线段的两端,和矩形两端(不一定是左上和右下),问线段是否与矩形相交(若线段在矩形内也算相交)。这题蒸鹅心…… int px1,py1,px2,py2,lx,ly,rx,ry; int Cross(int x1,int y1,int x2,int y2,int x3,int y3)
{
return (x1-x2)*(y2-y3)-(x2-x3)*(y1-y2);
} int Check(int x1,int y1,int x2,int y2)
{
int op1=Cross(px1,py1,x1,y1,x2,y2)*Cross(px2,py2,x1,y1,x2,y2);
int op2=Cross(x1,y1,px1,py1,px2,py2)*Cross(x2,y2,px1,py1,px2,py2);
if(op1< && op2 <)
return ;
return ;
} int Dist(int x1,int y1,int x2,int y2,int x3,int y3)
{
double d1=sqrt((x2-x1)*(x2-x1)*1.0+(y2-y1)*(y2-y1)*1.0);
double d2=sqrt((x3-x1)*(x3-x1)*1.0+(y3-y1)*(y3-y1)*1.0);
double d3=sqrt((x3-x2)*(x3-x2)*1.0+(y3-y2)*(y3-y2)*1.0);
if(fabs(d1+d2-d3) < 1e-)
return ;
return ;
} int Solve()
{
//线段是否在圆内
if(px1>=lx && px1<=rx && py1<=ly && py1>=ry)
return ;
if(px2>=lx && px2<=rx && py2<=ly && py2>=ry)
return ;
//四角是否在线段上
if(Cross(lx,ly,px1,py1,px2,py2)== && Dist(lx,ly,px1,py1,px2,py2))
return ;
if(Cross(lx,ry,px1,py1,px2,py2)== && Dist(lx,ry,px1,py1,px2,py2))
return ;
if(Cross(rx,ry,px1,py1,px2,py2)== && Dist(rx,ry,px1,py1,px2,py2))
return ;
if(Cross(rx,ly,px1,py1,px2,py2)== && Dist(rx,ly,px1,py1,px2,py2))
return ;
//线段是否平行与边且覆盖
if(Cross(px1,py1,lx,ly,lx,ry)== && Cross(px2,py2,lx,ly,lx,ry)== && Dist(lx,ly,px1,py1,px2,py2))
return ;
if(Cross(px1,py1,lx,ry,rx,ry)== && Cross(px2,py2,lx,ry,rx,ry)== && Dist(lx,ry,px1,py1,px2,py2))
return ;
if(Cross(px1,py1,rx,ry,rx,ly)== && Cross(px2,py2,rx,ry,rx,ly)== && Dist(rx,ry,px1,py1,px2,py2))
return ;
if(Cross(px1,py1,rx,ly,lx,ly)== && Cross(px2,py2,rx,ly,lx,ly)== && Dist(rx,ly,px1,py1,px2,py2))
return ;
//线段是否与矩形边相交
if(Check(lx,ry,lx,ly))
return ;
if(Check(lx,ry,rx,ry))
return ;
if(Check(rx,ry,rx,ly))
return ;
if(Check(rx,ly,lx,ly))
return ;
return ;
} int main()
{
int T,x1,y1,x2,y2;
scanf("%d",&T);
while(T--)
{
scanf("%d%d%d%d%d%d%d%d",&px1,&py1,&px2,&py2,&x1,&y1,&x2,&y2);
lx=min(x1,x2);
ly=max(y1,y2);
rx=max(x1,x2);
ry=min(y1,y2);
int op=Solve();
if(!op)
printf("F\n");
else
printf("T\n");
}
return ;
}
POJ1410 Intersection 计算几何的更多相关文章
- POJ 1410 Intersection (计算几何)
题目链接:POJ 1410 Description You are to write a program that has to decide whether a given line segment ...
- poj-1410 Intersection
计算几何的题目, 学cv的要做一下.poj 地址: http://poj.org/problem?id=1410 题意:判断一个直线段,是否与一个矩形有相交点. 解决方案: 判断矩形的每一条边是否与直 ...
- codeforces D. Area of Two Circles' Intersection 计算几何
D. Area of Two Circles' Intersection time limit per test 2 seconds memory limit per test 256 megabyt ...
- Intersection(计算几何)
Intersection Time Limit: 4000/4000 MS (Java/Others) Memory Limit: 512000/512000 K (Java/Others)To ...
- hdu-5120 Intersection(计算几何)
题目链接: Intersection Time Limit: 4000/4000 MS (Java/Others) Memory Limit: 512000/512000 K (Java/Ot ...
- [poj1410]Intersection
题目大意:求线段与实心矩形是否相交. 解题关键:转化为线段与线段相交的判断. #include<cstdio> #include<cstring> #include<al ...
- 【kuangbin专题】计算几何基础
1.poj2318 TOYS 传送:http://poj.org/problem?id=2318 题意:有m个点落在n+1个区域内.问落在每个区域的个数. 分析:二分查找落在哪个区域内.叉积判断点与线 ...
- poj分类解题报告索引
图论 图论解题报告索引 DFS poj1321 - 棋盘问题 poj1416 - Shredding Company poj2676 - Sudoku poj2488 - A Knight's Jou ...
- 计算几何(容斥原理,圆交):HDU 5120 Intersection
Matt is a big fan of logo design. Recently he falls in love with logo made up by rings. The followin ...
随机推荐
- Xcode好用的插件(随时更新)
古人云"工欲善其事必先利其器",打造一个强大的开发环境,是立即提升自身战斗力的绝佳途径!下面简单介绍下插件是什么.如何使用Xcode插件以及一些常用的Xcode插件的推荐. 一.插 ...
- zstu 4214 高楼扔鸡蛋(google 面试题)dp
input T 1<=T<=10000 n m 1<=n<=2000000007 1<=m<=32 output m个鸡蛋从1到n哪一楼x扔下去刚好没碎,而再x+1 ...
- Location-aware Associated Data Placement for Geo-distributed Data-intensive Applications--INFOCOM 2015
[标题] [作者] [来源] [对本文评价] [why] 存在的问题 [how] [不足] assumption future work [相关方法或论文] [重点提示] [其它]
- C# 常用接口学习 ICollection<T>
C# 常用接口学习 ICollection<T> 作者:乌龙哈里 时间:2015-11-01 平台:Window7 64bit,Visual Studio Community 2015 参 ...
- MTK平台Android中常用的路径
开机Logo的路径: bootable\bootloader\lk\dev\logo 开机Logo图片分辨率路径: device\rq\rq6735_35gt_b_l1\ProjectConfig.m ...
- servlet之过滤器(转载)
林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 一.Filter 1.过滤器的概念 Java中的Filter 并不是一个标准的Servlet ...
- CBC之php java兼容版本
网上搜了N多代码,都是你抄我的,我抄你的,着实让人无语对苍天.经过多番资料的查找,php与java的cbc加密.解密结果终于一致了,代码如下: Java加密解密类: package main; imp ...
- tomcat识别不出maven web项目
解决办法: 点中项目-->Properties-->project facets 勾选:Dynamic Web Module.java.javaScript Apply-->OK 解 ...
- Spring第三天
Spring第三天 整体课程安排(3天+2天): 第一天:Spring框架入门.IoC控制反转的配置管理.Spring Web集成.Spring Junit集成. 第二天:Spring AOP面向切面 ...
- SVD分解技术数学解释
SVD分解 SVD分解是LSA的数学基础,本文是我的LSA学习笔记的一部分,之所以单独拿出来,是因为SVD可以说是LSA的基础,要理解LSA必须了解SVD,因此将LSA笔记的SVD一节单独作为一篇文章 ...