计算几何之 判断两个线段是否相交
来源:互联网 发布:卫生棉有哪些牌子知乎 编辑:程序博客网 时间:2024/06/06 01:53
1. 判断两个线段是否相交,需要检测线段是否两两横跨。所谓横跨,即是点p1 位于向量n 的一边,且另一点p2 位于向量n 的另一边;
2. 此外, 还需考虑边界情况,即一条线段的某个端点位于另一条线段上。
判断线段p1p2, p3p4 是否相交, 算法流程如下:
SEGMENT-INTERSECT(p1, p2, p3, p4)
// 计算三个点构成的两个向量的叉积;
1. d1 = DIR (p3, p4, p1)
2. d2 = DIR (p3, p4, p2)
3. d3 = DIR (p1, p2, p3)
4. d4 = DIR (p1, p2, p4)
5. if ((d1d2 < 0 and d3d4 < 0)return TRUE;
// 前者判断 d1 =0 时, 点p1 在线段p3p4 所在直线上, 后者 ON_SEGMENT(p3, p4, p1) 判断p1 是否在对角线p3p4所在矩形内;综合起来就是 点p1 是否严格在线段p3p4上.
6. else if d1 == 0 and ON_POLYGON (p3, p4, p1)
return TRUE;
7. else if d2 == 0 and ON_POLYGON (p3, p4, p2)
return TRUE;
8. else if d3 == 0 and ON_POLYGON (p1, p2, p3)
return TRUE;
9. else if d4 == 0 and ON_POLYGON (p1, p2, p4)
return TRUE;
// 计算向量pipk 和向量pipj 的叉积;
1. DIR (pi, pj, pk)
return (pk - pi) * (pj - pi);
// 判断 pk 是否在以pi, pj 为对角线的矩形内;
2. ON_POLYGON (pi, pj, pk)
if min(xi, xj) <= xk <= max(xi, xj) and min(yi, yj) <= yk <= max(yi, yj)
return TRUE;
else return FALSE;
// by 我执可破. 2016.10.23 于上海浦东.
- 计算几何之 判断两个线段是否相交
- 计算几何之判断线段是否相交
- HOJ1102 计算几何 判断两个线段是否会相交
- 计算几何之判断两线段是否相交
- 计算几何之判断两线段是否相交
- 计算几何--判断线段是否相交
- 计算几何之判断线段相交
- 计算几何之判断线段相交
- 计算几何之判断线段相交
- 【计算几何】判断线段相交
- COJ 1645计算几何:判断线段是否相交
- 【计算几何】 POJ 1127 Jack Straws 判断线段是否相交
- 判断两条线段是否相交 计算几何
- 计算几何-判断两线段是否相交(模板)
- pku 1556 The Doors 计算几何 之 叉积判断线段是否相交
- 判断两个线段是否相交
- 判断两个线段是否相交
- 判断两个线段是否相交
- Linux下的 Linux 终端仿真器Terminator
- 《自己动手设计数据库》第6章 分析现有数据库
- Struts2 Action中命名空间(namespace)作用
- GPU截帧工具备忘
- linux系统编程之信号(三):信号的阻塞与未决
- 计算几何之 判断两个线段是否相交
- ecshop数据库表11(ecs_agency)办事处信息表
- Codeforce 597C(dp+树状数组优化)
- 如何搭建属于自己的git服务器
- UE4学习示例 Animation1
- css中float left与float right的使用说明
- 黎活明给程序员的忠告 收藏
- POJ-1511 Invitation Cards (SPFA算法+邻接表)
- #算法证明#证明字典序全排列生成算法及实现