2017福建省赛Problem B Triangles(判断两三角形位置关系)
来源:互联网 发布:淘宝二级页面有什么用 编辑:程序博客网 时间:2024/05/18 16:16
【题目链接】FZU
【题意】给定两个三角形6个点的坐标,判断两个三角形是包含、相交还是相离。
【样例】
【分析】
【代码】
#include<stdio.h>#include<iostream>#include<cmath>using namespace std;int ans;typedef struct{ double x,y;}Point;Point S[6];double area(Point a,Point b,Point c){ double x1,y1,x2,y2,x3,y3; x1=a.x;x2=b.x;x3=c.x; y1=a.y;y2=b.y;y3=c.y; double l1,l2,l3; l1=sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3)); l2=sqrt((x2-x3)*(x2-x3)+(y2-y3)*(y2-y3)); l3=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); if(!l1||!l2||!l3){ return -1; } if(l1+l2==l3||l2+l3==l1||l1+l3==l1){ return -1; } double cos=(l1*l1+l2*l2-l3*l3)/(2*l1*l2); double sin=sqrt(1-cos*cos); double ss=0.5*l1*l2*sin; return ss;}double mult(Point a, Point b, Point c){return (a.x-c.x)*(b.y-c.y)-(b.x-c.x)*(a.y-c.y);}bool intersect(Point aa, Point bb, Point cc, Point dd){if ( max(aa.x, bb.x)<min(cc.x, dd.x) )return false;if ( max(aa.y, bb.y)<min(cc.y, dd.y) )return false;if ( max(cc.x, dd.x)<min(aa.x, bb.x) )return false;if ( max(cc.y, dd.y)<min(aa.y, bb.y) )return false;if ( mult(cc, bb, aa)*mult(bb, dd, aa)<0 )return false;if ( mult(aa, dd, cc)*mult(dd, bb, cc)<0 )return false;ans++;return true;}int main(){ int T; bool ins; cin>>T; while(T--){ ans=0; for(int i=0;i<6;i++){ cin>>S[i].x>>S[i].y; } intersect(S[0],S[1],S[3],S[4]); intersect(S[0],S[1],S[3],S[5]); intersect(S[0],S[1],S[4],S[5]); intersect(S[0],S[2],S[3],S[4]); intersect(S[0],S[2],S[3],S[5]); intersect(S[0],S[2],S[4],S[5]); intersect(S[1],S[2],S[3],S[4]); intersect(S[1],S[2],S[3],S[5]); intersect(S[1],S[2],S[4],S[5]); //cout<<ans<<endl; if(!ans){ ins=false; double s=area(S[0],S[1],S[2]); for(int i=3;i<6;i++){ double s1=area(S[0],S[1],S[i]); double s2=area(S[1],S[2],S[i]); double s3=area(S[0],S[2],S[i]); if(s1==-1||s2==-1||s3==-1){ break; } if(abs(s1+s2+s3-s)<1e-9) ins=true; } if(ins) printf("contain\n"); else printf("disjoint\n"); } else printf("intersect\n"); } return 0;}
【说明】
阅读全文
0 0
- 2017福建省赛Problem B Triangles(判断两三角形位置关系)
- 判断两三角形是否相交
- 2017acm福建省赛FZU 2273 Triangles
- 2017福建省赛Problem D Game(KMP)
- Linux下完成: 已知两三角形顶点坐标,判断其是否有公共边
- Problem 2273 Triangles 判断两个三角形的相对位置(相交/包含/远离)
- 第六届福建省大学生程序设计竞赛-重现赛,Problem B Common Tangents【数学几何】
- 第八届福建省大学生程序设计竞赛 重现赛 第二题 Triangles
- 2017福建省赛FZU2282 Wand
- 2017年福建省赛 FZU
- POJ1569 Myacm Triangles 判断点与三角形的关系
- 福建省赛--Problem E The Longest Straight(标记+二分)
- 第六届福建省大学生程序设计竞赛 Problem B Common Tangents【几何】
- Problem B: 函数---判断素数
- 第六届福建省大学生程序设计竞赛-重现赛,Problem C Knapsack problem【大背包】
- 2017acm福建省赛FZU2272 Frog
- 2017acm福建省赛FZU 2278 YYS
- contains、compareDocumentPosition判断元素位置关系
- JavaScript堆排序
- 数据结构之--------数组
- api-ms-win-crt-runtimel1-1-0.dll缺失的解决方案
- [RK3288][Android6.0] WiFi之NetworkMonitor对评分机制的影响
- 手把手教你如何搭建CTS测试环境---1、Ubantu U盘启动制作及安装
- 2017福建省赛Problem B Triangles(判断两三角形位置关系)
- JVM 优化浅解分析
- JavaScript打印Excel、Word
- eclipse使用tomcat maven插件 Edit Source Lookup Path
- 从尾到头打印链表
- 网易云课堂JAVA入门编程题7-1
- 继电器线圈端反向并接二极管的原因
- Java设置session超时(失效)的时间
- spring事务的一些概念