计算几何,求线段有无可能相交
来源:互联网 发布:程控交换机如何编程 编辑:程序博客网 时间:2024/05/22 06:51
`题意:就是判断各线段之间有没有交点。
判断两线段相交,要运用到叉积。两个线段相交肯定相互跨越,假设一个条线段(p1p2),另一条是(q1q2),那么p1p2肯定在q1q2线段的两侧,那么运用叉积如果p1p2跨越q1q2的话(q1p1)x(q2p2)《= 0.同样也要验证 q1q2是不是也跨越p1p2,注意:p1p2跨越q1q2,不代两个线段相交,可能是p1p2跨越直线q1q2,所以说还是要再次判断q1q2是不是跨越p1p2
还有另外一种比较容易理解的解法:
就是如果两个线段相交,那么两线段两端端点的差即(p1-q1)与(p2-q2)的乘积肯定是小于等于0的(代码略)要参考地址请戳http://blog.csdn.net/yu_ch_sh/article/details/38711239`
#include <stdio.h>#include <math.h>struct node{ double x; double y;}s[150],e[150];int chaji(node a, node b, node c){ return (a.x - c.x)*(b.y - c.y) - (b.x - c.x)*(a.y - c.y);}int main(){ int n; while(scanf("%d",&n),n){ int i; for (i = 0; i < n; i++){ scanf("%lf%lf%lf%lf",&s[i].x,&s[i].y,&e[i].x,&e[i].y); } int ans = 0; for (i = 0; i < n-1; i++){ for (int j = i+1; j < n; j++){ double temp1 = chaji(s[i],e[i],s[j]); double temp2 = chaji(s[i],e[i],e[j]);//temp1*temp2判断是s【j】是否的点是否在s【i】的两侧 double temp3 = chaji(s[j],e[j],s[i]); double temp4 = chaji(s[j],e[j],e[i]); if (temp1*temp2 <= 0 && temp3 * temp4 <= 0)//只有两个点都在两条线段的两侧,才相交 ans++; } } printf("%d\n",ans); }}
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1086
阅读全文
0 0
- 计算几何,求线段有无可能相交
- 【计算几何】线段相交
- POJ 1039-Pipe(计算几何-线段相交、求交点)
- poj1039(计算几何)线段相交
- 【计算几何】判断线段相交
- 计算几何 线段相交 模板
- {计算几何}怎样判断线段相交
- 计算几何,判两线段相交模板
- 计算几何之判断线段相交
- poj3304 计算几何 线段与直线相交
- HDU 1086 计算几何 判断线段相交
- 计算几何中的线段相交判断问题
- POJ 2318 TOYS 计算几何 线段相交
- 计算几何之两线段相交
- 哈理工 1559 线段相交【计算几何】
- 计算几何--判断线段是否相交
- 计算几何:线段相交(迷宫寻宝)
- 计算几何----判断线段相交(一)
- linux常用命令总结
- 解决Myeclipse注册失败的问题
- faac 1.28的交叉编译与问题解决
- Android-将数据写入Excel表格并存储到外部存储中
- VC++连接MySQL
- 计算几何,求线段有无可能相交
- java数据类型
- KsUML 免费的UML类图建模工具
- Python格式化输出
- 数据结构与算法分析 c++11 练习3.21 检测平衡符号
- [转载]RESTful API 设计指南
- 阿里数字证书 tomcat 配置ssl能在微信小程序上使用时 需要注意的几点
- android studio中Gradle 编译需要重点注意gradle,wrapper,build tools之间的版本对应关系
- EM算法介绍及总结