想用lisp语言写一个自动绘制河道中心线的小程序(河道水边线为两条多段线) 在网上没找到相关的一些参考,在这里把自己的想法写出来,望高手指点算法这块. 目标:获取第一条水边线(PL1)顶点到第二条水边线边(PL2)的垂线中点或连线中点,各中点的连线既作为河道中心线. 步骤: 1\取两条水边线的起点直接连接取中点,作为河道中心线的起点,置于中心线顶点列表(ML) 2\获取PL1的第i个顶点pt(初始i为2),是最后一点则跳到步骤6 3\求pt到PL2各线段的垂足f,如f不为空且垂足到顶点pt的连线与两条水边线各只有一个交点,则将垂足f置于列表list, 4\计算列表list中最小垂线min1(顶点pt到垂足f),计算pt到PL2的最短连线min2,列表list为空或min1>min2,则取min2的中点作为顶点pt对应的河道中心线顶点置于顶点列表(ML),min1<min2,则取min1的中点作为顶点pt对应的河道中心线顶点置于顶点列表(ML) 5\获取PL1下一个顶点(i累加1),返回步骤2 6\取两条水边线的终点直接连接取中点,作为河道中心线的终点,置于中心线顶点列表(ML) 7\pline绘制列表ML 在河道转弯、宽度突变等特殊情况下,上面思路绘制时会出现问题,希望高手在算法上给于帮助,谢谢
|