📄 190structuredlg.cpp
字号:
}
if(LRadio==IDC_1LG_RADIO&&RRadio==IDC_1RJ_RADIO)
{
EDGECONDITION=3;
strcpy(INPUTRESULT,"边界条件:左侧固支,右侧铰支\n");
}
if(LRadio==IDC_1LG_RADIO&&RRadio==IDC_1RG_RADIO)
{
EDGECONDITION=4;
strcpy(INPUTRESULT,"边界条件:左侧固支,右侧固支\n");
}
m_5ResultEdit.SetSel(0,-1);
m_5ResultEdit.ReplaceSel(INPUTRESULT);
}
void CMy190structureDlg::On1changeButton()
{
// TODO: Add your control notification handler code here
GetDlgItem(IDC_1LJ_RADIO)->EnableWindow(TRUE);
GetDlgItem(IDC_1LG_RADIO)->EnableWindow(TRUE);
GetDlgItem(IDC_1RJ_RADIO)->EnableWindow(TRUE);
GetDlgItem(IDC_1RG_RADIO)->EnableWindow(TRUE);
CheckRadioButton(IDC_1LJ_RADIO,IDC_1LG_RADIO,IDC_1LJ_RADIO);
CheckRadioButton(IDC_1RJ_RADIO,IDC_1RG_RADIO,IDC_1RG_RADIO);
m_1ChangeButton.EnableWindow(FALSE);
m_1FinishButton.EnableWindow(TRUE);
m_2NextButton.EnableWindow(FALSE);
m_2CellEdit.EnableWindow(FALSE);
m_2LengthEdit.EnableWindow(FALSE);
m_2ToughEdit.EnableWindow(FALSE);
m_2BsEdit.EnableWindow(FALSE);
m_2BdEdit.EnableWindow(FALSE);
m_2JsEdit.EnableWindow(FALSE);
m_2JdEdit.EnableWindow(FALSE);
}
void CMy190structureDlg::On2nextButton()
{
// TODO: Add your control notification handler code here
char temp[20]; //中间使用字符存储单元
char *stop; //字符转换专用
int nMax;
ELEMENT[NOWSEQUENCE].series=NOWSEQUENCE;
//
nMax=m_2SequenceEdit.LineLength()+1;
m_2SequenceEdit.GetWindowText(temp,nMax);
ELEMENT[NOWSEQUENCE].locolorder=atoi(temp);
strcat(INPUTRESULT,a);
strcat(INPUTRESULT,temp);
strcat(INPUTRESULT,b);
strcat(INPUTRESULT,c);
//
nMax=m_2LengthEdit.LineLength()+1;
m_2LengthEdit.GetWindowText(temp,nMax);
ELEMENT[NOWSEQUENCE].length=atof(temp);
strcat(INPUTRESULT,d);
strcat(INPUTRESULT,temp);
strcat(INPUTRESULT,c);
//
nMax=m_2ToughEdit.LineLength()+1;
m_2ToughEdit.GetWindowText(temp,nMax);
ELEMENT[NOWSEQUENCE].toughness=1000*atof(temp);
strcat(INPUTRESULT,e);
strcat(INPUTRESULT,temp);
strcat(INPUTRESULT,c);
//
nMax=m_2JsEdit.LineLength()+1;
m_2JsEdit.GetWindowText(temp,nMax);
ELEMENT[NOWSEQUENCE].js=atof(temp);
strcat(INPUTRESULT,f1);
strcat(INPUTRESULT,temp);
strcat(INPUTRESULT,f2);
//
nMax=m_2JdEdit.LineLength()+1;
m_2JdEdit.GetWindowText(temp,nMax);
ELEMENT[NOWSEQUENCE].jd=1000*atof(temp);
strcat(INPUTRESULT,temp);
strcat(INPUTRESULT,c);
//
nMax=m_2BsEdit.LineLength()+1;
m_2BsEdit.GetWindowText(temp,nMax);
ELEMENT[NOWSEQUENCE].bs=atof(temp);
strcat(INPUTRESULT,g1);
strcat(INPUTRESULT,temp);
strcat(INPUTRESULT,g2);
//
nMax=m_2BdEdit.LineLength()+1;
m_2BdEdit.GetWindowText(temp,nMax);
ELEMENT[NOWSEQUENCE].bd=1000*atof(temp);
strcat(INPUTRESULT,temp);
strcat(INPUTRESULT,h);
//
m_5ResultEdit.SetSel(0,-1);
m_5ResultEdit.ReplaceSel(INPUTRESULT);
double F,a,b,l,q,m,n,EI;
F=ELEMENT[NOWSEQUENCE].jd;
a=ELEMENT[NOWSEQUENCE].js;
l=ELEMENT[NOWSEQUENCE].length;
b=l-a;
q=ELEMENT[NOWSEQUENCE].bd;
m=ELEMENT[NOWSEQUENCE].bs;
n=l-m;
EI=ELEMENT[NOWSEQUENCE].toughness;
ELEMENT[NOWSEQUENCE].leftmoment=-F*a*b*b/l/l-q*m*m/12*(6-8*m/l+3*m*m/l/l);
ELEMENT[NOWSEQUENCE].rightmoment=F*a*a*b/l/l+q*m*m*m/l/12*(4-3*m/l);
ELEMENT[NOWSEQUENCE].leftforce=-F*b*b/l/l*(1+2*a/l)-q*m*(1-2*m*m/l/l+m*m*m/l/l/l/2);
ELEMENT[NOWSEQUENCE].rightforce=-F*a*a/l/l*(1+2*b/l)-q*m*m*m/l/l*(1-m/2/l);
ELEMENT[NOWSEQUENCE].location[3]=NOWSEQUENCE;
ELEMENT[NOWSEQUENCE].location[6]=NOWSEQUENCE+1;
static double k[7][7];
k[2][2]=12*EI/l/l/l;k[3][2]=6*EI/l/l;k[5][2]=-12*EI/l/l/l;k[6][2]=6*EI/l/l;
k[2][3]=6*EI/l/l;k[3][3]=4*EI/l;k[5][3]=-6*EI/l/l;k[6][3]=2*EI/l;
k[2][5]=-12*EI/l/l/l;k[3][5]=-6*EI/l/l;k[5][5]=12*EI/l/l/l;k[6][5]=-6*EI/l/l;
k[2][6]=6*EI/l/l;k[3][6]=2*EI/l;k[5][6]=-6*EI/l/l;k[6][6]=4*EI/l;
for(int i1=0;i1<=6;i1++)
{
for(int i2=0;i2<=6;i2++)
{
ELEMENT[NOWSEQUENCE].localk[i1][i2]=k[i1][i2];
}
}
NOWSEQUENCE=NOWSEQUENCE+1;
if(NOWSEQUENCE==NUMBER)
{
m_2NextButton.EnableWindow(FALSE);
m_2FinishButton.EnableWindow(TRUE);
On2finishButton();
}
if(NUMBER==1)
{
m_2NextButton.EnableWindow(FALSE);
m_2FinishButton.EnableWindow(FALSE);
On2finishButton();
m_3NomodifyButton.EnableWindow(TRUE);
}
//写 当前跨数
_ltoa(NOWSEQUENCE,temp,20);
strcpy(SEQUENCE,temp);
//写 ---
char temp1[20]="--";
strcat(SEQUENCE,temp1);
//写 总跨数
nMax=m_1NumberEdit.LineLength()+1;
m_1NumberEdit.GetWindowText(temp,nMax);
strcat(SEQUENCE,temp);
NUMBER=strtol(temp,&stop,10);
//显示
m_2SequenceEdit.SetSel(0,-1);
m_2SequenceEdit.ReplaceSel(SEQUENCE);
//
m_2CellEdit.SetSel(0,-1);
m_2CellEdit.ReplaceSel("");
m_2LengthEdit.SetSel(0,-1);
m_2LengthEdit.ReplaceSel("");
m_2ToughEdit.SetSel(0,-1);
m_2ToughEdit.ReplaceSel("");
m_2JsEdit.SetSel(0,-1);
m_2JsEdit.ReplaceSel("0");
m_2JdEdit.SetSel(0,-1);
m_2JdEdit.ReplaceSel("0");
m_2BsEdit.SetSel(0,-1);
m_2BsEdit.ReplaceSel("0");
m_2BdEdit.SetSel(0,-1);
m_2BdEdit.ReplaceSel("0");
}
void CMy190structureDlg::On2finishButton()
{
// TODO: Add your control notification handler code here
On2nextButton();
m_2CellEdit.EnableWindow(FALSE);
m_2LengthEdit.EnableWindow(FALSE);
m_2ToughEdit.EnableWindow(FALSE);
m_2BsEdit.EnableWindow(FALSE);
m_2BdEdit.EnableWindow(FALSE);
m_2JsEdit.EnableWindow(FALSE);
m_2JdEdit.EnableWindow(FALSE);
m_2FinishButton.EnableWindow(FALSE);
m_1ChangeButton.EnableWindow(FALSE);
m_3ModifyButton.EnableWindow(TRUE);
m_3NomodifyButton.EnableWindow(TRUE);
for(int s=1;s<=NUMBER;s++)
{
for(int i=1;i<=6;i++)
{
for(int j=1;j<=6;j++)
{
double c=ELEMENT[s].localk[i][j];
int a,b;
a=ELEMENT[s].location[i];
b=ELEMENT[s].location[j];
K[a][b]=K[a][b]+c;
}
}
FP[s]=FP[s]+ELEMENT[s].leftmoment;
FP[s+1]=FP[s+1]+ELEMENT[s].rightmoment;
}
NOWSEQUENCE=1;
}
void CMy190structureDlg::On3nomodifyButton2()
{
// TODO: Add your control notification handler code here
m_3ModifyButton.EnableWindow(FALSE);
m_3SequenceEdit.EnableWindow(FALSE);
m_3NomodifyButton.EnableWindow(FALSE);
//m_4NextpointButton.EnableWindow(TRUE);
m_4CodeEdit.EnableWindow(TRUE);
m_4NextpointButton.EnableWindow(TRUE);
}
void CMy190structureDlg::On4nextpointButton()
{
// TODO: Add your control notification handler code here
char temp[20]; //中间使用字符存储单元
int nMax;
nMax=m_4CodeEdit.LineLength()+1;
m_4CodeEdit.GetWindowText(temp,nMax);
POINTORDER[NOWSEQUENCE]=atoi(temp);
m_4CodeEdit.SetSel(0,-1);
m_4CodeEdit.ReplaceSel("");
NOWSEQUENCE+=1;
if(NOWSEQUENCE==NUMBER+2)
{
m_4NextpointButton.EnableWindow(FALSE);
m_4CodeEdit.EnableWindow(FALSE);
m_6SolveButton.EnableWindow(TRUE);
}
}
void CMy190structureDlg::On6solveButton()
{
// TODO: Add your control notification handler code here
for(int p=0;p<961;p++)
{
KS[p]=0;
}
if(EDGECONDITION==1)
{
SolveEdge1();
}
if(EDGECONDITION==2)
{
SolveEdge2();
}
if(EDGECONDITION==3)
{
SolveEdge3();
}
if(EDGECONDITION==4)
{
SolveEdge4();
}
for(int r=1;r<31;r++)
{
char temp[20];
_ltoa(r,temp,20);
strcat(OUTPUTANGLE,temp);
strcat(OUTPUTANGLE,l);
char temp1[20]="--";
strcat(OUTPUTANGLE,temp1);
_ltoa(AG[r],temp,20);
strcat(OUTPUTANGLE,temp);
strcat(OUTPUTANGLE,c);
}
m_7CellEdit.SetSel(0,-1);
m_7CellEdit.ReplaceSel(OUTPUTANGLE);
}
void SolveEdge1()
{
for(int i=0;i<=NUMBER+1;i++)
{
P[i]=-FP[i];
for(int j=0;j<=NUMBER+1;j++)
{
KS[i*31+j]=K[i][j];
}
}
KS[0]=1;
for(int k=NUMBER+2;k<=30;k++)
{
KS[k*31+k]=double(1);
P[k]=double(0);
}
Gauss(KS,31,P);
for(int l=0;l<=NUMBER+1;l++)
{
AG[l]=P[l];
}
}
void SolveEdge2()
{
for(int i=1;i<=NUMBER;i++)
{
P[i]=-FP[i];
for(int j=1;j<=NUMBER;j++)
{
KS[i*31+j]=K[i][j];
}
}
KS[0]=1;
for(int k=NUMBER+1;k<=30;k++)
{
KS[k*31+k]=(double)1;
P[k]=(double)0;
}
Gauss(KS,31,P);
for(int l=0;l<=NUMBER+1;l++)
{
AG[l]=P[l];
}
}
void SolveEdge3()
{
for(int i=2;i<=NUMBER+1;i++)
{
P[i]=-FP[i];
for(int j=2;j<=NUMBER+1;j++)
{
KS[i*31+j]=K[i][j];
}
}
KS[0]=1;
KS[32]=1;
for(int k=NUMBER+2;k<=30;k++)
{
KS[k*31+k]=(double)1;
P[k]=(double)0;
}
Gauss(KS,31,P);
for(int l=0;l<=NUMBER+1;l++)
{
AG[l]=P[l];
}
}
void SolveEdge4()
{
for(int i=2;i<=NUMBER;i++)
{
P[i]=-FP[i];
for(int j=2;j<=NUMBER;j++)
{
KS[i*31+j]=K[i][j];
}
}
KS[0]=1;
KS[32]=1;
for(int k=NUMBER+1;k<=30;k++)
{
KS[k*31+k]=(double)1;
P[k]=(double)0;
}
Gauss(KS,31,P);
for(int l=0;l<=NUMBER+1;l++)
{
AG[l]=P[l];
}
}
void Gauss(double a[], int n, double b[])
{
int i, j, k, l, ll, irow, icol;
double big, pivinv, dum;
int ipiv[50], indxr[50], indxc[50];
for(j=0; j<=n-1; j++)
{
ipiv[j]=0;
}
for(i=0; i<=n-1; i++)
{
big=0.0;
for(j=0; j<=n-1; j++)
{
if(ipiv[j] != 1)
{
for(k=0; k<=n-1; k++)
{
if(ipiv[k]==0)
{
if(fabs(a[j*n+k])>=big)
{
big=fabs(a[j*n+k]);
irow=j;
icol=k;
}
else if(ipiv[k]>1)
{
//MessageBox("对不起,方程无法求解,请重试 ");
break;
}
}
}
}
}
ipiv[icol]=ipiv[icol]+1;
if(irow!=icol)
{
for(l=0; l<=n-1; l++)
{
dum=(a[irow*n+1]);
a[irow*n+1]=a[icol*n+1];
a[icol*n+1]=dum;
}
dum=b[irow];
b[irow]=b[icol];
b[icol]=dum;
}
indxr[i]=irow;
indxc[i]=icol;
if(a[icol*n+icol]==0.0)
break;
pivinv=1.0/a[icol*n+icol];
for(l=0; l<=n-1; l++)
{
a[icol*n+l]=a[icol*n+l]*pivinv;
}
b[icol]=b[icol]*pivinv;
for(ll=0; ll<=n-1; ll++)
{
if(ll!=icol)
{
dum=a[ll*n+icol];
a[ll*n+icol]=0.0;
for(l=0; l<=n-1; l++)
{
a[ll*n+l]=a[ll*n+l]-a[icol*n+l]*dum;
}
b[ll]=b[ll]-b[icol]*dum;
}
}
}
for(l=n-1; l>=0; l--)
{
if(indxr[l]!=indxc[l])
{
for(k=0; k<=n-1; k++)
{
dum=a[k*n+indxr[l]];
a[k*n+indxr[l]]=a[k*n+indxc[l]];
a[k*n+indxr[l]]=dum;
}
}
}
}
//End
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -