MATLAB实现判断航迹(直线)是否相交的问题

航迹躲避时,往往面临相交问题,这里给出两种简化方法(仅考虑空间上的不相交)。

一. 判断线段相交

使用solve函数,求新航迹段与其余航迹的交点,如果交点的横坐标在两条航迹线段内,则说明相交。要注意求交点时要排除掉障碍物所在航迹(新航迹改变前的航迹),因为它与新航迹一定有一个交点(s,t)

二. 判断凸多边形

 

两条线相交时,四个端点画出的是凸多边形,而不相交时,是凹多边形

  首先找到邻近航迹,即判断从哪个点开始判断新航迹与此点以后的航迹的位置关系。求(s,t)与每段航迹交接点的距离(除去障碍物所在的航迹),输出距离最小的点。通过(s,t)与(x,y)所连线段的斜率k与障碍物所在航迹段斜率的比较,可以判断是上面的点还是下面的点。输出(nu,nv),nu代表是哪个飞行器的航迹,nv代表这条航迹上的第几段。

再判断应该与哪条线画凸多边形。从nv开始,求航迹起始点与邻近航迹每一段端点的斜率,如果k大于这个斜率,说明新航迹肯定不会与

(nu,nv)--(nu,nv+1)这一段航迹相交,再判断k与下一段的斜率,直到j=n;如果k小于这个斜率,则新航迹与这段航迹画凸多边形。

使用convhull函数,画出一个凸多边形,再使用inpolygon函数,输出on判断(x,y)点是否在多边形边上。如果相交,四个点可以画出一个四边形,每个点都在边上,on=1;如果不相交,只能画出一个三角形,on=0。

 

更新:

发现某种要画延长线的情况下,上述判断出现问题,这时可以做出如下修改:判断四个点是否都在多边形上,使用on=4的判据。

 

 

你可能感兴趣的:(Matlab)