边坡分析ARX CAD二次开发程序源代码.docx

上传人:b****5 文档编号:7764588 上传时间:2023-01-26 格式:DOCX 页数:28 大小:57.06KB
下载 相关 举报
边坡分析ARX CAD二次开发程序源代码.docx_第1页
第1页 / 共28页
边坡分析ARX CAD二次开发程序源代码.docx_第2页
第2页 / 共28页
边坡分析ARX CAD二次开发程序源代码.docx_第3页
第3页 / 共28页
边坡分析ARX CAD二次开发程序源代码.docx_第4页
第4页 / 共28页
边坡分析ARX CAD二次开发程序源代码.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

边坡分析ARX CAD二次开发程序源代码.docx

《边坡分析ARX CAD二次开发程序源代码.docx》由会员分享,可在线阅读,更多相关《边坡分析ARX CAD二次开发程序源代码.docx(28页珍藏版)》请在冰豆网上搜索。

边坡分析ARX CAD二次开发程序源代码.docx

边坡分析ARXCAD二次开发程序源代码

9.专题部分

土坡稳定分析程序

9.1程序理论依据

目前,我国的一些地区和行业规范都建议采用瑞典圆弧滑动面条分法验算土坡整体稳定性。

本程序以该方法作为理论基础。

9.1.1最危险滑动面圆心的确定

 

图9.1最危险滑动圆弧的确定

fig9.1riskslipface

最危险滑动面圆心位置的确定一般采取试算法。

如图9.1。

1内摩擦角

的高塑性粘土。

认为土坡的最危险圆弧滑动面通过坡脚。

首先根据坡脚

由表9.1查出坡底角

和坡顶角

再在图9.1中的坡底和坡顶分别画出破底角

和坡顶角

,两线交点为O,O即为最危险滑动圆弧的圆心。

表9.1坡脚与坡底角和坡顶角的关系tab9.1

坡脚

(度)

90

75

60

45

33..78

30

26.57

15

0.32

坡底角

(度)

33

32

29

28

26

26

25

24

25

坡顶角

(度)

40

40

40

38

35

36

35

37

37

2内摩擦角

的土:

a.按上述步骤求出O点;

b.由A点垂直向下量取一高度,该高度等于边坡高度H,得C点位置,由C点水平右量4.5倍H得D点,连接DO。

c.在DO延长线上找若干点

、……。

作为滑动圆心,画出坡脚,计算边坡稳定性安全系数K,找出K值较小的点

d.过

点画DO延长线的垂线,再在垂线上找出若干点作为滑动圆心,试算K值,直至找出K值最小的点,则此点即为最危险滑动弧圆心。

9.1.2最危险滑动面条分法计算方法

按条分法计算时,先找出滑动圆心O,画出滑动圆弧,然后将滑动圆弧分成若干条,每条的b本程序取0.01R,R为滑动半径。

任一分条的自重为

其可分解为切向力

和法向力

同时,在滑动面圆弧上还存在土的粘聚力C。

通过推导可得:

(以上叙述摘自《基坑工程》,中国地质大学出版社)

9.2程序说明

本程序名位helloarx.arx,(另附软盘),在VisualC++环境中用ObjectARX2000软件包开发而成。

本程序可计算的最大土层数为100层。

9.3操作说明

1)在AUTOCAD2000或AUTOCAD2002中,将格式菜单栏中的标注样式箭头大小设为0.5,文字高度设为0.5。

关闭捕捉、正交、对象捕捉、对象追踪功能。

2)在工具菜单栏中,选择加载应用程序,将本程序加载。

3)在CAD命令行打入hello命令,依据提示输入参数即可。

程序最终在命令行显示土坡安全系数,在CAD图形窗口中绘出土坡最危险滑动面,并标注出滑动面的几何参数(单位为米)。

9.4程序原代码

9.4.1头文件hello.h

#include

#include

#include"stdio.h"

#include"math.h"

#include"adslib.h"

#include"rxdefs.h"

#include"math.h"

voidArxTest(void);

9.4.2ARX框架程序arxmain..cpp

#include"hello.h"

voidinitApp()

{acedRegCmds->addCommand("ASDK_SAMPLE_COMMANDS","HELLO","HELLO",ACRX_CMD_MODAL,ArxTest);

return;

}

 

voidunloadApp()

{

acedRegCmds->removeGroup("ASDK_SAMPLE_COMMANDS");

return;

}

 

extern"C"

AcRx:

:

AppRetCodeacrxEntryPoint(AcRx:

:

AppMsgCodemsg,void*appId)

{

switch(msg)

{

caseAcRx:

:

kInitAppMsg:

acrxDynamicLinker->unlockApplication(appId);

acrxRegisterAppMDIAware(appId);

initApp();

break;

caseAcRx:

:

kUnloadAppMsg:

unloadApp();

break;

caseAcRx:

:

kLoadDwgMsg:

break;

}

returnAcRx:

:

kRetOK;

}

9.4.3土坡稳定分析主程序hello.cpp

#include"hello.h"

ads_realalf,H=0;//坡角及基坑高度

ads_realjd[9]={90,75,60,45,33.783,30,26.567,15,11.317},

b[9][2]={{33,40},{32,40},{29,40},{28,38},{26,35},{26,26},{25,35},{24,37},{25,37}};//各种坡角及其对应的坡底坡顶角

ads_realch[100];//各层厚度(由上至下)

ads_realc[100],fai[100],w[100],gam[100];//各层土对应的c,内摩擦角,含水量,容重

ads_pointR,pa,pb,pd;//土坡控制点

ads_pointpe[10],po[10];//试算控制点

ads_pointpj[100];//各层底与AB交点

ads_pointabz;//AB中点坐标

ads_pointpcj[100][100];//各层底与滑动面交点

intn[100];//各层土条数

ads_reald[100][2];//各层土条宽,d[][0]存放前n-1条宽,d[][1]存放后一条宽

ads_realth[10][100];//各层土滑动面试算宽度

ads_pointxtz[100][100],stz[100][100];//各层土条中点对应的下、上坐标

ads_pointxlt[100][100],xrt[100][100];//各层土条在滑动面上的左右边缘坐标

ads_realal[100][100];//每曾土条上的小圆弧长度

ads_realfpj[100][100];

ads_realq;//均布荷载集度

ads_realdq,lq;//均布荷载宽度及距坡沿距离

ads_pointpal,pbr,pjr[100];

ads_realtg[100][100];//各土条高

ads_realbid[2];

ads_realgh,ctz;//按层递增的土条高度,土条重度

ads_realk[10];//试算的K值

ads_realr[10];//试算半径

inti,j,p,m,a,cs;//循环控制变量

ads_realzk=0,mk=0;

ads_pointko,ke;

ads_realKR;

ads_realK;

ads_realpp;

ads_realzk1,zk2,zk3,zk4,zk11,zk22,zk33,zk44;

ads_realmk1,mk2,mk3,mk11,mk22,mk33;

ads_realfz1,fm1,fz2,fm2;

 

voidArxTest(void)

{ads_getreal("请输入坡角(度)",&alf);

ads_getreal("请输入均布荷载集度(千帕)",&q);

ads_getreal("请输入均布荷载宽度(米)",&dq);

ads_getreal("请输入均布荷载边缘距坡沿距离(米)",&lq);

ads_getint("请输入土层数",&cs);

acedGetPoint(NULL,"请输入坡脚点",pa);

for(i=0;i

{acutPrintf("\n对于第%d层土(由上而下)\n",i+1);

acedGetReal("请输入该层土厚(米)",&ch[i]);

acedGetReal("请输入该层土粘结力(千帕)",&c[i]);

acedGetReal("请输入该层土内摩擦角(度)",&fai[i]);

acedGetReal("请输入该层土容重(千牛每立方米)",&gam[i]);

}

H=0;

for(j=0;j

H=H+ch[j];

pb[X]=pa[X]+H/tan(alf*3.14159/180);

pb[Y]=pa[Y]+H;

pb[Z]=0;

//acutPrintf("//////////////b点%f,%f////////////",pb[X],pb[Y]);

//求各层底与AB交点

pj[0][X]=pb[X]-ch[0]/tan(alf*3.14159/180);

pj[0][Y]=pb[Y]-ch[0];

pj[0][Z]=0;

if(cs>1)

for(i=1;i

{

pj[i][X]=pj[i-1][X]-ch[i]/tan(alf*3.14159/180);

pj[i][Y]=pj[i-1][Y]-ch[i];

pj[i][Z]=0;

}

//绘图

pal[X]=pa[X]-5;

pal[Y]=pa[Y];

pal[Z]=0;

pbr[X]=pb[X]+100;

pbr[Y]=pb[Y];

pbr[Z]=0;

acedCommand(RTSTR,"PLINE",RT3DPOINT,pal,RT3DPOINT,pa,RT3DPOINT,pb,RT3DPOINT,pbr,RTSTR,"",RTNONE);

for(i=0;i

{pjr[i][X]=pj[i][X]+100;

pjr[i][Y]=pj[i][Y];

pjr[i][Z]=0;

acedCommand(RTSTR,"PLINE",RT3DPOINT,pj[i],RT3DPOINT,pjr[i],RTSTR,"",RTNONE);

}

//求O点坐标

pd[X]=pa[X]+4.5*H;

pd[Y]=pa[Y]-H;

pd[Z]=0;

for(i=0;i<9;i++)

if(alf>=jd[i])

{a=i;

break;

}

bid[0]=b[a][0]+(b[a-1][0]-b[a][0])*(alf-jd[a])/(jd[a-1]-jd[a]);

bid[1]=b[a][1]+(b[a-1][1]-b[a][1])*(alf-jd[a])/(jd[a-1]-jd[a]);

for(i=0;i<10;i++)

{po[i][X]=0;

po[i][Y]=0;

po[i][Z]=0;

}

fz1=0;

fz2=0;

fm1=0;

fm2=0;

fz1=tan((alf+bid[0])*3.14159/180)*pa[X]+tan(bid[1]*3.14159/180)*pb[X]-pa[Y]+pb[Y];

fm1=tan((alf+bid[0])*3.14159/180)+tan(bid[1]*3.14159/180);

fz2=tan(bid[1]*3.14159/180)*pa[Y]+tan((alf+bid[0])*3.14159/180)*pb[Y]-tan((alf+bid[0])*3.14159/180)*tan(bid[1]*3.14159/180)*(pa[X]-pb[X]);

fm2=tan((alf+bid[0])*3.14159/180)+tan(bid[1]*3.14159/180);

po[0][X]=fz1/fm1;

po[0][Y]=fz2/fm2;

po[0][Z]=0;

for(i=0;i<10;i++)

r[i]=0;

r[0]=ads_distance(po[0],pa);

for(i=1;i<10;i++)

{

po[i][X]=po[i-1][X]-0.008*H;

po[i][Y]=(po[0][Y]-pd[Y])/(po[0][X]-pd[X])*(po[i][X]-pd[X])+pd[Y];

po[i][Z]=0;

r[i]=ads_distance(po[i],pa);

acutPrintf("banjingi%f",r[i]);

}

for(i=0;i<10;i++)

{pe[i][Y]=pb[Y];

pe[i][X]=po[i][X]+sqrt(r[i]*r[i]-(pb[Y]-po[i][Y])*(pb[Y]-po[i][Y]));

pe[i][Z]=0;//求E点坐标

//acedCommand(RTSTR,"PLINE",RT3DPOINT,pa,RT3DPOINT,pe[i],RTSTR,"",RTNONE);

///////滑动面与各层底交点

for(j=0;j

{pcj[i][j][Y]=pj[j][Y];

pcj[i][j][X]=po[i][X]+sqrt(r[i]*r[i]-(pcj[i][j][Y]-po[i][Y])*(pcj[i][j][Y]-po[i][Y]));

pcj[i][j][Z]=0;

}

///初始化th[],n[],d[][]

for(j=0;j<100;j++)

{th[i][j]=0;

n[j]=0;

d[j][0]=0;

d[j][1]=0;

}

//求个层滑动面宽

th[i][0]=pe[i][X]-pcj[i][0][X];

if(cs>1)

for(j=1;j

th[i][j]=pcj[i][j-1][X]-pcj[i][j][X];

////////////////////为各层分条,以0.01R为一条///////////////

for(j=0;j

{if(th[i][j]<=0.01*r[i])

{n[j]=1;

d[j][0]=0;

d[j][1]=th[i][j];

}

else

{n[j]=th[i][j]/(0.01*r[i])+1;//求土条数

d[j][0]=0.01*r[i];

d[j][1]=(th[i][j]-(n[j]-1)*d[j][0]);

}

//初使化xtz[][]

for(j=0;j

for(p=0;p<100;p++)

{xtz[j][p][X]=0;

xtz[j][p][Y]=0;

xtz[j][p][Z]=0;

}

/////各土条底端中点与滑动面的交点

for(j=0;j

{if(th[i][j]<=0.01*r[i]){

xtz[j][0][X]=pcj[i][j][X]+d[j][1]/2;

xtz[j][0][Y]=po[i][Y]-sqrt(r[i]*r[i]-(xtz[j][0][X]-po[i][X])*(xtz[j][0][X]-po[i][X]));

xtz[j][0][Z]=0;}

else{

for(p=0;p

{xtz[j][p][X]=pcj[i][j][X]+p*d[j][0]+d[j][0]/2;

xtz[j][p][Y]=po[i][Y]-sqrt(r[i]*r[i]-(xtz[j][p][X]-po[i][X])*(xtz[j][p][X]-po[i][X]));

xtz[j][p][Z]=0;

}

xtz[j][p][X]=pcj[i][j][X]+p*d[j][0]+d[j][1]/2;

xtz[j][p][Y]=po[i][Y]-sqrt(r[i]*r[i]-(xtz[j][p][X]-po[i][X])*(xtz[j][p][X]-po[i][X]));

xtz[j][p][Z]=0;

}

}

//初始化stz[200][200]与tg[200][200]

for(j=0;j<100;j++)

for(p=0;p<100;p++)

{stz[j][p][X]=0;

stz[j][p][Y]=0;

stz[j][p][Z]=0;

tg[j][p]=0;

}

//////////求土条高度

for(j=0;j

{for(p=0;p

{stz[j][p][X]=xtz[j][p][X];

if(stz[j][p][X]<=pb[X])

stz[j][p][Y]=(pb[Y]-pa[Y])/(pb[X]-pa[X])*(stz[j][p][X]-pa[X])+pa[Y];

else

stz[j][p][Y]=pb[Y];

stz[j][p][Z]=0;

tg[j][p]=stz[j][p][Y]-xtz[j][p][Y];

}

}

///////////初始化zk,mk,ctz,gh,xlt[][],xrt[][],al[][]

for(j=0;j<100;j++)

for(p=0;p<100;p++)

{xlt[j][p][X]=0;

xlt[j][p][Y]=0;

xlt[j][p][Z]=0;

xrt[j][p][X]=0;

xrt[j][p][Y]=0;

xrt[j][p][Z]=0;

al[j][p]=0;

}

zk=0;

mk=0;

gh=0;

ctz=0;

zk1=0;

zk2=0;

zk3=0;

zk4=0;

mk1=0;

mk2=0;

mk3=0;

zk11=0;

zk22=0;

zk33=0;

zk44=0;

mk11=0;

mk22=0;

mk33=0;

//////11111///#####////////求安全系数///////////#######/////////////////////////////////

for(j=0;j

{//acutPrintf("d[j][0]%fd[j][1]%f",d[j][0],d[j][1]);

if(n[j]==1){

xlt[j][0][X]=xtz[j][0][X]-d[j][1]/2;

xlt[j][0][Y]=po[i][Y]-sqrt(r[i]*r[i]-(xlt[j][0][X]-po[i][X])*(xlt[j][0][X]-po[i][X]));

xlt[j][0][Z]=0;

xrt[j][0][X]=xtz[j][0][X]+d[j][1]/2;

xrt[j][0][Y]=po[i][Y]-sqrt(r[i]*r[i]-(xrt[j][0][X]-po[i][X])*(xrt[j][0][X]-po[i][X]));

xrt[j][0][Y]=0;}

else

{for(p=0;p

xlt[j][p][X]=xtz[j][p][X]-d[j][0]/2;

xlt[j][p][Y]=po[i][Y]-sqrt(r[i]*r[i]-(xlt[j][p][X]-po[i][X])*(xlt[j][p][X]-po[i][X]));

xlt[j][p][Z]=0;

xrt[j][p][X]=xtz[j][p][X]+d[j][0]/2;

xrt[j][p][Y]=po[i][Y]-sqrt(r[i]*r[i]-(xrt[j][p][X]-po[i][X])*(xrt[j][p][X]-po[i][X]));

xrt[j][p][Z]=0;

}

xlt[j][p][X]=xtz[j][p][X]-d[j][1]/2;

xlt[j][p][Y]=po[i][Y]-sqrt(r[i]*r[i]-(xlt[j][p][X]-po[i][X])*(xlt[j][p][X]-po[i][X]));

xlt[j][p][Z]=0;

xrt[j][p][X]=xtz[j][p][X]+d[j][1]/2;

xrt[j][p][Y]=po[i][Y]-sqrt(r[i]*r[i]-(xrt[j][p][X]-po[i][X])*(xrt[j][p][X]-po[i][X]));

xrt[j][p][Z]=0;

//

}//圆弧端点

for(p=0;p

{al[j][p]=fabs((ads_angle(xrt[j][p],po[i])-ads_angle(xlt[j][p],po[i])))*r[i];//计算弧长

}

if(n[j]>1)

{for(p=0;p

{zk1=c[j]*al[j][p];

zk2=q*d[j][0];

zk3=gam[j]*d[j][0]*(tg[j][p]-gh)+d[j][0]*ctz;

zk4=(po[i][Y]-xtz[j][p][Y])/r[i]*tan(fai[j]*3.14159/180);

mk1=q*d[j][0];

mk2=gam[j]*d[j][0]*(tg[j][p]-gh)+d[j][0]*ctz;

mk3=(xtz[j][p][X]-po[i][X])/r[i];

acutPrintf("mk3=%f",mk3);

if(xlt[j][p][X]>=(pb[X]+lq)&&xrt[j][p][X]<=(pb[X]+lq+dq))

{

zk=zk+zk1+(zk2+zk3)*zk4;

mk=mk+(mk1+mk2)*mk3;

}

else{

zk=zk+zk1+zk3*zk4;

mk=mk+mk2*mk3;

}

acutPrintf("zk=%f,mk=%f",zk,mk);

}

zk11=c[j]*al[j][p];

zk22=q*d[j][1];

zk33=gam[j]*d[j][1]*(tg[j][p]-gh)+d[j][1]*ctz;

zk44=(po[i][Y]-xtz[j][p][Y])/r[i]*tan(fai[j]*3.14159/180);

mk11=q*d[j][1];

mk22=gam[j]*d[j][1]*(tg[j][p]-gh)+d[j][1]*ctz;

m

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1