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

📄 processview.cpp

📁 该软件是我读硕士的时候写的
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	}
	else
	{
		for (i = 1; i <DataNum; i ++)
		{	
			DataDataTmp1=CURVE_WIDTHMAX*pDoc->DataWaveletLow[i-1]/(lMaxData-lMinData);
			DataDataTmp2=CURVE_WIDTHMAX*pDoc->DataWaveletLow[i]/(lMaxData-lMinData);
			DataDepthTmp1=SCALE_DEPTH1*(pDoc->DataDepth[i-1]-templittle);
			DataDepthTmp2=SCALE_DEPTH1*(pDoc->DataDepth[i]-templittle);
			
			pDC->MoveTo(rect.left+DataDataTmp1+2*SCALE_WIDTH2, rect.top+DataDepthTmp1);
			pDC->LineTo(rect.left+DataDataTmp2+2*SCALE_WIDTH2, rect.top+DataDepthTmp2);
		} 	
	}
	
	pDC->SelectObject(pOldPen);
}

void CProcessView::OnIwavelet() 
{
	if(AFTERDWT==false)
	{
		AfxMessageBox("请先进行小波正变换!");
		return;
    }
	CProcessDoc* pDoc = GetDocument();
	memcpy(DataWaveletLow,pDoc->DataWaveletLow,sizeof(double)*shuzu);
	memcpy(DataWaveletHigh,pDoc->DataWaveletHigh,sizeof(double)*shuzu);
	
	int i,j,wlen,sca[20],flag[20];
	int m;//分解的层数
    m=J;
	int tmpDataLength;
	int tmp;
	
	static double h[]={0.332670552950,0.806891509311,0.459877502118,
		-0.135011020010,-0.085441273882,0.035226291882};
	
	static double g[]={0.0352263,0.08544127,-0.135011,
		-0.459877502118,0.8068915,-0.33267055};
	
	
	j=DataNum;
	flag[0]=0;
	for(i=0;i<=m;i++)
	{
		flag[i+1]=flag[i]+j;
		sca[i]=j;
		j=j/2;
	}
    //小波长度
	wlen=6;
	
	for(i=0;i<sca[m];i++)
	{
		DataWaveletLow[flag[m]+i]=DataWaveletLow[flag[m]+i];
	}

	
	// 创建对话框
	CDlgIDWT dlgPara;
	
	// 初始化变量值
	memcpy(dlgPara.c,DataWaveletLow,sizeof(double)*shuzu);
	memcpy(dlgPara.d,DataWaveletHigh,sizeof(double)*shuzu);
	dlgPara.J=J;
	dlgPara.DataLength=DataNum;
	
	// 显示对话框,提示用户设定平移量
	if (dlgPara.DoModal() != IDOK)
	{
		// 返回
		return;
	}
	
	// 获取用户的设定
	memcpy(DataWaveletLow,dlgPara.c,sizeof(double)*shuzu);
	memcpy(DataWaveletHigh,dlgPara.d,sizeof(double)*shuzu);
	
	// 删除对话框!!!
	delete dlgPara;	
	
    //小波重构
    IDWT(g,h,wlen,DataWaveletLow,DataWaveletHigh,m,sca);
	
	ofstream ostrm;
    ostrm.open( "C:\\temp\\chonggou.txt");
	
    for(i=0;i<DataNum;i++)
	{
		ostrm<<DataDepth[i]<<",";
        ostrm<<DataWaveletLow[i]<<endl;
	}
	ostrm.close();
	
//	PAINTCHONGGOU=true;
//	PAINTAFTERDWT=false;	
	
	DRAWWAVELET=false;

	memcpy(pDoc->DataWaveletLow,DataWaveletLow,sizeof(double)*shuzu);
	memcpy(pDoc->DataWaveletHigh,DataWaveletHigh,sizeof(double)*shuzu);

	Invalidate();	
}

void CProcessView::OnKalmanMoxing1() 
{
	CProcessDoc* pDoc = GetDocument();
	memcpy(DataData,pDoc->DataData,sizeof(double)*shuzu);
	// 创建对话框
	DlgKalman dlgPara;
	
	// 初始化变量值
	memcpy(dlgPara.DataData,DataData,sizeof(double)*shuzu);
dlgPara.DataNum=DataNum;
	// 显示对话框,提示用户设定平移量
	if (dlgPara.DoModal() != IDOK)
	{
		// 返回
		return;
	}
	
	// 获取用户的设定
	memcpy(KalmanData,dlgPara.KalmanData,sizeof(double)*shuzu);
	
	// 删除对话框!!!
	delete dlgPara;	

	AFTERKALMAN=true;
//	CProcessDoc* pDoc = GetDocument();
	memcpy(pDoc->KalmanData,KalmanData,sizeof(double)*shuzu);
	
	Invalidate();	
	
}

void CProcessView::DrawDataKalman(CDC *pDC)
{
	CProcessDoc* pDoc = GetDocument();
	memcpy(KalmanData,pDoc->KalmanData,sizeof(double)*shuzu);

	int i,j;
	double templittle,tempbig;

	double DataDataTmp1,DataDataTmp2;
	double DataDepthTmp1,DataDepthTmp2;
	double DataDataTmpHigh1,DataDataTmpHigh2;
	int tmp,tmpDataLength;
	
	
	COLORREF m_DataColor = RGB(255, 0, 0);
	CPen penSolidData;
	penSolidData.CreatePen(PS_SOLID, 1, m_DataColor);
	CPen* pOldPen = pDC->SelectObject(&penSolidData);
	
	templittle=int(DataDepth[0])-int(DataDepth[0])%10;
    tempbig=int(DataDepth[DataNum-1])-int(DataDepth[DataNum-1])%10;
		for (i = 1; i <DataNum; i ++)
		{	
			DataDataTmp1=CURVE_WIDTHMAX*KalmanData[i-1]/(lMaxData-lMinData);
			DataDataTmp2=CURVE_WIDTHMAX*KalmanData[i]/(lMaxData-lMinData);
			DataDepthTmp1=SCALE_DEPTH1*(DataDepth[i-1]-templittle);
			DataDepthTmp2=SCALE_DEPTH1*(DataDepth[i]-templittle);
			
			pDC->MoveTo(rect.left+DataDataTmp1+4*SCALE_WIDTH2, rect.top+DataDepthTmp1);
			pDC->LineTo(rect.left+DataDataTmp2+4*SCALE_WIDTH2, rect.top+DataDepthTmp2);
		} 	
		
	pDC->SelectObject(pOldPen);

}

void CProcessView::OnFilterMean() 
{
	int t=GetNumber("请选择模板!!!",3,9);
 	
	int y,y1;
	double temp;
	

	for(y=(t-1)/2;y<DataNum-(t-1)/2;y++)
	{
		temp=0.0;
			for(y1=-(t-1)/2;y1<=(t-1)/2;y1++)
			{
					temp+=DataData[y+y1];
			}

		DataData[y]=temp/t;
					
	}
	CProcessDoc* pDoc = GetDocument();
	memcpy(pDoc->DataData,DataData,sizeof(double)*shuzu);
	
	ofstream ostrm6;
	ostrm6.open( "C:\\FilterMean3.txt");
	for(int j=0;j<DataNum;j++)
	{
		ostrm6<<DataDepth[j]<<",";
		ostrm6<<DataData[j]<<endl;
	}
	ostrm6.close();

	Invalidate();	
}
///////////////////////////////
void CProcessView::Quxiannihe(int Num, int jieci, double input[], double depth[], double m_bTmp[])
{
	CMatrix1 MatrixInc(Num,1,input);
   	
    double *inputDepthX=new double[Num*(jieci+1)];
	
    for( int i=0; i<Num; i++)
    {
		for(int j=0; j<(jieci+1); j++)
        {
			inputDepthX[i*(jieci+1)+j]=pow(depth[i],j);
		}
	}
	
	CMatrix1 MatrixDep(Num,(jieci+1),inputDepthX);
	
    CMatrix1 MatrixDepZhuanzhi((jieci+1),Num,inputDepthX);
	
	MatrixDepZhuanzhi=MatrixDep.Transpose();
	
	CMatrix1  MatrixDepTmp((jieci+1),(jieci+1));
	
	MatrixDepTmp=MatrixDepZhuanzhi*MatrixDep;
    MatrixDepTmp.InvertGaussJordan();
	
	CMatrix1 MatrixbTmp;
	
	MatrixbTmp=MatrixDepTmp*MatrixDepZhuanzhi*MatrixInc;    
	
	//m_bTmp[i]用于存放各项的系数
	for(i=0;i<jieci+1 ;i++)
		m_bTmp[i]=MatrixbTmp.m_pData[i];
	
	delete inputDepthX;   

}

void CProcessView::OnNiheYiyuanerci() 
{
	int i,j,k;
	double DataNihe[9],DepthNihe[9];
	double DataDataNihe[shuzu],DataDepthNihe[shuzu];
    double xishu[9];
	double tempDepth,tempData;
	int tempjishu;
	int t=GetNumber("请选择样本数!!!",3,9);

	BeginWaitCursor();
	tempjishu=0;
	for(i=0;i<DataNum;i+=t)
	{
		for(j=0;j<t;j++)
		{
			DataNihe[j]=DataData[i+j];
			DepthNihe[j]=DataDepth[i+j];
		}

		Quxiannihe(t,2,DataNihe,DepthNihe,xishu);
		
		tempDepth=DataDepth[i];
		while(tempDepth<DataDepth[i+t])
		{
			tempData=xishu[0]+tempDepth*xishu[1]+tempDepth*tempDepth*xishu[2];
			DataDataNihe[tempjishu]=tempData;
			DataDepthNihe[tempjishu]=tempDepth;
			tempjishu++;
			tempDepth+=0.2;
		}
	
	}

	ofstream ostrm;
    ostrm.open( "C:\\temp\\nihe.txt");
	
    for(i=0;i<tempjishu;i++)
	{
		ostrm<<DataDepthNihe[i]<<",";
        ostrm<<DataDataNihe[i]<<endl;
	}
	ostrm.close();

	EndWaitCursor();
}


void CProcessView::OnNiheZhixian() 
{
	double DataData[shuzu],DataDepth[shuzu];
	CProcessDoc* pDoc = GetDocument();
	memcpy(DataData,pDoc->DataData,sizeof(double)*shuzu);
	memcpy(DataDepth,pDoc->DataDepth,sizeof(double)*shuzu);
	DataNum= pDoc->DataNum;
	
	int i,j;
	double DataNihe[19],DepthNihe[19];
	double DataDataNihe[shuzu],DataDepthNihe[shuzu];
    double tempDepth,tempData;
	int tempjishu,tempjishu2,temp1Depth;
	
	temp1Depth=(int)((DataDepth[0]+0.05)*10);

	tempDepth=(double)temp1Depth/10;

	while(tempDepth<DataDepth[0])
	{tempDepth=tempDepth+0.1;}

	BeginWaitCursor();
	tempjishu=0;
	tempData=0.0;
	for( i=0;i<(pDoc->DataNum-1);i++)
	{
			while(tempDepth<DataDepth[i+1])
			{
				if((DataDepth[i+1]-DataDepth[i])<0.01) 
				{
					CString str;
					str.Format("%f米处的数据有误!!!",DataDepth[i]);
					AfxMessageBox(str);
					return;
				}
				
tempData=DataData[i]+(tempDepth-DataDepth[i])*(DataData[i+1]-DataData[i])/(DataDepth[i+1]-DataDepth[i]);
				
				DataDataNihe[tempjishu]=(double)tempData;
				DataDepthNihe[tempjishu]=(double)tempDepth;
				tempjishu++;
				tempDepth+=0.200;
				tempData=0.0;
			}
		
	}
	memset(DataDepth123,0.0,sizeof(double)*shuzu);
	memset(DataData123,0.0,sizeof(double)*shuzu);
    int jishu;
	jishu=0;
	for(int k=0;k<(tempjishu-1);k=k+1)
	{
		DataDepth123[jishu]=(double)DataDepthNihe[k];
		DataData123[jishu]=(double)DataDataNihe[k];
		jishu++;
        DataDepth123[jishu]=(double)(DataDepthNihe[k]+DataDepthNihe[k+1])/2.0;
		DataData123[jishu]=(double)(DataDataNihe[k]+DataDataNihe[k+1])/2.0;
		jishu++;
	}

	ofstream ostrm;
    ostrm.open( "C:\\temp\\zhixiannihe.txt");
	
    for(i=0;i<jishu;i++)
	{
		ostrm<<DataDepth123[i]<<",";
        ostrm<<DataData123[i]<<endl;
	}
	ostrm.close();
	
	EndWaitCursor();

    AfxMessageBox("OK!");	
}

void CProcessView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint) 
{
	CProcessDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	switch (1)
	{
	 case 1:    // redraw entire window
	 Invalidate();
		break;
/*
		
	case HINT_UPDATE_DRAWOBJ:   // a single object has changed
		break;
		
	case HINT_UPDATE_SELECTION: // an entire selection has changed
		break;
		
	case HINT_DELETE_SELECTION: // an entire selection has been removed
		
		break;
		
	case HINT_UPDATE_OLE_ITEMS:
		
		break;
	*/
	
	default:
		break;
	}	
}

void CProcessView::OnMouseMove(UINT nFlags, CPoint point) 
{
	char text[10];
	CStatusBar* pStatus=(CStatusBar *)
		AfxGetApp()->m_pMainWnd->GetDescendantWindow(AFX_IDW_STATUS_BAR);
	if(pStatus) {
		wsprintf(text,"  x=%d,  y=%d",point.x,point.y);
		pStatus->SetPaneText(0,text);
	}
}

void CProcessView::OnFilterMiddle() 
{  //中值滤波
	int t=GetNumber("请选择模板!!!",3,11);

	int y,y1,j,i,ii;
	double temp[16],bTemp;
	//除去边缘几个数据
	for(y=(t-1)/2;y<DataNum-(t-1)/2;y++)
	{
		ii=-1;
		for(y1=-(t-1)/2;y1<=(t-1)/2;y1++)
		{
			ii++;
			temp[ii]=DataData[y+y1];
		}
		// 用冒泡法对数组进行排序
		for (i=0; i<t; i++)
		{
			for (j=i+1; j<t; j++)
			{
				if (temp[j] >= temp[i])
				{
					// 互换
					bTemp = temp[j];
					temp[j] = temp[i];
					temp[i] = bTemp;
				}
			}
		}
    //中值!!!
    DataData[y]=temp[(t-1)/2];		
	}

	CProcessDoc* pDoc = GetDocument();
	memcpy(pDoc->DataData,DataData,sizeof(double)*shuzu);
	Invalidate();

	ofstream ostrm1;
    ostrm1.open( "C:\\C71_P4ZuanshiZhongzhi3.txt");
	for(j=0;j<DataNum;j++)
	{
		ostrm1<<DataData[j]<<endl;
	}
	ostrm1.close();

}

void CProcessView::OnCheck() 
{
	CProcessDoc* pDoc = GetDocument();
	
	for(int ii=1;ii<pDoc->DataNum;ii++)
	{
		if((pDoc->DataDepth[ii]-pDoc->DataDepth[ii-1])<0.01) 
		{
			CString str;
			str.Format("%f米处的数据有误!!!",pDoc->DataDepth[ii]);
			AfxMessageBox(str);
			return;
		}
	}
	
}


void CProcessView::OnNormalizeData() 
{
	double temp1[8000],temp2[8000];
	CProcessDoc* pDoc = GetDocument();
	
	ifstream istrm1,istrm2;
    istrm1.open( "C:\\11.txt");
	
    for(int j=0;j<110;j++)
	{
		istrm1>>temp1[j];
	}
	istrm1.close();

	istrm2.open( "C:\\22.txt");
	
    for(j=0;j<110;j++)
	{
		istrm2>>temp2[j];
	}
	istrm2.close();
	
	ofstream ostrm;
    ostrm.open( "C:\\CB71-P4-ForDrawInc.txt");
	
    for(j=0;j<110;j++)
	{
		ostrm<<temp1[j]<<" ";
	}
ostrm<<endl;
	for(j=0;j<110;j++)
	{
		ostrm<<temp2[j]<<" ";
	}
	ostrm.close();

/*

	ofstream ostrm;
    ostrm.open( "C:\\learn_L9P1.txt");
	
    for(int j=0;j<pDoc->DataNum;j++)
	{
		temp1=DataData[j]/120.0;
        ostrm<<temp1<<endl;
	}
	ostrm.close();
*/

}
void CProcessView::DrawDataBPNet(CDC *pDC)
{
	CProcessApp *app=(CProcessApp *)AfxGetApp();
	CProcessDoc* pDoc = GetDocument();

    memcpy(pDoc->DataWaveletLow,app->DataX,sizeof(double)*shuzu);
    memcpy(pDoc->DataWaveletHigh,app->DataY,sizeof(double)*shuzu);

	memcpy(DataWaveletLow,pDoc->DataWaveletLow,sizeof(double)*shuzu);
	memcpy(DataWaveletHigh,pDoc->DataWaveletHigh,sizeof(double)*shuzu);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -