首先生成一个12边形
>> theta = -(0:pi/6:2*pi)';
>> lat1 = sin(theta);
>> lon1 = cos(theta);
>> plot(lat1,lon1,'b');axis equal
再随机生成直线的两个点
>> a=rand(1,2);b=rand(1,2);
>> hold on;plot([a(1) b(1)],[a(2),b(2)],'r')
然后求出直线下方的多边形区域
>> l=1000;m=1000;
>> L=[a+l*(b-a);a-l*(b-a);a-l*(b-a)+[0 m];a+l*(b-a)+[0 m];a+l*(b-a)];lat2 = L(:,1);lon2 = L(:,2);
>> [lonm,latm] = polybool('minus',lon1,lat1,lon2,lat2);%就用这个函数!
>> fill(latm,lonm,'k')
最后求出交点坐标
>> A=[latm lonm];
>> for i=1:(size(A,1)-1)
if abs(sum(cross([b-a 0],[A(i,:)-a 0])))<10^-6
A(i,:)
end
end
ans =
0.3929 0.8947
ans =
0.8800 -0.4477
>> 供参考