1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
| function [dis] = brokenLineIntersaction(brArrayTwo,BrArrayTwo,vectorArrayTwo,lenArrayTwo)
epsilon = 1e-2;
dis = 0;
ni = cross(vectorArrayTwo(:,1),vectorArrayTwo(:,2));
if(norm(ni)<epsilon) pLine = brArrayTwo(:,2)-brArrayTwo(:,1); dis = norm(cross(pLine,vectorArrayTwo(:,1))); return; end
ni = ni/norm(ni);
[m,n] = linePerpCalFun(BrArrayTwo(:,1),brArrayTwo(:,1),BrArrayTwo(:,2),brArrayTwo(:,2));
if(m<=1&&m>=0&&n<=1&&n>=0) deltaTemp = abs(dot(ni,brArrayTwo(:,2)-brArrayTwo(:,1))); else dis1 = disPointLineSeg(brArrayTwo(:,1),brArrayTwo(:,2),BrArrayTwo(:,2)); dis2 = disPointLineSeg(BrArrayTwo(:,1),brArrayTwo(:,2),BrArrayTwo(:,2)); dis3 = disPointLineSeg(brArrayTwo(:,2),brArrayTwo(:,1),BrArrayTwo(:,1)); dis4 = disPointLineSeg(BrArrayTwo(:,2),brArrayTwo(:,1),BrArrayTwo(:,1)); deltaTemp = min([dis1,dis2,dis3,dis4]); end
if(deltaTemp<epsilon) dis1 = disPointLineSeg(brArrayTwo(:,1),brArrayTwo(:,2),BrArrayTwo(:,2)); dis2 = disPointLineSeg(BrArrayTwo(:,1),brArrayTwo(:,2),BrArrayTwo(:,2)); dis3 = disPointLineSeg(brArrayTwo(:,2),brArrayTwo(:,1),BrArrayTwo(:,1)); dis4 = disPointLineSeg(BrArrayTwo(:,2),brArrayTwo(:,1),BrArrayTwo(:,1)); dis = min([dis1,dis2,dis3,dis4]); else dis = deltaTemp; end
end
|