📄 processview.cpp
字号:
}
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 + -