输入轮廓数据(平面坐标系,右为X,上为Y)
clc
clear
counter3=[-4.11399984359741,-1.20000004768372,-4.56400012969971,0.800000011920929,0,0,0
-4.56400012969971,0.800000011920929,2.5,9.68000030517578,7.25,2.50039005279541,2.4300000667572
2.5,9.68000030517578,9.56400012969971,0.800000011920929,7.25,2.49960994720459,2.4300000667572
9.56400012969971,0.800000011920929,9.11400032043457,-1.20000004768372,0,0,0
9.11400032043457,-1.20000004768372,-4.11399984359741,-1.20000004768372,0,0,0];
counter=counter3;
输入待计算点坐标(平面坐标系,右为X,上为Y)
pointcloud(1) = 7 ;
pointcloud(2) = 2;
判断点在轮廓直线段还是弧段,然后计算超欠挖和在轮廓内外的方向
[num_of_sample,~]=size(counter);
figure
axis equal
for i=1:num_of_sample
if counter(i,5)==0
x=[counter(i,1);counter(i,3)];
y=[counter(i,2);counter(i,4)];
plot(x,y,'r');
axis equal
hold on
else
p1=[counter(i,1);counter(i,2)];
p2=[counter(i,3);counter(i,4)];
r=counter(i,5);
c=[counter(i,6);counter(i,7)];
drawarc(p1,p2,abs(r),c);
axis equal
hold on
end
end
plot(0,0,'r*');
plot(pointcloud(1),pointcloud(2),'r+');
axis equal
hold on
[areanum,mydis,length]=CalDev2 (counter,pointcloud);
str=['超欠挖:' num2str(mydis) ',' '周向里程:' num2str(length)];
title(str)
隧道点到轮廓的超欠挖,正表示超挖,负表示欠挖
绘图说明:
直线段连接隧道中心点与直线起始点,弧线段连接圆弧圆心与圆弧的起点
目标点在直线轮廓上对应距离最小的点用‘*’标出,在圆弧轮廓段上对应最小距离点用‘o’标出
目标点用‘+’标出
目标点在整个轮廓上的最段距离及与对应的轮廓点用直线连接
每段轮廓包括起点,不包括终点
代码考虑了点在轮廓的内部还是外部问题
全部代码见链接
https://download.csdn.net/download/qq_17386217/12394257
内附使用说明