- 积分
- 61918
- 明经币
- 个
- 注册时间
- 2005-11-29
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
本帖最后由 llsheng_73 于 2025-1-13 13:10 编辑
只要能完成对A1A2连线的中点p改算,使之满足a1p,pa2斜率相等,就可以一直这样进行下去得到最终的结果。
改算过程大致如下:计算两点中点p,检查斜率,一般情况这个平面位置高程不等于两点高程平均值h,所以斜率不相等。过p作连线的近似垂线l(过p与标高最大和最小这两条等高线的交点距离最大),在l上找到高程为h的点。
通过不断增加点,反复上边的过程,直到所有相邻点间高差小于基本等高距并且斜率相等
但是由于等高线疏密是不等的,有时相差较大,这个思路很可能行不通(有可能根据a1a2平面中点根本找不到其高程平均值h,这个时候前边的思路就这完蛋了),特别是A1A2连线近似垂直于等高线的情况很容易出现这个问题
另一个思路是先计算出A1,A2到各自最近等高线的距离,及相邻等高点间最大距离,然后从A1开始以这个斜率往A2方向在其最近的等高线上找到这个点,这样一直到距离A2最近的等高线上的点p,但这个时候pA2的斜率与前边其它线段的斜率是不相等的,然后应该怎么修正这个斜率重新计算呢?直接把差值加上去重新计算从A1开始,最后能不能得到符合要求的结果?
后边又想了一下,感觉通过在两条等高线之间内插指定标高的间曲线,然后在线上找到指定要点平面距离相等的点以保证斜率一致,应该可以直接求解,只是内插的次数相对较多,而内插曲线相对来说计算量较大,但能一次求解
1.用A1A2通过F方式选择相关等高线并按标高排序,再追加相邻等高线得到等高线数据表hs((标高1 曲线1)...(标高n 曲线n));
2.用A1A2构建初始点表pts(list A1 A2)并按高程排序,设置初始变量i=0
3.对pts进行while循环处理(结束条件为i=(length pts)
3.1在表中取第i点p1和i+1点p2计算平均高程h
3.2在hs中找到和h最接近的两条线(a,b),在a,b间计算内插曲线c并追加到hs并保持按标高排序的特征,记录c到内插曲线图元表s2(内插曲线1)
3.3在c上找出点p,使p1p和pp2平面距离相等
3.4如果p1p与p1p2斜率相等,i=i+1,否则将p插入到pts并保持pts按高程排序的特性
4.根据s2删除所有内插曲线
5.返回pts
两曲线间内插曲线的精度直接影响计算结果
|
|