中南大学土木工程软件课程设计_第1页
中南大学土木工程软件课程设计_第2页
中南大学土木工程软件课程设计_第3页
中南大学土木工程软件课程设计_第4页
中南大学土木工程软件课程设计_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上基于C+编写线路CAD程序1.1 曲线要素计算程序1.1.1 主要内容和计算函数(1) 计算内容:在txt文件中读取交点信息,编程计算线路曲线要素、特征点里程及坐标、逐桩里程和坐标,并读出到txt文件。(2) 计算函数:struct JDDATA /定义交点数据结构体struct randompoint /定义任意点坐标数据结构double JSFWJ(double x1,double x2,double y1,double y2); /计算方位角的函数double JSp(double lo,double R); /计算内移距p的函数double JSm(doubl

2、e lo); /计算切垂距m的函数char JSZYP(double fwj1,double fwj2); /判断左右偏函数 (其中左偏记为”L”,右偏记为”R”)double JSalpha(double fwj1,double fwj2); /计算的函数double JST(double R,double p,double m,double alpha); /计算切线长的函数double JSL(double R,double lo,double alpha); /计算曲线长的函数double JSE(double R,double p,double alpha); /计算外矢距的函数do

3、uble JSKZH(double K,double x1,double y1,double x2,double y2,double T1,double T2); /计算直缓点里程的函数double JSKHY(double KZH,double lo); /计算缓圆点里程的函数double JSKYH(double KZH,double L,double lo); /计算圆缓点里程的函数double JSKHZ(double KZH,double L); /计算缓直点里程的函数double JSKQZ(double KZH,double L); /计算曲中点里程的函数double JSZHx

4、(double x,double fwj,double T); /计算直缓点x坐标的函数double JSZHy(double y,double fwj,double T); /计算直缓点y坐标的函数double JSHZx(double x,double fwj,double T); /计算缓直点x坐标的函数double JSHZy(double y,double fwj,double T); /计算缓直点y坐标的函数double JSHYx(double lo,double R,double fwj,char zyp,double x);/计算缓圆点x坐标的函数double JSHYy(d

5、ouble lo,double R,double fwj,char zyp,double y);/计算缓圆点y坐标的函数double JSYHx(double lo,double R,double fwj,char zyp,double x);/计算圆缓点x坐标的函数double JSYHy(double lo,double R,double fwj,char zyp,double y);/计算圆缓点y坐标的函数void JSQZZB(double x,double y,double fwj,double L,double R,double lo,double m,double p,char

6、zyp,double *qzx,double *qzy); /计算曲中点坐标的函数void JSZZZB(double LC,int i,double *zbx,double *zby); /里程转坐标的函数1.1.2 编程流程图1.1.3 定义交点数据结构体本文将交点的数据存储于结构体中,结构体的定义如下:struct JDDATAdouble x;double x; /交点的x坐标double y;/交点的y坐标double R;/交点的半径double lo;/交点的缓长double fwj;/交点到下一个交点连线的方位角double p;/交点的内移距double m;/交点的切垂距c

7、har zyp;/交点的左右偏(左偏记为L,右偏记为R)double alpha;/交点的double T;/交点的切线长double L;/交点的曲线长double E;/交点的外矢距double KZH;/交点的直缓点里程double KHY;/交点的缓圆点里程double KYH;/交点的圆缓点里程double KHZ;/交点的缓直点里程double KQZ;/交点的曲中点里程double ZHx;/直缓点的x坐标double ZHy;/直缓点的y坐标double HZx;/缓直点的x坐标double HZy;/缓直点的y坐标double HYx;/缓圆点的x坐标double HYy;/

8、缓圆点的y坐标double YHx;/圆缓点的x坐标double YHy;/圆缓点的y坐标double QZx;/曲中点的x坐标double QZy;/曲中点的y坐标jd20;设计线路中有数个交点,故把每个交点的数据存储于结构体数组中,每个个体又包含如上列举的共性属性。本程序是用的是一个静态数组jd20,考虑到交点数据不是很多,故把容量暂定为20个,但是较有局限性,需要根据实际情况反复地改写程序。期望的改进方法是使用动态数组<vector>或者是Carray,使得程序能够随着实际情况动态的提供数组容量,以节省需要的内存空间,但是现下能力有限,在尝试的过程中程序报错,不知如何修改,所

9、以最终还是选用了静态数组。1.1.4 交点数据的读入以本选题所设计的昌吉赣客专横岗江家段线路为例,将交点数据存储在”JD.data.txt”中,如图:第一行的数据代表的是起始点的里程,以下每行的数据分别代表的是各个交点的纬度坐标、经度坐标、圆曲线长度、缓和曲线长度。利用文件流将数据读入。ifstream input;input.open("JDdata.txt");if (input.fail() /判断文件读取是否正常 cout<<"File does not exist"<<endl;cout<<"Exi

10、t program"<<endl;input>>jd0.KZH;int i=0;while (!input.eof()input>>jdi.x>>jdi.y>>jdi.R>>jdi.lo; /将交点数据存放于结构体中 i+;cout<<"共检测到"<<i<<"个交点"<<endl;input.close();这一部分程序运行完之后,会出现一个对话框,读取到的交点个数会显示到对话框上,而相应的交点数据已经存入到结构体当中去了。1

11、.1.5 曲线要素计算原理及程序的实现(1) 方位角计算方位角需要用到两个交点的坐标数据。对于不同象限的方位角,所对应的计算方法也会有所不同。如下程序首先判断方位角在哪一个象限,再根据判断的结果进行方位角的计算。现已在第一象限为例,对计算原理进行阐释:fwj (4-1)计算方位角函数的定义:double JSFWJ(double x1,double y1,double x2,double y2) double fwj;double dx;double dy;dx=x2-x1;dy=y2-y1;if (dx=0&&dy>0)fwj=0;else if (dx>0&am

12、p;&dy>0)fwj=atan(dx/dy)*180/PI;else if (dx>0&&dy=0)fwj=90;else if (dx>0&&dy<0)fwj=atan(dx/dy)*180/PI+180;else if (dx=0&&dy<0)fwj=180;else if (dx<0&&dy<0)fwj=atan(dx/dy)*180/PI+180;else if (dx<0&&dy=0)fwj=270;else if (dx<0&&am

13、p;dy>0)fwj=atan(dx/dy)*180/PI+360;return fwj;计算方位角函数的调用:for (int n=0;n<i-1;n+)jdn.fwj=JSFWJ(jdn.x,jdn.y,jdn+1.x,jdn+1.y);利用循环语句将交点的方位角都计算了出来。此外,本文中默认的一个交点的方位角是该交点到下一个交点连线的方位角。(2) 转向角转向角是相邻两个方位角之差,并取绝对值。计算转向角函数的定义:double JSalpha(double fwj1,double fwj2)double alpha;if (fabs(fwj2-fwj1)<180) a

14、lpha=fabs(fwj2-fwj1);else alpha=360-fabs(fwj2-fwj1);return alpha;计算转向角函数的调用:jdcount.alpha=JSalpha(jdcount-1.fwj,jdcount.fwj);其中count是循环语句的计数器,以下内容的计算都用到的循环的思想,在下文就不再赘述。(3) 判断左右偏一般来说,但是若前方位角角度较小,接近0度,后方位角较大,接近360度,虽然后方位角大于前方位角,但实际偏转应当是左偏。所以本文中对这一情况进行了判断,由于本文是实际线路为例,考虑到实际线路转角偏转不会太大,故以180度为判断界限,若差值小于18

15、0,则按正常计算方法进行计算;若差值大于180,则应认为是出现了上述的特殊情况,则不能按一般情况进行计算判断左右偏函数的定义:char JSZYP(double fwj1,double fwj2)char turn;if (abs(fwj2-fwj1)<=180) if (fwj2>fwj1)turn='R'else turn='L'else if(fwj2>fwj1)turn='L'else turn='R'return turn;判断左右偏函数的调用:jdcount.zyp=JSZYP(jdcount-1.f

16、wj,jdcount.fwj);(4) 曲线要素根据实际情况,选定线路的交点,在符合规范的条件下,选定合适的半径和缓和曲线长度,根据以下公式进行计算:(4-2)(4-3)(4-4)(4-5)(4-6)(4-7)式中:p为内移距,m为切垂距,为缓和曲线角,T为切线长,L为曲线长,E为内移距。特征点里程的计算:ZH点里程为上一点HZ点里程加两个交点的距离减去两个交点的切线长。(其中交点0的HZ点里程按起始点里程算,切线长认为是0)HY点里程=ZH(里程)+;YH点里程= ZH(里程)+-;HZ点里程= ZH(里程)+;QZ点里程= ZH(里程)+÷2;曲线要素计算的部分,程序内容比较简单

17、,就是定义一个函数,然后在主函数中调用它,得到需要的结果。详细程序请参见附录。1.1.6 逐桩坐标的计算这里的逐桩坐标的计算,其实就是给出任意点的里程,要能计算出这个点的坐标。由于整条线路比较长,故选10米为一个点,也就是计算10米桩的坐标。大致的思路是这样的:一、得到一个点的里程,判断它落在哪一部分的曲线上(直线、圆曲线还是缓和曲线),不同的曲线部分计算的方法有所不同;二、计算得到局部坐标。三、利用坐标转换原理得到整体坐标。在直线段部分,坐标的计算比较简单,利用方位角和里程差就能轻松求得。在缓和曲线段和圆曲线段,需要用到切线支距法,以夹直线所在直线为x轴,垂直夹直线所在直线的直线为y轴计算公

18、式:(1) 缓和曲线部分(4-8)(4-9)(2) 圆曲线部分(4-10)(4-11)(4-12)相应的,后缓和曲线则以HZ点为坐标原点用切线支距法进行计算。(3) 局部坐标转换为整体坐标转换公式如下:(4-13)需要注意的是,由于左偏还是右偏对局部坐标的计算是有影响的,所以在计算前应根据不同的左右偏情况分情况进行讨论计算,再根据具体的情况判断局部坐标系下x,y的正负,保证计算的正确。(4) 逐桩坐标数据结构struct randompointdouble x;double y;double LC;point4000;这里用到的也是结构体的思想,把任意点的x坐标,y坐标和里程都放到结构体里面去

19、。逐桩坐标计算程序定义如下:void JSZZZB(double LC,int i,double *zbx,double *zby)for (int count2=1;count2<i;count2+)if (LC>=jdcount2-1.KHZ&&LC<=jdcount2.KZH) /直线段double l=LC-jdcount2-1.KHZ;*zbx=jdcount2-1.HZx+l*sin(jdcount2-1.fwj*PI/180);*zby=jdcount2-1.HZy+l*cos(jdcount2-1.fwj*PI/180);break;else

20、if (LC>=jdcount2.KZH&&LC<=jdcount2.KHY) /前缓段double l=LC-jdcount2.KZH;double hyx=l-pow(l,5)/40/pow(jdcount2.R,2)/pow(jdcount2.lo,2);double hyy;if (jdcount2.zyp='L')hyy=pow(l,3)/6/jdcount2.R/jdcount2.lo;elsehyy=-pow(l,3)/6/jdcount2.R/jdcount2.lo;*zbx=jdcount2.ZHx+hyx*sin(jdcount2

21、-1.fwj*PI/180)-hyy*cos(jdcount2-1.fwj*PI/180);*zby=jdcount2.ZHy+hyx*cos(jdcount2-1.fwj*PI/180)+hyy*sin(jdcount2-1.fwj*PI/180);break;else if (LC>=jdcount2.KHY&&LC<jdcount2.KYH)/圆曲线段double l=LC-jdcount2.KZH;double Qalfa=(l-jdcount2.lo)*180/PI/jdcount2.R+jdcount2.lo*180/2/PI/jdcount2.R; d

22、ouble qx=jdcount2.R*sin(Qalfa*PI/180)+jdcount2.m;double qy;if (jdcount2.zyp='L')qy=jdcount2.R*(1-cos(Qalfa*PI/180)+jdcount2.p;else qy=-(jdcount2.R*(1-cos(Qalfa*PI/180)+jdcount2.p); *zbx=jdcount2.ZHx+qx*sin(jdcount2-1.fwj*PI/180)-qy*cos(jdcount2-1.fwj*PI/180);*zby=jdcount2.ZHy+qx*cos(jdcount2

23、-1.fwj*PI/180)+qy*sin(jdcount2-1.fwj*PI/180);break;else if (LC>=jdcount2.KYH&&LC<jdcount2.KHZ)/后缓段double l=jdcount2.KHZ-LC;double yhx=-(l-pow(l,5)/40/pow(jdcount2.R,2)/pow(jdcount2.lo,2);double yhy;if (jdcount2.zyp='L')yhy=pow(l,3)/6/jdcount2.R/jdcount2.lo;elseyhy=-pow(l,3)/6/j

24、dcount2.R/jdcount2.lo;*zbx=jdcount2.HZx+yhx*sin(jdcount2.fwj*PI/180)-yhy*cos(jdcount2.fwj*PI/180);*zby=jdcount2.HZy+yhx*cos(jdcount2.fwj*PI/180)+yhy*sin(jdcount2.fwj*PI/180); break;函数的调用如下:int num=jdi-1.KZH/10;(计算每10米一个点的总点位数)for (int j=0;j<num;j+)pointj.LC=jd0.KZH+10*j;JSZZZB(pointj.LC,i,&po

25、intj.x,&pointj.y);这样就把每10米一个点的坐标给求出来了。1.1.7 特征点坐标特征点坐标的计算同逐桩坐标点坐标的计算相同,只是将任意的里程替代为特征点的里程,用到的方法都是一样的,这里也就不一一赘述了。计算数据的输出这里依旧是用文件流的方法,将计算得到的数据读出到"result.txt"。output.open("result.txt");for (int count1=1;count1<i-1;count1+)int k1,k3,k5,k7;double k2,k4,k6,k8;k1=jdcount1.KZH/1000

26、;k2=jdcount1.KZH-k1*1000;k3=jdcount1.KHY/1000;k4=jdcount1.KHY-k3*1000;k5=jdcount1.KYH/1000;k6=jdcount1.KYH-k5*1000;k7=jdcount1.KHZ/1000;k8=jdcount1.KHZ-k7*1000;output<<"alpha="<<jdcount1.alpha<<" "<<"T="<<jdcount1.T<<" "<

27、<"L="<<jdcount1.L<<endl;output<<"直缓点里程="<<"K"<<k1<<"+"<<k2<<endl;output<<"缓圆点里程="<<"K"<<k3<<"+"<<k4<<endl;output<<"圆缓点里程="<&

28、lt;"K"<<k5<<"+"<<k6<<endl;output<<"缓直点里程="<<"K"<<k7<<"+"<<k8<<endl; /输出特征点的里程output<<"直缓点x坐标="<<jdcount1.ZHx<<" "<<"直缓点y坐标="<<&quo

29、t; "<<jdcount1.ZHy<<" "<<"缓圆点x坐标="<<jdcount1.HYx<<" "<<"缓圆点y坐标="<<jdcount1.HYy<<endl;output<<"圆缓点x坐标="<<jdcount1.YHx<<" "<<"圆缓点y坐标="<<" "

30、<<jdcount1.YHy<<" "<<"缓直点x坐标="<<jdcount1.HZx<<" "<<"缓直点y坐标="<<jdcount1.HZy<<endl;output<<endl; /输出特征点坐标jdi-1.KZH=jdi-2.KHZ+sqrt(jdi-1.x-jdi-2.x)*(jdi-1.x-jdi-2.x)+(jdi-1.y-jdi-2.y)*(jdi-1.y-jdi-2.y);int k1;

31、int k2;output<<"任意点里程"<<setw(10)<<"x坐标"<<setw(20)<<"y坐标"<<endl;int num=jdi-1.KZH/10;for (int j=0;j<num;j+)pointj.LC=jd0.KZH+10*j;JSZZZB(pointj.LC,i,&pointj.x,&pointj.y);k1=pointj.LC/1000;k2=pointj.LC-k1*1000;output<<&

32、quot;K"<<k1<<"+"<<k2<<setw(20)<<pointj.x<<setw(15)<<pointj.y<<endl; /输出逐桩里程及坐标output.close();如下图所示,就是程序运行后输出文件”result.txt”的结果显示曲线要素计算程序代码#include <iostream>#include <fstream>#include <stdlib.h> #include <cmath> #i

33、nclude <iomanip>using namespace std;const double PI=3.14159;double JSFWJ(double x1,double x2,double y1,double y2);/声明计算方位角的函数double JSp(double lo,double R);/声明计算内移距p的函数double JSm(double lo);/声明计算切垂距m的函数char JSZYP(double fwj1,double fwj2);/声明判断左右偏函数double JSalpha(double fwj1,double fwj2);/声明计算的

34、函数double JST(double R,double p,double m,double alpha);/声明计算切线长的函数double JSL(double R,double lo,double alpha);/声明计算曲线长的函数double JSE(double R,double p,double alpha);/声明计算外矢距的函数double JSKZH(double K,double x1,double y1,double x2,double y2,double T1,double T2);/声明计算直缓点里程的函数double JSKHY(double KZH,double

35、 lo);/声明计算缓圆点里程的函数double JSKYH(double KZH,double L,double lo);/声明计算圆缓点里程的函数double JSKHZ(double KZH,double L);/声明计算缓直点里程的函数double JSKQZ(double KZH,double L);/声明计算曲中点里程的函数double JSZHx(double x,double fwj,double T);/声明计算直缓点x坐标的函数double JSZHy(double y,double fwj,double T);/声明计算直缓点y坐标的函数double JSHZx(doub

36、le x,double fwj,double T);/声明计算缓直点x坐标的函数double JSHZy(double y,double fwj,double T);/声明计算缓直点y坐标的函数double JSHYx(double lo,double R,double fwj,char zyp,double x);/声明计算缓圆点x坐标的函数double JSHYy(double lo,double R,double fwj,char zyp,double y);/声明计算缓圆点y坐标的函数double JSYHx(double lo,double R,double fwj,char zyp

37、,double x);/声明计算圆缓点x坐标的函数double JSYHy(double lo,double R,double fwj,char zyp,double y);/声明计算圆缓点y坐标的函数void JSQZZB(double x,double y,double fwj,double L,double R,double lo,double m,double p,char zyp,double *qzx,double *qzy);/声明计算曲中点坐标的函数void JSZZZB(double LC,int i,double *zbx,double *zby);/声明里程转坐标的函数s

38、truct JDDATA /定义结构体JDDATAdouble x; /交点的x坐标double y;/交点的y坐标double R;/交点的半径double lo;/交点的缓长double fwj;/交点到下一个交点连线的方位角double p;/交点的内移距double m;/交点的切垂距char zyp;/交点的左右偏(左偏记为L,右偏记为R)double alpha;/交点的double T;/交点的切线长double L;/交点的曲线长double E;/交点的外矢距double KZH;/交点的直缓点里程double KHY;/交点的缓圆点里程double KYH;/交点的圆缓点里

39、程double KHZ;/交点的缓直点里程double KQZ;/交点的曲中点里程double ZHx;/直缓点的x坐标double ZHy;/直缓点的y坐标double HZx;/缓直点的x坐标double HZy;/缓直点的y坐标double HYx;/缓圆点的x坐标double HYy;/缓圆点的y坐标double YHx;/圆缓点的x坐标double YHy;/圆缓点的y坐标double QZx;/曲中点的x坐标double QZy;/曲中点的y坐标jd20;struct randompointdouble x;double y;double LC;point4000;int main

40、()ifstream input;input.open("04291.txt");if (input.fail()cout<<"File does not exist"<<endl;cout<<"Exit program"<<endl;input>>jd0.KZH;int i=0;while (!input.eof()input>>jdi.x>>jdi.y>>jdi.R>>jdi.lo;i+;cout<<"

41、共检测到"<<i<<"个交点"<<endl;input.close();ofstream output;for (int n=0;n<i-1;n+)jdn.fwj=JSFWJ(jdn.x,jdn.y,jdn+1.x,jdn+1.y);jd0.p=0;jd0.m=0;jd0.alpha=0;jd0.T=0;jd0.L=0;jd0.E=0;jd0.KHY=jd0.KZH;jd0.KYH=jd0.KZH;jd0.KHZ=jd0.KZH;jd0.ZHx=jd0.x;jd0.ZHy=jd0.y;jd0.HZx=jd0.x;jd0.H

42、Zy=jd0.y;jd0.HYx=jd0.x;jd0.HYy=jd0.y;jd0.YHx=jd0.x;jd0.YHy=jd0.y;for (int count=1;count<i-1;count+)jdcount.p=JSp(jdcount.lo,jdcount.R);jdcount.m=JSm(jdcount.lo);jdcount.zyp=JSZYP(jdcount-1.fwj,jdcount.fwj);jdcount.alpha=JSalpha(jdcount-1.fwj,jdcount.fwj);jdcount.T=JST(jdcount.R,jdcount.p,jdcount.

43、m,jdcount.alpha);jdcount.L=JSL(jdcount.R,jdcount.lo,jdcount.alpha);jdcount.E=JSE(jdcount.R,jdcount.p,jdcount.alpha);jdcount.KZH=JSKZH(jdcount-1.KHZ,jdcount-1.x,jdcount-1.y,jdcount.x,jdcount.y,jdcount-1.T,jdcount.T);jdcount.KHY=JSKHY(jdcount.KZH,jdcount.lo);jdcount.KYH=JSKYH(jdcount.KZH,jdcount.L,jdc

44、ount.lo);jdcount.KHZ=JSKHZ(jdcount.KZH,jdcount.L);jdcount.KQZ=JSKQZ(jdcount.KZH,jdcount.L);jdcount.ZHx=JSZHx(jdcount.x,jdcount-1.fwj,jdcount.T);jdcount.ZHy=JSZHy(jdcount.y,jdcount-1.fwj,jdcount.T);jdcount.HZx=JSHZx(jdcount.x,jdcount.fwj,jdcount.T);jdcount.HZy=JSHZy(jdcount.y,jdcount.fwj,jdcount.T);j

45、dcount.HYx=JSHYx(jdcount.lo,jdcount.R,jdcount-1.fwj,jdcount.zyp,jdcount.ZHx);jdcount.HYy=JSHYy(jdcount.lo,jdcount.R,jdcount-1.fwj,jdcount.zyp,jdcount.ZHy);jdcount.YHx=JSYHx(jdcount.lo,jdcount.R,jdcount.fwj,jdcount.zyp,jdcount.HZx);jdcount.YHy=JSYHy(jdcount.lo,jdcount.R,jdcount.fwj,jdcount.zyp,jdcoun

46、t.HZy);JSQZZB(jdcount.ZHx,jdcount.ZHy,jdcount-1.fwj,jdcount.L,jdcount.R,jdcount.lo,jdcount.m,jdcount.p,jdcount.zyp,&jdcount.QZx,&jdcount.QZy);cout<<jdcount.QZx<<" "<<jdcount.QZy<<endl;output.open("result.txt");for (int count1=1;count1<i-1;count1

47、+)int k1,k3,k5,k7;double k2,k4,k6,k8;k1=jdcount1.KZH/1000;k2=jdcount1.KZH-k1*1000;k3=jdcount1.KHY/1000;k4=jdcount1.KHY-k3*1000;k5=jdcount1.KYH/1000;k6=jdcount1.KYH-k5*1000;k7=jdcount1.KHZ/1000;k8=jdcount1.KHZ-k7*1000;output<<"alpha="<<jdcount1.alpha<<" "<<

48、"T="<<jdcount1.T<<""<<"L="<<jdcount1.L<<endl;output<<"直缓点里程="<<"K"<<k1<<"+"<<k2<<endl;output<<"缓圆点里程="<<"K"<<k3<<"+"<

49、<k4<<endl;output<<"圆缓点里程="<<"K"<<k5<<"+"<<k6<<endl;output<<"缓直点里程="<<"K"<<k7<<"+"<<k8<<endl;output<<"直缓点x坐标="<<jdcount1.ZHx<<"

50、 "<<"直缓点y坐标="<<" "<<jdcount1.ZHy<<" "<<"缓圆点x坐标="<<jdcount1.HYx<<" "<<"缓圆点y坐标="<<jdcount1.HYy<<endl;output<<"圆缓点x坐标="<<jdcount1.YHx<<" "&l

51、t;<"圆缓点y坐标="<<" "<<jdcount1.YHy<<" "<<"缓直点x坐标="<<jdcount1.HZx<<" "<<"缓直点y坐标="<<jdcount1.HZy<<endl;output<<endl;jdi-1.KZH=jdi-2.KHZ+sqrt(jdi-1.x-jdi-2.x)*(jdi-1.x-jdi-2.x)+(jdi-1

52、.y-jdi-2.y)*(jdi-1.y-jdi-2.y);int num=jdi-1.KZH/10;int k1;int k2;output<<"任意点里程"<<setw(10)<<"x坐标"<<setw(20)<<"y坐标"<<endl;for (int j=0;j<num;j+)pointj.LC=jd0.KZH+10*j;JSZZZB(pointj.LC,i,&pointj.x,&pointj.y);k1=pointj.LC/1000

53、;k2=pointj.LC-k1*1000;output<<"K"<<k1<<"+"<<k2<<setw(20)<<pointj.x<<setw(15)<<pointj.y<<endl;output.close();return 0;double JSFWJ(double x1,double y1,double x2,double y2)/计算方位角函数的定义double fwj;double dx;double dy;dx=x2-x1;dy=y2

54、-y1;if (dx=0&&dy>0)fwj=0;else if (dx>0&&dy>0)fwj=atan(dx/dy)*180/PI;else if (dx>0&&dy=0)fwj=90;else if (dx>0&&dy<0)fwj=atan(dx/dy)*180/PI+180;else if (dx=0&&dy<0)fwj=180;else if (dx<0&&dy<0)fwj=atan(dx/dy)*180/PI+180;else if

55、(dx<0&&dy=0)fwj=270;else if (dx<0&&dy>0)fwj=atan(dx/dy)*180/PI+360;return fwj;double JSp(double lo,double R) / 计算内移距p的函数的定义double p;p=lo*lo/(24*R);return p;double JSm(double lo)double m;m=lo/2;return m;char JSZYP(double fwj1,double fwj2)char turn;if (abs(fwj2-fwj1)<=180)

56、if (fwj2>fwj1)turn='R'else turn='L'else if(fwj2>fwj1)turn='L'else turn='R'return turn;double JSalpha(double fwj1,double fwj2)double alpha;if (fabs(fwj2-fwj1)<180) alpha=fabs(fwj2-fwj1);else alpha=360-fabs(fwj2-fwj1);return alpha;double JST(double R,double p,d

57、ouble m,double alpha)double T;T=(R+p)*tan(alpha*PI/(180*2)+m;return T;double JSL(double R,double lo,double alpha)double L;L=PI*alpha*R/180+lo;return L;double JSE(double R,double p,double alpha)double E;E=(R+p)/cos(alpha*PI/(180*2)-R;return E;double JSKZH(double K,double x1,double y1,double x2,double

58、 y2,double T1,double T2)double KZH;KZH=K+sqrt(x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)-T1-T2;return KZH;double JSKHY(double KZH,double lo)double KHY;KHY=KZH+lo;return KHY;double JSKYH(double KZH,double L,double lo)double KYH;KYH=KZH+L-lo;return KYH;double JSKHZ(double KZH,double L)double KHZ;KHZ=KZH+L;return KHZ;double JSKQZ(double KZH,double L)double KQZ;K

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论