由于现在计算机普及,计算机功能日益强大,宜采用较简单的积分公式,便于计算机处理。
单线元通用积分公式如下
M = (1.0/Re-1.0/Rs)/Ls;
x=∫ { cos(Ta + L/Rs + 0.5*M *L*L) , 0 , L } ;
y=∫ { sin(Ta +L/Rs + 0.5*M *L*L) , 0 , L } ;
a(i)= Ta +L/Rs + 0.5*M *L*L

Rs: 缓和曲线起点半径
Re: 缓和曲线止点半径
Rs , Re ( NE 坐标系下,右偏为正,左偏为负)
Ta: 缓和曲线起点的真北方位角
Ls: 不完整缓和曲线长度。
此公式为缓和曲线在坐标系下任意位置的通用积分公式,能完全适应缓和曲线左偏、右偏、 Rs >Re 、 Rs <Re 等各种情况,不必先凑成完整缓和曲线,降低算法的复杂程度。虽然此公式是由缓和曲线推导出来,也可和于直线与圆曲线,可降低计算机编程的复杂程度。

Fx-5800 计算机程序
QXJS-000 主程序
Lbl 4:“1.SZ=>NE”:“2.NE=>SZ”:?Q:?S:Prog“QXJS-SUB0”↙
Lbl 0:Q=1 => Goto1:Q=2 => Goto2:↙
Lbl 1:?Z:Prog“QXJS-SUB1”:“N=”:N◢:“E=”:E◢:“F=”:F◢: Goto4↙
Lbl 2: “N=”:?B: “E=”:?C:B→N: C→E:Prog“QXJS-SUB2”: “S=”:S◢: “Z=”:Z◢: Goto4↙
QXJS-SUB0 数据库子程序
Goto1↙ 同时保存多个曲线时的指针
Lbl 1
IF S<*** (线元终点里程) :Then***→A (线元起点方位角) :***→O (线元起点里程) :***→U (线元起点 X ) :***→V (线元起点 Y ) :***→P (线元起点曲率半径) :***→R (线元终点曲率半径) : ***→L (线元起点至终点长度) : Return:IfEnd↙
IF S<***:Then***→A:***→O:***→U:***→V:***→P:***→R: ***→L: Return:IfEnd↙
……………………….. 为了便于解读,每增加一个线元增加一行语句,每增加一条曲线增加一个 Lbl ,每增加一个工程增加一个文件。

QXJS-SUB1 正算子程序
0.5 ( 1÷R-1÷P ) ÷L→D:S-O→X↙
U+∫(cos(A+(X÷P+DX2)×180÷π,0,X)→N↙
V+∫(sin(A+(X÷P+DX2)×180÷π,0,X)→E↙
A+(X÷P+DX2)×180÷π→F↙
N+Zcos(F+90) →N:E+Zsin(F+90) →E
QXJS-SUB2 反算子程序
Lbl 1:0→Z : 1→Q : Prog“QXJS-SUB0”: Prog“QXJS-SUB1”↙
Pol(N-B+10^(-46), E-C+10^(-46)):Isin(F-90-J) →W:S+W→S↙
Abs(W)>0.0001 => Goto1↙
Lbl 2: 0→Z : Prog“QXJS-SUB1”:(C-E) ÷sin(F+90) →Z
三、使用说明
1 、规定
(1) 以道路中线的前进方向(即里程增大的方向)区分左右;当曲线半径在左时, P 、 R 取负值,当曲线半径在右时, P 、 R 取正值,当曲线半径为无穷大(即直线)时, P 、 R 以 10 的 45 次代替。
(2) 当所求点位于中线时, Z=0 ;当位于中线左铡时, Z 取负值;当位于中线中线右
侧时, Z 取正值。
(3) 当线元为圆曲线时,无论其起点、止点与什么线元相接,其曲率半径均等于圆
弧的半径。
(5) 当线元为完整缓和曲线时,起点与直线相接时,曲率半径为无穷大,以 10 的 45 次方代替;与圆曲线相接时,曲率半径等于圆曲线的半径。止点与直线相接时,曲率半径为无穷大,以 10 的 45 次代替;与圆曲线相接时,曲率半径等于圆曲线的半径。
(6) 当线元为非完整缓和曲线时,起点与直线相接时,曲率半径等于设计规定的
值;与圆曲线相接时,曲率半径等于圆曲线的半径。止点与直线相接时,曲率半径等
于设计规定的值;与圆曲线相接时,曲率半径等于圆曲线的半径。
2 、输入与显示说明
输入部分:
1. SZ => XY
2. XY = > SZ
Q ? 选择计算方式,输入 1 表示进行由里程、边距计算坐标 ;输入 2 表示由坐标反算里程和边距。