1 需求分析
多条测线只有平面坐标,没法绘制剖面图,因为没有剖面序列,还得换算才行,得把平面坐标拉直了,投影到直线上。直线最好是用可视化的方法点上去。
2 算法分析
(1)已知直线上两点坐标为(sx,sy),(ex,ey),则直线可用ax+by+c=0表示,系数分别为:
a = (ey - sy)/(ex- sx);
b = -1;
c = sy-a*sx;
(2)已知点坐标为(m,n),则点到直线距离如下,距离用来评判点偏离直线的程度。
distance = |a*m+b*n+c|/sqrt(a*a+b*b);
(3)点到直线垂线的垂足坐标如下。计算出垂足,然后从起点出发,就可以得到剖面序列。
( (b*b*m-a*b*n-a*c)/(a*a+b*b), (a*a*n-a*b*m-b*c)/(a*a+b*b) )
3 程序设计
用两个控件实现,uitable和axes即可。
用工具栏实现功能,分别是打开,图的放大,缩小,平移,指定起点,终点,适合大小,计算。
打开:打开指定的csv文件,并显示在表上,同时在图上展示。默认的起点和终点分别为左下和右上,并显示为直线。
放大,缩小,平移:移动图的位置,方便观察。
指定起点,终点:设置测线的起点和终点。
适合大小:将图对象适应到有一定边宽范围内。
计算:按照上述算法计算得到测线距离列。
这样就可以用测线列绘图了。
下面是全部代码:
- function varargout = LineStretcher(varargin)
- % LINESTRETCHER MATLAB code for LineStretcher.fig
- % LINESTRETCHER, by itself, creates a new LINESTRETCHER or raise