计算几何学
来源:互联网 发布:淘宝那些东西增加权重 编辑:程序博客网 时间:2024/04/30 19:50
算法导论 ch33
1 判断线段AB,在线段CD的顺时针方向,还是逆时针方向
叉乘,可以看成是行列式
如果AB向量等于(x1,y1)
CD向量等于(x2,y2)
AB 叉乘 CD = | x1 x2 | = x1*y2 - x2 * y1
| y1 y2 |
CD 叉乘 AB = x2* y1 - x1 * y2
如果AB 叉乘 CD > 0 , 那么CD在AB的逆时针方向。
如果AB 叉乘 CD < 0 , 那么CD在=AB的顺时针方向。
如果AB 叉乘 CD = 0 , 那么AB和CD共线,方向相同或者相反。
3 判断连续线段AB,BC,是左转还是右转
这个可以化归到上一题,如果AB 叉乘 BC > 0 , 右转
如果AB 叉乘 BC < 0 左转。
如果AB 叉乘 BC = 0 , ABC三点共线。
2 判断两个线段是否相交
考虑三种情况,AB和CD完全不想交,那么 AB * BC 和AB * BD 应该是同时为正,或者同时为负。
如果AB横跨CD,那么 AB * BC 和AB * BD 的结果总是异号的
如果AB有一个断点落在CD上,或者CD有一个端点落在AB上,那么肯定至少有3个点共线的请况。
不妨假设,ABC三点共线,那么AB 叉乘 BC = 0 。
此时还要判断,共线时,C是否在线段AB上。只要c的横坐标在A、B的横坐标之间,C的纵坐标在A、B的纵坐标之间。
4 判断n个线段中,是否存在相交的线段。
brute force = o(n*n)
sweeping算法o(n * lg n)
假设没有垂直线,假设没有三条线段交于一点
假想有一条条时间线。
每个线段都会跟时间线有交点,且一次只有一个交点。
按照交点的y坐标进行排序
如果在时间线t上,线段a,c与t有交点,那么称a、c是可比较的。如果a、t的交点在c、t的交点上方,那么记为 a >= c
当时间线扫描相交线段a、b时,这个序会发生逆转。
使用红黑树记录全序关系。
扫描到线段c的左端点,比较c在全序关系中的上一个线段是否相交,以及c和下一个线段是否相交。
当扫描到线段c的右端点时,比较c在全序关系中的上下两个线段是否相交。从红黑树中删除c
sweeping算法可以判断是否存在相交的线段,o(n*lg n)
但是要找出所有的相交线段,需要o(n*n)的复杂度
5 凸包convex hull,最小封闭凸多边形
TODO
- 计算几何学
- 计算几何学
- 计算几何学
- 计算几何学函数
- 计算几何学库函数
- 计算几何学概述
- 计算几何学(Computational Geometry)
- 计算几何学(Computational Geometry)
- 计算几何学入门知识
- 计算几何学简单的模板
- 第33章 :计算几何学
- 算法导论之计算几何学
- 几何学
- 几何学
- 我的计算几何学题目分类
- 算法导论33(计算几何学)
- 专题:计算几何学 线段相交 hdu1086
- 实用算法实践-第 29 篇 计算几何学
- android activity生命周期
- struts2标签获取action中保存在request域的对象
- HttpClien实现使用post方式模拟表单上传大文件和字符参数
- Java Private Constructor
- VS2010对话框:设置对话框控件的Tab顺序
- 计算几何学
- 说说大型高并发高负载网站的系统架构
- cocos2d-x学习笔记18:内存管理01:概述
- android Gallery滑动图片
- 如何将vs2012 update4版本降回update1版本
- 春季警惕白癜风容易扩散
- ubuntu php.ini 的路径
- 研究:多感官教学增强记忆 学习效率事半功倍
- 常用的CPaintDC类成员函数