tf面对面第一期O一叉

5073人阅读
数据结构与算法(38)
叉积的计算是线段方法的核心。对于向来p1和p2,叉积是由点(0,0)、p1、p2和p1+p2构成的平行四边形的有向面积。另一种与之等价但更有效的的叉积定义方式是将其看做矩阵行列式:
p1×p2 = x1y2 - x2y1 = - p2×p1
若p1×p2为正,则相对于原点(0,0)来说,p1位于p2顺时针方向;若p1×p2为负,p1位于p2逆时针方向;若为0则方向相同,或相反。
若是相对于点p0(x0,y0)而非原点,则p0p1和p0p2的叉积为(p1-p0)×(p2-p0) = (x1-x0)(y2-y0)-(x2-x0)(y1-y0)。
确定连续线段是向左转还是向右转
对于线段p0p1和p1p2,采用叉积可以避免计算角度,只需简单的计算一下p0p2是位于p0p1的顺时针还是逆时针方向。计算叉积
(p2-p0)×(p1-p0) = (x2-x0)(y1-y0) -&(x1-x0)(y2-y0)
若结果为负,p0p2在p0p1的逆时针方向,在p1处左转;结果为正则右转;为0表示三点共线。
判断两条线段是否相交
要判断两条线段是否相交,则需要检查每条线段是否跨越了另一条线段的直线。如果点p1位于某直线的一边,而点p2位于该直线的另一边,则称p1p2跨越了这条直线。两条线段相交,当且仅当下面两个条件至少成立一个:
每条线段都跨越了包含另一条线段的直线
一条线段的一个端点落在另一条线段上
二、确定任意一对线段是否相交
给定一个线段的集合,仅仅判断是否有两个线段相交,不必输出所有相交的线段对。此处我们假设,线段均不垂直。
我们使用“扫除”算法来解决这个问题。在扫除过程中,一条假想的扫除线穿过一个给定的几何物体集合,会与集合中的部分线段相交。下图中扫除线r与线段a、c相交,且与a的交点的y坐标值大于c的,则认为此处a&c。
在图(a)中,在r处,a&c;在t处,a还是&c,那么我们认为a和c没有相交。而在图(b)中,在v处,e&f,而在图w处,f&e,故e和f相交。
上图描述了一个算法,我们按照线段端点的x坐标,从小到达,进行“扫除”。当在一个线段的左端点扫除时,将所有相交的线段序列按序放入一个“完全前序关系T”中。当扫到线段的右端点时,从T中去除该线段。但是,如果位于在该线段上方的线段集合,与位于该线段下方的线段集合有交集,则表明有线段相交。
关键在于,如果存储T,如果求交集。可以用红黑树来存储T。
1. 初始化T为空集
2. 对线段的端点排序
3. 在端点p处,开始扫除,从最左边的处开始
&&&&如果p是线段s的左端点
&&&&&&&&Insert(T, s);
&&&&&&&&&&&&如果有线段在扫除线处相交
&&&&&&&&&&&&&&&&
&&&&如果p是线段的右端点
&&&&&&&&如果above(T, s) 和 below(T, s)有交集,则
&&&&&&&&&&&&//即线段集中存在线段相交
&&&&&&&&无交集则,Delete(T, s);
4. return false
三、寻找凸包
点集Q的凸包,是一个最小的凸多边形P,满足Q中的每个点都在P的边界上,或者在P的内部。
Graham扫描法: 复杂度O(nlogn)
选取y最小的点,多个y最小的话,选取其中x最小的点,作为p0
剩余的点,按照p0和pi的极角的逆时针排序,编号为p1,p2,...,pm
如果m小于2,表示点数小于3,形不成多边形
设定以空栈S,将p0、p1、p2压入栈中。
for i=3 to m
得到栈顶的2个点pi-1和pi-2,如果t1t0向t0pi转的时候,不是左转,就把顶点t0出栈;
如果出栈了t0,就继续a,直到栈的顶点不再出栈位置
图中,从a到f是一步一步选择的过程。
Jarvis步进法:复杂度O(nh),h是凸包顶点数
先找到最下边结点里最左边的点p0,然后寻找使得p0p1极角最小的点,则p1也是凸包顶点;继续寻找使得p1p2极角最小的点,直到达到最高点pk,上图是p3,此时已经构造好了CH(Q)的右链。为了构造左链,寻找pk+1使得pkpk+1极角最小,但此时x轴啊原x轴的负方向。
除此之外,还有增量法、分治法、剪枝-搜索方法,其中剪枝-搜索方法复杂度为O(nlgh)。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:495647次
积分:6177
积分:6177
排名:第3229名
原创:152篇
评论:84条
(1)(1)(1)(2)(1)(1)(3)(6)(9)(5)(1)(3)(1)(4)(24)(4)(5)(11)(1)(2)(1)(9)(2)(6)(27)(2)(25)叉叉叉的感觉!妹纸不要不要的!
礼物加载异常,请点击重试
礼物正在加载中,请稍后......
我的钱包:
╮(╯_╰)╭还没有人送过礼物呢~
加载异常,请刷新重试
0人正在看,0条互动
发射用户:0数
弹幕上限:3000条
现在还没有弹幕哦!
等你来一发~
(⊙o⊙)…弹幕跑到火星去了
请点击找回
,即可发射弹幕!
\(≧▽≦)/
↖(^ω^)↗
╮(╯_╰)╭
(*  ̄︿ ̄)
(*@ο@*)
┏(゜ω゜)=?
╭Σ( ° △ °|||)
(~﹃~)~zZ
同专辑作品(0)
作者作品(0)
没有数据了
加载异常,请刷新重试
我来说两句...
现在还没有评论哦~快来抢沙发!
加载异常,请刷新重试
版权声明:
未经爱拍原创授权,任何第三方不得以转载、修改、复制、出版及其他方式使用本站视频。
首次下载爱拍APP
领百元新人礼包
粤网文[8号
版权所有 广州爱拍网络科技有限公司用前抱式婴儿抱带,面对面抱着婴儿, 双腿叉开成M型 ,会变成O型推吗?_育儿问答_宝宝树
用前抱式婴儿抱带,面对面抱着婴儿, 双腿叉开成M型 ,会变成O型推吗?
当时年龄:
还没有宝宝
不用担心,会这么脆弱的。我家宝宝一直这样背,一样好好的。宝宝两岁之前的腿型问题大部分是生理性的,等走路平稳之后自然就会恢复的。
长时间肯定是有影响的,不要老背着。
不会,是缺钙造成的,背带又不是长时间的背
宝宝树孕育

我要回帖

更多关于 tf面对面第一期 的文章

 

随机推荐