⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 190structuredlg.cpp

📁 基于VC实现的一个建筑方面使用的
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	}
	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 + -