HDU 1086You can Solve a Geometry Problem too(判断两条选段是否有交点)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1086
判断两条线段是否有交点,我用的是跨立实验法:
两条线段分别是A1到B1,A2到B2,很显然,如果这两条线段有交点,那么可以肯定的是:
A1-B1,A2-B1这两个向量分别在B2-B1的两边,判断是不是在两边可以用向量的叉积来判断,这里就不说了,同理B1-A1,B2-A1在A2-A1的两边,当同时满足这两个条件时,说明这两条线段是有交点的。
- #include<cstdio>
- #include<cstring>
- #include<iostream>
- #include<algorithm>
- #include<cmath>
- using namespace std;
- const int maxn = ;
- const double eps = 1e-;
- struct point
- {
- double x,y;
- point(double x = ,double y = ):x(x),y(y) {}
- inline friend point operator + (point p1,point p2)
- {
- return point(p1.x+p2.x,p1.y+p2.y);
- }
- inline friend point operator - (point p1,point p2)
- {
- return point(p1.x-p2.x,p1.y-p2.y);
- }
- }A[maxn],B[maxn];
- inline double dot(point p1,point p2)
- {
- return p1.x*p2.y - p2.x*p1.y;
- }
- inline double dis(point p1,point p2)
- {
- return sqrt((p1.x-p2.x)*(p1.x-p2.x) + (p1.y-p2.y)*(p1.y-p2.y));
- }
- int judge(point p1,point p2,point p3,point p4)
- {
- double temp = dot(p3-p1,p2-p1) * dot(p4-p1,p2-p1);
- if(temp < || fabs(temp) < eps) return ;
- return ;
- }
- int main()
- {
- //freopen("in","r",stdin);
- int n;
- while(scanf("%d",&n),n)
- {
- for(int i = ;i < n;++i)
- scanf("%lf%lf%lf%lf",&A[i].x,&A[i].y,&B[i].x,&B[i].y);
- int ans = ;
- for(int i = ;i < n;++i)
- for(int j = i+;j < n;++j)
- {
- if(judge(A[i],B[i],A[j],B[j]) && judge(A[j],B[j],A[i],B[i])) ans++;
- }
- printf("%d\n",ans);
- }
- return ;
- }
HDU 1086You can Solve a Geometry Problem too(判断两条选段是否有交点)的更多相关文章
- (hdu step 7.1.2)You can Solve a Geometry Problem too(乞讨n条线段,相交两者之间的段数)
称号: You can Solve a Geometry Problem too Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/ ...
- hdu 1086 You can Solve a Geometry Problem too 求n条直线交点的个数
You can Solve a Geometry Problem too Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/3 ...
- HDU1086You can Solve a Geometry Problem too(判断线段相交)
You can Solve a Geometry Problem too Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/3 ...
- hdu 1086 You can Solve a Geometry Problem too
You can Solve a Geometry Problem too Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/3 ...
- HDU 1086:You can Solve a Geometry Problem too
pid=1086">You can Solve a Geometry Problem too Time Limit: 2000/1000 MS (Java/Others) Mem ...
- hdu 1086:You can Solve a Geometry Problem too(计算几何,判断两线段相交,水题)
You can Solve a Geometry Problem too Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/3 ...
- hdu 1086 You can Solve a Geometry Problem too (几何)
You can Solve a Geometry Problem too Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/3 ...
- You can Solve a Geometry Problem too(线段求交)
http://acm.hdu.edu.cn/showproblem.php?pid=1086 You can Solve a Geometry Problem too Time Limit: 2000 ...
- You can Solve a Geometry Problem too (hdu1086)几何,判断两线段相交
You can Solve a Geometry Problem too Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/3276 ...
随机推荐
- group by语句
- JAVA jdbc获取数据库连接
JDBC获取数据库连接的帮助类 import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManage ...
- Android之Proguard语法
-include {filename} 从给定的文件中读取配置参数 -basedirectory {directoryname} 指定基础目录为以后相对的档案名称 -injars {class_pat ...
- SQL Server编程(04)基本语法【转载】
一.定义变量 --简单赋值 declare @a int set @a=5 print @a --使用select语句赋值 declare @user1 nvarchar(50) select @ ...
- struts2校验总结
struts校验框架提供两种校验:客户端校验和服务端校验.它们都是主要检查浏览器输入数据是否合法的校验器. 服务端校验 服务端校验是在服务器上检查输入数据,它的实现方法是重写validate()方法. ...
- easyUI-combotree的本地数据导入
一.页面内容: <div style="margin:10px 0"> <a href="javascript:void(0)" class= ...
- 用jackson封装的JSON工具类
package hjp.smart4j.framework.util; import com.fasterxml.jackson.databind.ObjectMapper; import org.s ...
- php上传$_FILES 无法取值
无法取值的主要原因在form. 代码 <form method="post" action="****" name="theForm" ...
- Node.js Tools 1.2 for Visual Studio 2015 released
https://blogs.msdn.microsoft.com/visualstudio/2016/07/28/node-js-tools-1-2-visual-studio-2015/ What ...
- 源程序出现各种奇怪的符号P
依次展开Windows->Preferences->General->Editors->Text Editor 将右边的Show whitespace characters的复 ...