本人大四即将结束,于2018年12月18日购《算法导论》这本书,慢慢看,第一阶段先主要理解各个章节说的算法都是什么意思,书上的课后习题先不做,用得上什么算法我再详细学习。这是官方课后答案的链接。
放在开头:没有好的算法,坏的算法之说,重点是针对不同的情况,针对不同的数据,针对不同的需求,去选择算法,改良算法。我的数学功底不强,太难的公式我看不懂,太高深的思想我理解不了,我主要以应用为主,不以解释数学公式为主。
几何学这个东西内容太多了。本章就是简单介绍了3个问题,以此揭开计算机几何学算法和技术这神秘面纱的一角。
叉积
叉积的计算是线段方法的核心。
两个向量P1,P2。P1*P2如果是正值,那么对于原点(0,0)来说,p1位于p2的顺时针方向,反之位于逆时针方向。
判断两个线段是否相交:
1、每条线段都跨越了包含另一条线段的直线。
2、一条线段的某个端点落在另一条线段上。
程序很简单,运用的是叉积的有关性质。
确定任意一对线段是否相交
这是通过一种扫线的方法。从最左边的线段开始往右扫,每个线段的端点是个“事件点”,在每个事件点上进行排序,看看在事件点上,哪个线段更高,当然了,没有被扫线扫到的点就不被考虑。
如果在某两个事件点上,某两个线段的排序颠倒了,那么这两个线段肯定相交了。
寻找凸包
目的是找到散点中最外侧的几个顶点,能构成一个包,把所有的点包起来。
有两种方法:
Graham扫描法、Jarvis步进法。两种方法都很容易懂。
Graham方法是先把当前的坐标系转化成极坐标系。并且以纵坐标最小中的最左面的点设为原点。然后用叉积的相关性质寻找凸包的顶点。
Jarvis方法是找相对小的极角的一种方法。
寻找最近点对
最近点对问题可以应用于交通控制等系统中。为检测出潜在的碰撞事故,在空中或海洋交通控制系统中,需要识别出两个距离最近的交通工具。
然而这个算法我并没有看。。。懂。。。清一色的文字信息,没个清晰的图。