matlab判断线段和矩形是否相交,长方形中面和面相交的线段叫什么

matlab判断线段和矩形是否相交
线段和矩形相交,换句话说就是线段上存在至少一个点落在矩阵
为了方便推导,把参数约定下:设线段两个点坐标为r1、r2;矩阵中心坐标为r0,两个轴的单位矢量为e1、e2,对应的边长为2a、2b 。
线段上任意点可以表示为:r=λr1 (1-λ)r2 , 0≤λ≤1
点落在矩阵内部可以表示为:|(r-r0)?e1|≤a,|(r-r0)?e2|≤b
故线段和矩形相交转化为以下数学问题:存在0≤λ≤1,满足|[λr1 (1-λ)r2-r0]?e1|≤a,|[λr1 (1-λ)r2-r0]?e2|≤b 。
写程序则需要具体的判断步骤
判断端点是否在矩阵内部,若|(r1-r0)?e1|≤a且|(r1-r0)?e2|≤b,则r1在矩阵内部;类似的判断r2 。若两者中有一个落在矩阵内部,则线段必定在矩阵内部;若两者都在矩阵外部,做下面判断
代入关系,知存在0≤λ≤1,满足|λ(r1-r2)?e1 (r2-r0)?e1|≤a,|λ(r1-r2)?e2 (r2-r0)?e2|≤b 。
若(r1-r2)?e1==0,或(r1-r2)?e2==0,有前面的判断,线段必然落在矩阵外部
否则,|λ (r2-r0)?e1/(r1-r2)?e1|≤a/|(r1-r2)?e1|,|λ (r2-r0)?e2/(r1-r2)?e2|≤b/|(r1-r2)?e2|,求得
【matlab判断线段和矩形是否相交,长方形中面和面相交的线段叫什么】-a/|(r1-r2)?e1|-(r2-r0)?e1/(r1-r2)?e1≤λ≤a/|(r1-r2)?e1|-(r2-r0)?e1/(r1-r2)?e1,-b/|(r1-r2)?e2|-(r2-r0)?e2/(r1-r2)?e2≤λ≤b/|(r1-r2)?e2|-(r2-r0)?e2/(r1-r2)?e2,取λ1=max(-a/|(r1-r2)?e1|-(r2-r0)?e1/(r1-r2)?e1,-b/|(r1-r2)?e2|-(r2-r0)?e2/(r1-r2)?e2),λ2=min(a/|(r1-r2)?e1|-(r2-r0)?e1/(r1-r2)?e1,b/|(r1-r2)?e2|-(r2-r0)?e2/(r1-r2)?e2),若满足λ1≤λ2