📄 sdt10.cpp
字号:
// sdt10.cpp : implementation file
//
// Sdt13 - 支护桩配筋计算
//
// GB2002规范 AutoCAD版
#include "stdafx.h"
#include "Sdt.h"
#include "sdt10.h"
#include "math.h"
#include "adslib.h"
#define Pi 3.1415926
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
int dnewt(double *x,double eps,int js);
void dnewtf(double x,double y[2]);
/////////////////////////////////////////////////////////////////////////////
// Csdt10 dialog
Csdt10::Csdt10(CWnd* pParent /*=NULL*/)
: CDialog(Csdt10::IDD, pParent)
{
//{{AFX_DATA_INIT(Csdt10)
m_lg = 0.0;
m_max = 0.0;
m_c = 25.0;
m_h = 5.0;
m_pa = 30.0;
m_q = 20.0;
m_t = 0.0;
m_g = 20.0;
m_lm = 0.0;
m_asp = 460.0;
m_asr = 0.0;
m_cta = 90.0;
m_ctp = 0.0;
m_hc = 20;
m_d = 600.0;
m_m = 0.0;
m_s = 1.20;
m_jss = FALSE;
m_gcm = _T("Zzz");
m_zhang = _T("Zh-1");
//}}AFX_DATA_INIT
}
void Csdt10::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(Csdt10)
DDX_Text(pDX, IDC_EDITlg, m_lg);
DDX_Text(pDX, IDC_EDITmax, m_max);
DDX_Text(pDX, IDC_EDITzc, m_c);
DDX_Text(pDX, IDC_EDITzh, m_h);
DDX_Text(pDX, IDC_EDITzpa, m_pa);
DDX_Text(pDX, IDC_EDITzq, m_q);
DDX_Text(pDX, IDC_EDITzt, m_t);
DDX_Text(pDX, IDC_EDITzg, m_g);
DDX_Text(pDX, IDC_EDITmlm, m_lm);
DDX_Text(pDX, IDC_EDITasp, m_asp);
DDX_Text(pDX, IDC_EDITasr, m_asr);
DDX_Text(pDX, IDC_EDITcta, m_cta);
DDX_Text(pDX, IDC_EDITctp, m_ctp);
DDX_Text(pDX, IDC_EDIThc, m_hc);
DDV_MinMaxInt(pDX, m_hc, 20, 40);
DDX_Text(pDX, IDC_EDITzd, m_d);
DDX_Text(pDX, IDC_EDITzm, m_m);
DDX_Text(pDX, IDC_EDITzs, m_s);
DDX_Check(pDX, IDC_CHECKjss10, m_jss);
DDX_Text(pDX, IDC_EDITgcm10, m_gcm);
DDX_Text(pDX, IDC_EDITzhuang, m_zhang);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(Csdt10, CDialog)
//{{AFX_MSG_MAP(Csdt10)
ON_BN_CLICKED(IDC_BUTTONjs, OnBUTTONjs)
ON_BN_CLICKED(IDC_BUTTONjsa, OnBUTTONjsa)
ON_EN_KILLFOCUS(IDC_EDITzs, OnKillfocusEDITzs)
ON_BN_CLICKED(IDC_BTSdtHelp10, OnBTSdtHelp10)
ON_BN_CLICKED(IDC_BUTTONjsdk, OnBUTTONjsdk)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// Csdt10 message handlers
CString flname10;
double a3,a2,a1,a0;
void Csdt10::OnBUTTONjs()
{
double pa,ka,kp,gk,eq,ea,fa,ha,l,xm;
CString val10;
UpdateData(TRUE);
pa=m_pa*Pi/180.0;
ka=tan(Pi/4.0-pa/2.0)*tan(Pi/4.0-pa/2.0);
kp=tan(Pi/4.0+pa/2.0)*tan(Pi/4.0+pa/2.0);
gk=m_g*(kp-ka);
eq=m_q*ka;
ea=m_g*m_h*ka-2*m_c*sqrt(ka);
fa=(eq+ea/2.0)*m_h;
ha=(3*eq+2*ea)*m_h/(6*eq+3*ea);
l=m_h+(eq+ea)/gk;
a3=1.0;//X3
a2=0.0;//X2
a1=-6*fa/gk;//X1
a0=-6*fa*(l-ha)/gk;//X0
int js,k;
double x,eps;
eps=0.000001; js=100; x=2.0;
k=dnewt(&x,eps,js);
if (k>=0) m_t=1.2*x;
else return;
xm=sqrt(2*fa/gk);
m_t=1.2*x+(eq+ea)/gk;
val10.Format("%6.3f",m_t);
m_t=atof(val10);
m_max=fa*(l-ha+xm) -gk*xm*xm*xm/6.0;
val10.Format("%8.2f",m_max);
m_max=atof(val10);
m_lg=m_h+m_t;
val10.Format("%6.3f",m_lg);
m_lg=atof(val10);
m_lm=l+xm;
val10.Format("%6.3f",m_lm);
m_lm=atof(val10);
m_m=1.3*m_s*m_max;
val10.Format("%8.2f",m_m);
m_m=atof(val10);
UpdateData(FALSE);
if(m_jss == TRUE){
FILE *ou;
if(m_gcm=="") {AfxMessageBox("请输入工程名!"); return;}
flname10=m_gcm + ".txt";
ou=fopen(flname10,"a");
fprintf(ou,"\n\n\n");
fprintf(ou,"\n***********************************************************************");
fprintf(ou,"\n*** 结 构 设 计 计 算 书 ***");
fprintf(ou,"\n*** ***");
fprintf(ou,"\n*** Sdt13 - 悬壁桩墙基坑支护计算 ***");
fprintf(ou,"\n************************************************* Zgs 2002 ******");
fprintf(ou,"\n\n 工程名称: %s",m_gcm);
fprintf(ou,"\n\n1. 已知数据\n");
fprintf(ou,"\n 基坑深度 H=%6.2f(m)",m_h);
fprintf(ou,"\n 土体内摩擦角(加权平均值)ψ=%6.2f, 土体内粘聚力(加权平均值) C=%6.2f(kN/m/m)",
m_pa,m_c);
fprintf(ou,"\n 土体重力密度(加权平均值)γ=%6.2f, 地面超载 Q=%6.2f(kN/m/m)",m_g,m_q);
fprintf(ou,"\n\n2. 计算结果\n");
fprintf(ou,"\n 桩墙埋入深度 T=%7.3f(m)",m_t);
fprintf(ou,"\n 桩墙总长度 L=%7.3f(m)",m_lg);
fprintf(ou,"\n 桩墙最大弯矩 Mmax=%10.3f(m)",m_max);
fprintf(ou,"\n 桩墙最大弯矩深度 Lm=%7.3f(m)",m_lm);
time_t tad;
char *buf;
buf=(char*)calloc(80,sizeof(char));
if(buf==NULL) exit(-1);
tad=time(NULL);
strftime(buf,80,"%A %B %d,%Y",localtime(&tad));
fprintf(ou,"\n\n 设计人:");
fprintf(ou,"\n %s",buf);
fclose(ou);
}
}
void Csdt10::OnBUTTONjsa()
{
double ar,ars,arp,y1,y2;
double r,hs,rs,ao,as,ai;
double m,fc,fy/*,tmp*/;
CString msg1="C=20,25,30,35,40,45,50";
CString msg2="不满足要求,请修改数据D,或S,或C,或A'sr!";
UpdateData(TRUE);
if(m_hc == 20) fc=9.6 ;//C20
else if(m_hc == 25) fc=11.9; //C25
else if(m_hc == 30) fc=14.3 ;//C30
else if(m_hc == 35) fc=16.7 ;//C35
else if(m_hc == 40) fc=19.1 ;//C40
else if(m_hc == 45) fc=21.1 ;//C45
else if(m_hc == 50) fc=23.1 ;//C50
else { AfxMessageBox(msg1); return; }
fy=300;
hs=40;
r=0.5*m_d;
ao=Pi*r*r;
rs=r-hs;
ars=m_cta/360.0;
arp=ars/2.0;
m=m_m*1e6;
as=30000.0;
for(ar=arp;ar<0.95;ar+=0.005) // α>0.465
for(ai=800.0;ai<24000.0;ai+=50.0)
{
y1=-(ar*fc*ao*(1-sin(2*Pi*ar)/(2*Pi*ar)) +fy*(m_asp-ai));
y2=m- (2*fc*ao*r*pow(sin(Pi*ar),3.0)/Pi/3.0
+fy*rs*ai*sin(Pi*ars)/Pi/ars+fy*rs*m_asp*sin(Pi*arp)/Pi/arp);
if(fabs(y1)< 3e4 && fabs(y2)<2e7) {
if(as>ai) {as=ai;/*tmp=ar*/;}
}
}
if(as==30000.0) { AfxMessageBox(msg2);as=0.0; return;}
m_asr=as;
m_ctp=360*arp;
UpdateData(FALSE);
if(m_jss == TRUE){
FILE *ou;
CString flname10;
if(m_gcm =="") {AfxMessageBox("请输入工程名!"); return;}
flname10=m_gcm + ".txt";
ou=fopen(flname10,"a");
fprintf(ou,"\n\n\n");
fprintf(ou,"\n***********************************************************************");
fprintf(ou,"\n*** 结 构 设 计 计 算 书 ***");
fprintf(ou,"\n*** ***");
fprintf(ou,"\n*** Sdt13 - 支护桩配筋计算 ***");
fprintf(ou,"\n************************************************* Zgs 2006 ******");
fprintf(ou,"\n\n 工程名称: %s 构件编号: %s",m_gcm,m_zhang );
fprintf(ou,"\n\n1. 已知数据\n");
fprintf(ou,"\n 桩径 D=%8.2f(m), 弯矩设计值 M=%10.3f(kN-m)",m_d,m_m);
fprintf(ou,"\n 混凝土强度 C=%5d (MPa), 钢筋采用 2 级钢.",m_hc);
fprintf(ou,"\n\n2. 计算结果\n");
fprintf(ou,"\n 受压钢筋面积 A'sr=%8.0f(mmxmm), 受压钢筋对应的圆心角θ'=%8.2f(度)",
m_asp,m_ctp);
fprintf(ou,"\n 受拉钢筋面积 Asr=%8.0f(mmxmm), 受拉钢筋对应的圆心角 θ=%8.2f(度)",
m_asr,m_cta);
time_t tad;
char *buf;
buf=(char*)calloc(80,sizeof(char));
if(buf==NULL) exit(-1);
tad=time(NULL);
strftime(buf,80,"%A %B %d,%Y",localtime(&tad));
fprintf(ou,"\n\n 设计人:");
fprintf(ou,"\n %s",buf);
fclose(ou);
}
}
void Csdt10::OnKillfocusEDITzs()
{
UpdateData(TRUE);
m_m=1.25*m_s*m_max;
UpdateData(FALSE);
}
///////////////////////////////////////////////////////////
//方程及一阶导数
void dnewtf(double x,double y[2])
{
y[0]=a3*x*x*x +a2*x*x +a1*x +a0;
y[1]=3.0*a3*x*x +2.0*a2*x +a1;
return;
}
//牛顿法解一元三次方程
int dnewt(double *x,double eps,int js)
{
int k,l;
double y[2],d,p,x0,x1;
l=js; k=1; x0=*x;
dnewtf(x0,y);
d=eps+1.0;
while ((d>=eps)&&(l!=0))
{ if (fabs(y[1])+1.0==1.0)
{ /*printf("err\n");*/ return(-1);}
x1=x0-y[0]/y[1];
dnewtf(x1,y);
d=fabs(x1-x0); p=fabs(y[0]);
if (p>d) d=p;
x0=x1; l=l-1;
}
*x=x1;
k=js-l;
return(k);
}
void Csdt10::OnBTSdtHelp10()
{
acedHelp("SdtR2x.hlp","SDT13",0);
}
void Csdt10::OnBUTTONjsdk()
{
// TODO: Add your control notification handler code here
acedCommand(RTSTR,"NOTEPAD",RTSTR,flname10,RTNONE);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -