                                                                  对缓和曲线坐标计算算法的几点看法
    高速公路、铁路上都有缓和曲线，计算用的电脑软件、卡西欧可编程计算器程序和算法多种多样。经济基础决定上层建筑，一个好的算法决定程序的品质，怎样才是最简单有效的呢？
1、首先说下缓和曲线的类型
    国内高速公路所采用的缓和曲线多半为回旋线，回旋线在起点和终点处曲率不连续，存在突变，国内外都在研究高质量的缓和曲线，除了回旋线之外，圆曲线与直线或圆曲线相接有200多种缓和曲线，例如汽车试验场高速环道采用的就是麦克康纳尔曲线和布劳斯曲线，还有浙江交通设计师周一勤推导的改进型缓和曲线，与麦克康纳尔曲线很接近，李运胜博士对于麦克康纳尔曲线和布劳斯曲线有很深刻的研究。而我国道路设计、施工对回旋线研究较多，对于汽车试验场采用的高速环道研究很少，设计上被日本、美国、德国等国垄断，在技术上对中国实行技术封锁，中国人只能傻傻地拿到外国人的CAD坐标逐点量取，工程结束了甚至还不知道是什么曲线，知其然不知其所以然，这是很可悲的。
2、交点法和线元法的关系与比较
    不用多说，交点法有很大的局限性，交点法计算完全缓和曲线是比较方便的，所谓完全缓和曲线就是缓和曲线的起点或者终点半径是无穷大∞的，只要是完全饱和的就好计算，无论缓1和缓2是否等长都好计算。而对于不完全缓和曲线，起点终点半径不等于无穷大，交点法要推算切线长就比较困难了，通过程序计算切线长虽然可以实现，但是需要考虑的东西太多太繁杂，手工输入切线长又增加了参数，而线元法实现起来是非常简单的，前面说到缓和曲线类型种类多样，但万变不离其宗，知道最基本的曲率方程，线元法很容易推算出坐标。交点法最终的本质还是要靠线元法来实现，无论哪种缓和曲线，线元法都可以用一个统一的公式来表达其坐标，所以线元法才是最通用的算法。
3、交点法输入的参数
    目前很多软件交点法计算里程采用的是只输入起点里程，其他交点的里程通过程序推算，我不推荐用这种方式。因为不同的设计院设计风格不同，而且铁路公路对于小数位的取舍和精度要求不同，一个符合设计图纸要求的坐标才是最正确的，如果因为里程取舍问题与设计图纸误差较大是得不偿失的。另外一个方面，如果手工输入交点里程，基本上对于断链不需要处理，断链本身就是一个里程修改而已。我建议手工输入交点里程，同时可以通过一定的方式来进行推算复核交点里程。
4、线元法的分段与设计思想
   其实线元法的设计就是一个分治思想(Divide and Conquer)的表达，分而治之，分段多细为好呢？一个程序员一定要有思想，这是Programmer与Coder最基本的区别。很多软件采用的是逐段分段，直线，缓，圆均单独分段（积木法），还有的把直线+缓1+圆+缓2+直线作为一个整体分段。
    我觉得还是把缓1+圆+缓2作为一个整体单独分段的好，因为直线具有这样的特点，只要知道其上任意一点的坐标方位角，就可以非常简单地推算任意一点的坐标方位角，直线的半径是无穷大，直线的已知参数不需要弧长这个参数，如果与圆或者缓和曲线放在一起处理，无穷大难以表达，在卡西欧可编程计算器中有些处理为10的高次方，有些用0来表达，都有些牵强。圆曲线与直线一样，只要知道其上任意一点的坐标方位角，就可以非常简单地推算任意一点的坐标方位角，圆的已知参数不需要弧长这个参数，因此圆曲线单独分段比较合理，圆曲线单独分段后，与任意一种不同类型的缓和曲线相接可以实现模块化设计的思想，便于维护。
    把缓1+圆+缓2作为一个整体进行分段处理，可以省略很多参数。如果按照积木法思想要分成三段，输入ZH、HY、YH、HZ点的4个起止里程坐标方位角，8个点半径，共28个参数，而且还要判断缓1缓2是否完全饱和，起点终点半径推算也麻烦。如果作为一个整体，只需要输入HY1个点的里程坐标方位角，1个圆半径，3个弧长即可（缓1缓2的弧长可以用回旋参数代替），共9个参数，省略了3个点的起止里程坐标方位角和4点的半径，省略了19个参数，简化了软件计算，对于卡西欧可编程计算器，给一个参数赋值平均需要占用11个字节，19×11=209字节，如果有20个交点，就有20条这样的曲线，节省的字节数=4180字节，4800的容量才4500字节，节省的字节数是非常可观的。对于路面施工，交点更多，节省的空间会更多，腾出来的空间可以用来计算路基设计高程、超高加宽等等。
    把缓1+圆+缓2作为一个整体，起算点选择在HY点，由于HY点作为起算点具有相对固定性，从小半径向大半径，从中间向两边推算，截去的哪一段，如果有就让他有，如果没有，不计算就是了，是否饱和根本不用判断，饱和不饱和已经不重要了，如果圆曲线长度为零一样计算。对于完全缓和曲线，A1=sqr(R*Ls1)，对于不完全缓和曲线，A1=sqr(|Ls1*R1*R2/(R1-R2)|)，仅此区别而已。
5、边桩坐标的计算
    边桩坐标计算比较好的办法还是用二次偏距法，这种方法可以很轻松地计算桥涵结构物坐标，包括墩台径向布置和平行布置，路基边桩直接用一次偏距，第二偏距输入零就行了，一次偏距法还是有其局限性的。
    具体的算法基本都是用切线支距法结合坐标旋转，对于软件可以直接利用泰勒公式将超越函数（三角函数）展开为弧长的幂级数，也可以用定积分的近似计算方法来推导，定积分收敛较快的方法主要有抛物线法（辛普森Simpson法）、龙贝格Romberg法、牛顿-柯特斯Newton-Cotes求积公式、高斯Gauss求积公式，CASIO 4500、4800、4850的积分计算使用Simpson（辛普森）法，而5800使用Gauss（高斯）法，均可以与软件算法一一对应。
    以上所有的算法都体现在我编写的《高速公路坐标高程计算程序》中，不为名不为利，业余爱好而已，因此软件完全免费，同时提供生成对应的卡西欧5800程序功能，具体的算法有图例，有算法公式，有说明，算法得益于聂让主编的《全站仪与高等级公路测量》道路立交匝道的测设相关章节，布劳斯曲线计算得益于李运胜博士关于《布劳斯曲线在高速环道几何设计中的应用》及《高速环道几何线形的运动学评价》。
    对于同一个事物，不同的人有不同的看法，而且学无止境，借此机会抛砖引玉，与大家讨论缓和曲线坐标计算的算法。
                                                                                             陈晓猫
                                                                                             