当前位置: 首页 > 专利查询>四川大学专利>正文

Cyrus‑Beck算法用于凹多边形反射轨迹解算算法制造技术

技术编号:15226453 阅读:67 留言:0更新日期:2017-04-27 06:44
本发明专利技术公开了Cyrus‑Beck算法用于凹多边形反射轨迹解算算法,本发明专利技术包括以下步骤:(1)多边形的顶点按顺时针保存,并将每条边界的外法向量保存;(2)根据声轨迹线的方向向量c与声轨迹线的外法向量N的积判断声轨迹线与边界是否相交,若相交,求出交点;(3)判断交点在边界线段上;若交点在边界线段上,而不在边界的延长线上,得到两个交点;(4)将两个交点保存在一个临时数组,令声轨迹线的起点为A,离A距离最短的即为凹多边形的有效交点。本发明专利技术能够实现对凹多边形进行裁剪,求得凹多边形的有效交点。

【技术实现步骤摘要】

本专利技术涉及一种Cyrus-Beck算法用于凹多边形反射轨迹解算算法。
技术介绍
Cyrus-Beck算法是1978年Cyrus和Beck提出的一种凸多边形窗口的线裁剪算法,它通过判断直线段的方向矢量与窗口边界法向矢量的点积是否大于零,如果大于零,交点分在上组;如果小于零,则交点分在下组。然后分别取上组中的最小交点和下组中的最大交点,即得到线段可见部分的端点。这是一种参数化的求交方法,只用一次除法和两次乘法就能解出交点的参数。Cyrus-Beck算法是采用逐边裁剪的方法,使其只适用于凸多边形,不适用于凹多边形。
技术实现思路
为了改善上述问题,本专利技术提供一种Cyrus-Beck算法用于凹多边形反射轨迹解算算法。为了实现上述目的,本专利技术采用的技术方案如下:一种Cyrus-Beck算法用于凹多边形反射轨迹解算算法,其特征在于,包括以下步骤:(1)多边形的顶点按顺时针保存,并将每条边界的外法向量保存;(2)根据声轨迹线的方向向量c与声轨迹线的外法向量N的积判断声轨迹线与边界是否相交,若相交,求出交点;(3)判断交点在边界线段上;若交点在边界线段上,而不在边界的延长线上,得到两个交点;(4)将两个交点保存在一个临时数组,令声轨迹线的起点为A,离A距离最短的即为凹多边形的有效交点。进一步地,步骤(2)是通过Cyrus-Beck算法求出交点。本专利技术较现有技术相比,具有以下优点及有益效果:本专利技术提供了一种凹多边形的裁剪算法,能够实现对凹多边形进行裁剪。附图说明图1为射线与直线的交点示意图。图2为凸多边形的线裁剪示意图。图3为Cyrus-Beck算法直接用于凹多边形求交示意图。图4为射线与线段求交示意图。图5为判断声轨迹线在边界线段上的示意图。具体实施方式下面结合附图与实施例对本专利技术作进一步说明,本专利技术的实施方式包括但不限于下列实施例。实施例Cyrus-Beck算法原理:Cyrus-Beck算法是1978年Cyrus和Beck提出的一种凸多边形窗口的线裁剪算法,它通过判断直线段的方向矢量与窗口边界法向矢量的点积是否大于零,如果大于零,交点分在上组;如果小于零,则交点分在下组。然后分别取上组中的最小交点和下组中的最大交点,即得到线段可见部分的端点。这是一种参数化的求交方法,只用一次除法和两次乘法就能解出交点的参数。Cyrus-Beck算法数学基础:在图形学中,求一条直线与另一条直线或者一个平面的交点问题是十分常见的,例如直线与直线的求交,即二维平面上,直线与多边形边的交点求解问题。首先假设一条射线的参数表达式:R(t)=A+ct(0≤t<∞)(2-1)式(2-1)中,A表示射线的起始点位置,c表示射线的方向向量,参数t用于区分射线上的每一个点,所以在t=0时,R(t)的位置在A点,t变化时,R(t)则表示为在t处的点的位置。如图1所示,假设有另一直线,点P是直线上任意一点且由向量n与直线正交。则该直线可表示为:n·(P-B)=0(点-发向量表达式)(2-2)直线的点-法向量表达式说明:对于直线上的任意一点P,都能使式(2-2)所表示的点积结果为0。接下来计算图1中射线与直线的交点,假设在t=thit处,R(t)与直线相交(在此,我们将参数t看成时间,thit作为击中时间,交点看作击中点)。二维情况下,两线在thit处的点的坐标必然相同,所以A+cthit一点满足n·(P-B)=0,则有:n·(A+cthit-B)=0(2-3)最终可以得到thit的一个表达式:式(2-4)中,分母n·c=0表示两直线平行,这种情况下,两线没有交点。得到击中时间后,击中点即两直线的交点便很容易得到,将thit代入到射线的参数表达式中:Phit=A+cthit(2-5)Cyrus-Beck裁剪算法:Cyrus-Beck算法是针对凸多边形的裁剪算法,如图2所示,假设一个凸多边形区域Q和一条射线L:R(t)=A+ct。假设C是区域Q边界上的一点,N是区域边界在C点的外法向量。凸多边形的线裁剪问题可描述为:对于直线L上的任意一点R(t),若使其能在多边形内可见(即R(tin)<R(t)<R(tout))的充要条件是,对于凸多边形边界上任意一点C和该处的外法向量N,有N·(R(t)-C)<0。为了得到裁剪后的线段,我们借助式(2-4)计算tin和tout,进一步得到裁剪后的线段端点R(tin)=A+ctin和R(tout)=A+ctout。一般情况下我们计算得到tin与0比较大小,取其中较大者作为裁剪后线段的第一个端点的参数值。同理,tout与1比较后其中较小的值作为第二个端点的参数值。因此,裁剪后线段的端点值可表示为:R′(tin)=A+cmax(0,tin)R′(tout)A+cmin(tout,1)(2-6)要最终得到tin和tout还需对直线L是射入还是射出进行检测,对于图2,N是边界直线的外法向量,指向多边形的外侧,所以有:若N·c>0,L的方向是射出裁剪窗口Q;若N·c=0,L与该边界直线平行;若N·c>0,L的方向是射入裁剪窗口Q。综上,实现Cyrus-Beck算法的步骤描述如下:(1)初始化线段可见部分的候选区间为[0,1],即假定tin的初值为0,tout的初值为1,当然也可以根据实际情况,令tin为一个很小的负值,令tout为一个很大的正值。(2)对于每一条边界直线,借助式(2-4)计算thit,并判断这一击中是射入还是射出:射入时,令tin=max(tin,thit);射出时,令tout=min(tout,thit);同时若tin>tout,说明L与Q完全不相交,检测结束。(3)所有多边形的边经检测后,若得到非空的候选区间,则说明R(tin)=A+ctin和R(tout)=A+ctout即为裁剪后线段的端点。改进的Cyrus-Beck算法:由于Cyrus-Beck算法采用逐边裁剪的方法,使其只适用于凸多边形,不适用于凹多边形。如图3所示的凹多边形中,对于AB和BC两条边界,如果直接用Cyrus-Beck算法确定交点,取tout=min(tout,thit),根据该tout求出的交点结果返回的是交点1,而实际我们所需的有效交点是交点2,这样就会导致得到无效的交点。改进算法的数学基础:前面我们假设一条射线R的参数表达式为:R(t)=A+ct(0≤t<∞),还给出了另一条直线G的点法向量表达式:n·(P-B)=0,根据两个表达式可以确定击中时间thit,进一步地得到击中点(即交点)。在图1的基础上以B为起点截取直线G为线段H(B、D为线段的两个端点),如图4所示。如果射线R与线段H有交点,则该交点必然在线段上,所以判断交点的有效性便转化为判断该交点在线段上,设交点为Q。接下来就是判断点Q是否在线段BD上。图4中,对于线段BD,记向量向量向量与向量的叉乘:若式(2-7)的结果为0,说明θ的值为0°或180°,也就是说两向量平行或共线,又因为向量与向量有公共端点B,所以当式(2-7)的结果为0时,向量与共线。由此得到,判断交点Q在线段BD上的依据是:(2)Q在以B、D为对角顶点的矩形内。条件(1)保证点Q在BD的父直线上,条件(2)限定了点Q不在线段BD的延长线或反向延长线上。改进算法的实现:改进算法的实现,对于凹本文档来自技高网...
Cyrus‑Beck算法用于凹多边形反射轨迹解算算法

【技术保护点】
一种Cyrus‑Beck算法用于凹多边形反射轨迹解算算法,其特征在于,包括以下步骤:(1)多边形的顶点按顺时针保存,并将每条边界的外法向量保存;(2)根据声轨迹线的方向向量c与声轨迹线的外法向量N的积判断声轨迹线与边界是否相交,若相交,求出交点;(3)判断交点在边界线段上;若交点在边界线段上,而不在边界的延长线上,得到两个交点;(4)将两个交点保存在一个临时数组,令声轨迹线的起点为A,离A距离最短的即为凹多边形的有效交点。

【技术特征摘要】
1.一种Cyrus-Beck算法用于凹多边形反射轨迹解算算法,其特征在于,包括以下步骤:(1)多边形的顶点按顺时针保存,并将每条边界的外法向量保存;(2)根据声轨迹线的方向向量c与声轨迹线的外法向量N的积判断声轨迹线与边界是否相交,若相交,求出交点;(3)判断交点在边界线段上;若交点...

【专利技术属性】
技术研发人员:陈科林江莉周美玲
申请(专利权)人:四川大学
类型:发明
国别省市:四川;51

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1