判断两直线是否相交 hdu1086
2015-10-01 10:14
169 查看
#include <iostream> #include <cstdio> using namespace std; struct line { double x1; double y1; double x2; double y2; }l[110]; bool test(int i,int j) { int s=0; double acd = (l[j].x1-l[i].x1)*(l[j].y1-l[j].y2) - (l[j].x1-l[j].x2)*(l[j].y1-l[i].y1); double bcd = (l[j].x1-l[i].x2)*(l[j].y1-l[j].y2) - (l[j].x1-l[j].x2)*(l[j].y1-l[i].y2); if(acd*bcd<=0) s++; double abd = (l[i].x1-l[j].x1)*(l[i].y1-l[i].y2) - (l[i].x1-l[i].x2)*(l[i].y1-l[j].y1); double abc = (l[i].x1-l[j].x2)*(l[i].y1-l[i].y2) - (l[i].x1-l[i].x2)*(l[i].y1-l[j].y2); if(abd*abc<=0) s++; if(s==2) return true; return false; } int main() { int n; while(scanf("%d",&n)!=EOF) { if(n==0) break; for(int i=0;i<n;i++) { scanf("%lf%lf%lf%lf",&l[i].x1,&l[i].y1,&l[i].x2,&l[i].y2); } int ans=0; for(int i=0;i<n-1;i++) { for(int t=i+1;t<n;t++) { if(test(i,t)) ans++; } } cout<<ans<<endl; } return 0; }
View Code
相关文章推荐
- Win10注册表中怎么去掉鼠标加速?
- Copy List with Random Pointer
- iOS开发 runloop&runtime
- 学习 spams --- 安装
- 基于OL2实现百度地图ABCD marker的效果
- mac系统如何显示和隐藏文件
- 如何解决Linux下库文件的加载错误问题
- [sig15]HorizonZeroDawn的云渲染技术
- 解决IE下Ajax请求无效
- GCC编译报错:程序中有游离的‘\311’
- Sobel算子
- 平衡二叉树之AVL树
- Clone Graph
- sublime
- CentOS中配置php环境
- RAID的个级别特性
- WSAEvent
- 一、HTML和CSS基础--开发工具--Sublime前端开发工具技巧介绍
- 用ssh时 提示WARNING:
- hdu 5112 (2014北京现场赛 A题)