matlab隧道任意点超欠挖计算

输入轮廓数据(平面坐标系,右为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
内附使用说明

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值