标准悬链线方程和C语言实现

cheungmine

(本文可以供大学本科学生和工程技术人员学习电线力学参考,也可供游戏物理引擎开发人员参考)

标准悬链线是指悬挂在2个固定端A,B的均质柔性曲线。根据理论力学原理,其形态仅与悬挂点的高差h,链条线密度w,最低点的水平拉力T0和水平档距l有关,即 f (T0, w, l, h)。

悬链线的几何方程决定了线上每一点在悬链线坐标系中的坐标:

y = g(T0, w, l, h,x).

悬链线的物理方程决定了线上每一点的轴向拉力,这个拉力可以分解为水平拉力T0和竖直拉力Tvx:

Tvx = T(T0, w, l, h,x).

悬链线坐标系是定义为以低悬点A为原点,指向高悬点在A的水平平面的投影B'为X轴,竖直向上与荷载平行为Y轴的平面直角坐标系。低悬点必须是A。

下面是标准悬链线方程的公式的函数化表示。参考书为:

《架空送电线路的电线力学计算(第二版)》 中国电力出版社,邵天晓

说明:

1)算法中的 P61 (3-6)指书中61页的公式(3-6)

2)本文仅仅是书中公式的C语言翻译。并未针对实际应用进行优化,因此存在大量充分计算的参数,如Lh0,s,cosB等。

3)在工程中应该采用双曲线版本,如果对精度要求不严格,可以采用斜抛物线版本。本文未提供平抛物线版本, 平抛物线误差太大,在工程中没有实际意义 。

/***************************************************************************************

* 悬链线计算用坐标系为以 A (低悬点)为原点, A 与 B' ( B 在与 A 等高的水平面上的投影点)为 X 轴,

* AB 之间的高差 h = HB-HA , h>=0 。以下为变量命名规则:

*

* T 线上应力,单位截面上作用的张力: N/mm2

* L 线长: m

* H 高度: m

* w 比载,电线单位长度、单位截面上承受的荷载称为比载: N/mm2.m

* l 档距,相邻两悬挂点间垂直于荷载方向的投影距离称为档距: m

* h 高差,相邻两悬挂点沿荷载方向的高差,当右悬挂点高于左悬挂点时 h 为正值,反之为负值: m

*

* f 电线的弧垂,指自两悬挂点连线沿荷载方向到电线轴线间的距离: m

* fM 档距中央弧垂,档内电线的最大弧垂

* fO 悬链线最低点 O 的弧垂

*

* fAO 低悬点 A 对 O 的高差

* fBO 高悬点 B 对 O 的高差

*

* A 左(低)悬挂点,应力 TA

* B 右(高)悬挂点,应力 TB

* O 最低点,仅有水平应力 T0

*

* s 斜距 |AB| ,两悬挂点连线的直线距离: sqrt(l*l+h*h)

* a 平距 |AO| ,电线最低点到左悬挂点 A 垂直于荷载方向的投影距离

* b 平距 |BO| ,电线最低点到右悬挂点 B 垂直于荷载方向的投影距离

* cosB l 与 s 的比: 1/s

*

* 其中:

* elec 电力

* catenary 悬链线

* hyperbolic 双曲线公式,精确计算公式

* parabolic  抛物线公式,高阶近似计算公式

* sag 弧垂

* suspension 悬挂点

****************************************************************************************/

/******************************************************************************

*                           Catenary Common Functions                        *

*                                                                            *

*  asinh                                                                     *

*  elec_catenary_inclined_dist                                               *

*                                                                            *

*****************************************************************************/

/**

* 反双曲正弦函数

* asinh(x) = ln[x + sqrt(x^2 + 1)]

*/

double asinh(double x)

{

return log(x+sqrt(x*x+1));

}

/**

* 斜距 s

* 已知 A,B 悬挂点的档距 l 和高差 h 求 A,B 间的直线距离:斜距 s

*/

double elec_catenary_inclined_dist ( double l,

double h

)

{

return sqrt(l*l + h*h);

}

/******************************************************************************

*                           Catenary Hyperbolic Functions                    *

*                         An Accurate Expression of Catenary                 *

*                                                                            *

*  elec_catenary_hyperbolic_equation                                         *

*                                                                            *

*                                                                            *

*****************************************************************************/

/**

* 悬挂点等高时悬链线线长双曲线公式 . P61 (3-6)

*/

double elec_catenary_hyperbolic_length_equal_high (

double T0,

double w,

double l

)

{

return (2*T0/w)*sinh(w*l/2/T0);

}

/**

* 悬链线线长双曲线公式 . P73 (3-37)

*/

double elec_catenary_hyperbolic_length (

double T0,

double w,

double l,

double h

)

{

double Lh0 = elec_catenary_hyperbolic_length_equal_high(T0, w, l);

return sqrt(h*h+Lh0*Lh0);

}

/**

* 悬链线最低点 O 到悬挂点 A 间垂直于荷载方向的投影 a ( 可以 <0)

* 使用双曲线方程 ( 精确式 ) 计算 P61 (3-6)

* 说明 b = l - a

*/

double elec_catenary_hyperbolic_lowest_proj (

double T0,

double w,

double l,

double h

)

{

double Lh0 = elec_catenary_hyperbolic_length_equal_high (T0, w, l);

double a = l/2 - T0/w*asinh(h/Lh0);

double b = l/2 + T0/w*asinh(h/Lh0);

return a;

}

/**

* 悬链线双曲线坐标方程 P62 (3-9)

* 悬链线上任何一点对 A 点的高差

* y = f(x), x = [0, l]

* 验证: f(0)=0, f(l)=h

*/

double elec_catenary_hyperbolic_equation (

double T0,

double w,

double l,

double h,

double x

)

{

double a = elec_catenary_hyperbolic_lowest_proj (T0, w, l, h);

double y = T0*(cosh((x-a)*w/T0) - cosh(w*a/T0))/w;

return y;

}

/**

* 悬链线双曲线力学方程 P66 (3-20)

* 悬链线上任一点轴向应力

* T = t(x), x = [0, l]

* 验证 TA = t(0), TB = t(l)

*/

double elec_catenary_hyperbolic_tension (

double T0,

double w,

double l,

double h,

double x

)

{

double a = elec_catenary_hyperbolic_lowest_proj (T0, w, l, h);

double Tx = T0*cosh(w*(x-a)/T0);

return Tx;

}

/**

* 悬挂点应力 TA, TB

* 使用双曲线方程 ( 精确式 ) 计算 P67 (3-24)

*/

void elec_catenary_hyperbolic_suspension_tension (

double T0,

double w,

double l,

double h,

double *TA,

double *TB

)

{

double Lh0 = elec_catenary_hyperbolic_length_equal_high (T0, w, l);

double u = w*l/T0/2;

double v = asinh(h/Lh0);

*TA = T0*cosh(u - v);

*TB = T0*cosh(u + v);

}

/**

* 悬链线悬挂点处的竖向应力分量 . P72 (3-36)

* Tva, Tvb

*/

void elec_catenary_hyperbolic_vert_suspension_tension (

double T0,

double w,

double l,

double h,

double *Tva,

double *Tvb

)

{

double u = w*l/2/T0;

double v = sinh(u);

double k = h*w/2/T0;

*Tva = T0*sinh(u - asinh(k/v));

*Tvb = T0*sinh(u + asinh(k/v));

}

/**

* 悬链线双曲线弧垂计算方程 P63 (3-12)

* f = d(x), x = [0, l]

* 验证: fA = d(0) = 0, fB = d(l) = 0

*/

double elec_catenary_hyperbolic_sag (

double T0,

double w,

double l,

double h,

double x

)

{

double Lh0 = elec_catenary_hyperbolic_length_equal_high (T0, w, l);

double fx = h*x/l - T0*h/w/Lh0*(sinh(w*l/2/T0) + sinh(w*(2*x-l)/2/T0)) +

(2*T0/w*sinh(w*x/2/T0)*sinh(w*(l-x)/2/T0))*sqrt(1+h*h/(Lh0*Lh0));

return fx;

}

/**

* 悬链线双曲线电线平均高度精确式 P78 (3-44a)

* 电线平均高度是指电线各点与电线弧垂最低点间的高差沿档距的积分面积被档距除得的商,

* 即全档电线高出最低点的平均高度

*/

double elec_catenary_hyperbolic_avg_high (

double T0,

double w,

double l,

double h

)

{

double u = sinh(w*l/2/T0);

double v = cosh(w*l/2/T0);

double hav;

/** calc hav from a

* double a = elec_catenary_hyperbolic_lowest_proj(T0, w, l, h);

* hav = T0/w/l*( T0/w * ( sinh(w*l/T0)*cosh(w*a/T0) - cosh(w*l/T0)*sinh(w*a/T0) + sinh(w*a/T0) ) - l );

*/

/** calc hav from Lh0 */

double Lh0 = elec_catenary_hyperbolic_length_equal_high (T0, w, l);

hav = 2*T0*T0*u/(w*w*l)*(v*v - u*u)*sqrt(1+h*h/Lh0/Lh0) - T0/w;

return hav;

}

/**

* 悬链线双曲线电线平均应力精确式 P80 (3-45)

* 全档电线各点不同应力下产生的全部弹性伸长通常用一个产生全部弹性伸长的等效应力

* 或平均应力 Tav 来计算。该应力的大小为各点应力沿线长积分被线长除后所得的平均值

* Tav = 1/L*∫(0~L)Tx.dL 。 ∫(0~L) 表示积分符号

*/

double elec_catenary_hyperbolic_avg_tension (

double T0,

double w,

double l,

double h

)

{

double L = elec_catenary_hyperbolic_length(T0, w, l, h);

double Tav = T0/2/L*(l+ (L*L+h*h)*cosh(w*l/2/T0)/sqrt(L*L-h*h));

/** An Approximate Expression of Tav

* double Tav = T0/2/L*((l*l+h*h+L*L)/l);

*/

return Tav;

}

/**

* 悬链线双曲线任一点轴向斜率 P65 (3-19)

* 电线切线与 x 轴正方向间的夹角的正切

*/

double elec_catenary_hyperbolic_tangent(

double T0,

double w,

double l,

double h,

double x

)

{

double a = elec_catenary_hyperbolic_lowest_proj(T0, w, l, h);

return sinh(w*(x-a)/T0);

}

/******************************************************************************

*                           Catenary Parabolic Functions                     *

*                       An Approximate Expression of Catenary                *

*                                                                            *

*  elec_catenary_parabolic_equation                                          *

*                                                                            *

*                                                                            *

*****************************************************************************/

/**

* 悬链线线长抛物线公式 . P74 (3-39)

* 工程上采用可以得到极为精确的近似值

*/

double elec_catenary_parabolic_length (

double T0,

double w,

double l,

double h

)

{

double s = elec_catenary_inclined_dist (l, h);

return s + (w*w*l*l*l*l)/(24*s*T0*T0);

}

/**

* 悬链线抛物线坐标方程 P82 (3-48)

* 悬链线上任何一点对 A 点的高差

* y = f(x), x = [0, l]

* 验证: f(0)=0, f(l)=h

*/

double elec_catenary_parabolic_equation (

double T0,

double w,

double l,

double h,

double x

)

{

double t = w/(2*T0*l/sqrt(l*l+h*h));

double y = (x*t + (h/l - l*t)) * x;

return y;

}

/**

* 悬链线抛物线力学方程 . P85 (3-60a)

* 悬链线上任一点轴向应力

* T = t(x), x = [0, l]

*/

double elec_catenary_parabolic_tension (

double T0,

double w,

double l,

double h,

double x

)

{

double cosB = l / sqrt(l*l+h*h);

double u = h/l - w*(l-2*x)/(2*T0*cosB);

double Tx = T0 * sqrt(1 + u*u);

return Tx;

}

/**

* 悬链线按抛物线方程近似计算悬挂点应力 TA, TB. P85 (3-63, 3-64)

*

*/

void elec_catenary_parabolic_suspension_tension (

double T0,

double w,

double l,

double h,

double *TA,

double *TB

)

{

double cosB = l / sqrt(l*l+h*h);

double u = T0/cosB;

double v = w*l*l/(8*T0*cosB);

*TA = u + (v-h/2)*w;

*TB = u + (v+h/2)*w;

}

/**

* 悬链线按抛物线方程近似计算悬挂点应力竖向分量 P84 (3-59) (3-60)

* Tva, Tvb

*/

void elec_catenary_parabolic_vert_suspension_tension (

double T0,

double w,

double l,

double h,

double *Tva,

double *Tvb

)

{

double cosB = l / sqrt(l*l+h*h);

*Tva = w*l/2/cosB - T0*h/l;

*Tvb = w*l/cosB - (*Tva);

}

/**

* 给定高悬点应力 TB 求最低点容许应力 T0 P86 (3-65)

* 按抛物线方程取近似值

*/

double elec_catenary_parabolic_lowest_tension (

double TB,

double w,

double l,

double h

)

{

double s = elec_catenary_inclined_dist ( l, h );

double cosB = l / s;

double u = TB-w*h/2;

double T0 = cosB*u/2 + sqrt(u*u*cosB*cosB - w*w*l*l/2)/2;

return T0;

}

/**

* 悬链线最低点 O 到悬挂点 A 间垂直于荷载方向的投影 a ( 可以 <0)

* 使用抛物线方程 ( 近似式 ) 计算 P62 (3-7)

* 说明 b = l - a

*/

double elec_catenary_parabolic_lowest_proj (

double T0,

double w,

double l,

double h

)

{

double cosB = l / elec_catenary_inclined_dist ( l, h );

double a = l/2 - T0*h*cosB/(w*l);

return a;

}

/**

* 悬链线电线平均高度

* 抛物线方程 P86 (3-66)

*/

double elec_catenary_parabolic_avg_high (

double T0,

double w,

double l,

double h

)

{

double cosB = l / elec_catenary_inclined_dist ( l, h );

double hav = w*l*l/(24*T0*cosB) + T0*cosB*h*h/(2*w*l*l);

return hav;

}

/**

* 悬链线电线平均应力

* 抛物线方程 P86 (3-67)

*/

double elec_catenary_parabolic_avg_tension (

double T0,

double w,

double l,

double h

)

{

double cosB = l / elec_catenary_inclined_dist ( l, h );

double Tav = T0/cosB + w*w*l*l/(24*T0*cosB);

return Tav;

}

/**

* 悬链线抛物线任一点轴向斜率 P83 (3-51)

* 电线切线与 x 轴正方向间的夹角的正切

*/

double elec_catenary_parabolic_tangent(

double T0,

double w,

double l,

double h,

double x

)

{

double cosB = l / elec_catenary_inclined_dist ( l, h );

return h/l - w*(l-2*x)/(2*T0*cosB);

}

int main(int argc, CHAR* argv[])

{

double l = 400;     /* m */

double h = 100;     /* m */

double w = 0.06134; /* N/(m.mm2) */

double T0 = 98.1;   /* N/mm2 */

// 双曲线长精确式

double L = elec_catenary_hyperbolic_length(T0, w, l, h);

// 抛物线长近似式

double Lp = elec_catenary_parabolic_length(T0, w, l, h);

// 双曲线悬点拉力 TA, TB

double TA, TB;

elec_catenary_hyperbolic_suspension_tension(T0, w, l, h, &TA, &TB);

// 抛物线悬点拉力 TAp, TBp

double TAp, TBp;

elec_catenary_parabolic_suspension_tension(T0, w, l, h, &TAp, &TBp);

// 已知高悬点拉力反算最低点应力 T0p

double T0p = elec_catenary_parabolic_lowest_tension(TB, w, l, h);

// 计算弧垂 sag

double fA = elec_catenary_hyperbolic_sag(T0, w, l, h, 0);

double fB = elec_catenary_hyperbolic_sag(T0, w, l, h, l);

// 档距中央弧垂

double fM = elec_catenary_hyperbolic_sag(T0, w, l, h, l/2);

// 最低点弧垂

double a;

a = elec_catenary_hyperbolic_lowest_proj(T0, w, l, h);

double ap;

ap = elec_catenary_parabolic_lowest_proj(T0, w, l, h);

double fO = elec_catenary_hyperbolic_sag(T0, w, l, h, a);

double y;

y = elec_catenary_hyperbolic_equation(T0, w, l, h, 0);

y = elec_catenary_hyperbolic_equation(T0, w, l, h, a);

y = elec_catenary_hyperbolic_equation(T0, w, l, h, l/2);

y = elec_catenary_hyperbolic_equation(T0, w, l, h, l);

// 电线平均高度

double hav = elec_catenary_hyperbolic_avg_high(T0, w, l, h);

double Tav = elec_catenary_hyperbolic_avg_tension(T0, w, l, h);

double havp = elec_catenary_parabolic_avg_high(T0, w, l, h);

double Tavp = elec_catenary_parabolic_avg_tension(T0, w, l, h);

// 悬挂点竖向应力

double Tva = elec_catenary_hyperbolic_vert_tension(T0, w, l, h, 0);

double Tvb = elec_catenary_hyperbolic_vert_tension(T0, w, l, h, l);

double Tva2;

double Tvb2;

elec_catenary_hyperbolic_vert_suspension_tension(T0, w, l, h, &Tva2, &Tvb2);

double Tvap;

double Tvbp;

elec_catenary_parabolic_vert_suspension_tension(T0, w, l, h, &Tvap, &Tvbp);

// 计算验证 w×L = Tva+ Tvb

return 0;

}

悬链线方程和C语言实现相关推荐

  1. 数学建模之悬链线方程

    友情链接: (1)悬链线 https://blog.csdn.net/moonlightpeng/article/details/89683245 (2)悬链线方程的求解及其应用 http://jz. ...

  2. c语言对分求解方程,用C语言对一元二次方程求解

    一元二次方程标准形式为 ax²+bx+c=0,且a≠0. 在用C语言求值时,需要先判断给出的a.b.c三值是否满足一元二次方程,即判断a是否为0. 当a=0时,输出(不是一元二次方程): 当a≠0时, ...

  3. matlab悬链线方程的求解,Matlab建模教程-变分法简介.doc

    Matlab建模教程-变分法简介 §1 变分法简介 作为数学的一个分支,变分法的诞生,是现实世界许多现象不断探索的结果,人们可以追寻到这样一个轨迹: 约翰·伯努利(Johann Bernoulli,1 ...

  4. 求解欧拉方程的c语言,用有限体积方法求解欧拉方程

    <用有限体积方法求解欧拉方程>由会员分享,可在线阅读,更多相关<用有限体积方法求解欧拉方程(12页珍藏版)>请在人人文库网上搜索. 1.有限体积法求解二维可压缩Euler方程计 ...

  5. 求解欧拉方程的c语言,用有限体积方法求解欧拉方程.doc

    PAGE 4 - 实用标准 文档 有限体积法求解二维可压缩Euler方程 --计算流体力学课程大作业 老师: 夏健.刘学强 学生: 徐锡虎 学号: SQ09018013018 日期: 2010年2月5 ...

  6. R语言处理非线性回归模型C-D方程,使用R语言进行多项式回归、非线性回归模型曲线拟合...

    对于线性关系,我们可以进行简单的线性回归.对于其他关系,我们可以尝试拟合一条曲线.曲线拟合是构建一条曲线或数学函数的过程,它对一系列数据点具有最佳的拟合效果. 使用示例数据集#我们将使Y成为因变量,X ...

  7. 用c语言定义一个分式方程,计算机C语言实验报告(00001)

    1.C语言实验报告专 业 _年 级 _学 号 _学生姓名 _指导老师 _华中师范大学信息管理系编I 实验要求1每次实验中有若干习题,每个学生至少应该完成其中的三道习题.2上机之前应作好充分的准备工作, ...

  8. 把x带入方程的c语言,C语言编程,用C语言编写下面这个方程。方程:x²(x-A)=B 注:A和B都是已知常数,x是待求未知数。...

    匿名用户 1级 2012-03-21 回答 这是高次方程是没有解析解的,但可以用逼近法求解. 关于这类题最经典的是二分法: 问题二分法解决方程求解问题 利用二分法,求方程 的实根,精确到两位小数. 分 ...

  9. 二分法求方程根--C语言

    1088: 习题5-15 二分法求方程的根 时间限制: 1 Sec  内存限制: 12 MB 提交: 43  解决: 24 [提交][状态][讨论版] 题目描述 用二分法求下面方程在区间(a,b)之间 ...

最新文章

  1. 共享内存 传一个类指针_C++指针
  2. java不使用除号实现除法运算_LeetCode29 Medium 不用除号实现快速除法
  3. 2017一季度JAVA面试题锦集
  4. abp vue如何配置服务地址_DHCP服务如何配置才能尽量减少被攻击的可能
  5. Hive安装Version2.1.0
  6. Java TCP案例网络聊天室
  7. 190420每日一句
  8. 【人脸识别】基于matlab GUI LBP人脸识别【含Matlab源码 1282期】
  9. 材料表征技术书籍-7本
  10. 机械类有哪些好投一些的核心期刊?
  11. Excel K4宏病毒专杀
  12. 查看服务器ip配置信息,怎么查看服务器ip地址,怎么查看ip地址和端口
  13. 单片机C语言59秒计时器,0到59秒单片机秒表课程设计报告.doc
  14. 通达oa2015 php解密,通达OA /interface/auth.php SQL注入
  15. 华为系统云服务器地址,华为系统云服务器地址
  16. 数学建模学习(1) 线性规划
  17. 计算机系歌,科学网—计算机之歌 - 刘钢的博文
  18. NOIP2016提高组初赛难点整理
  19. 猴年马月,猴年来了,马月呢?
  20. 安卓的绝对布局AbsoluteLayout

热门文章

  1. 休斯敦大学计算机学院网址,李大学(学院)
  2. Vue:路由传参的三种方式
  3. 进度条制作-CSS动画
  4. 字符串 Z 字形变换(Java)
  5. 字符串与时间的格式转换
  6. 对图像处理中的面向对象和基于基元的理解
  7. Opencv实现素描的坤坤打篮球
  8. ThinkPad X270 升级固态硬盘(M2 2242 NVMe)
  9. [IT 男人帮 11-11] 毕业一年写给自己的警戒书-褪墨
  10. 2020最新版前端学习路线图