📄 qushixiangview.cpp
字号:
// qushixiangView.cpp : implementation of the CQushixiangView class
//
#include "stdafx.h"
#include "qushixiang.h"
#include <Afxtempl.h>
#include <math.h>
#include "qushixiangDoc.h"
#include "qushixiangView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#define height 143
#define width 788
#define m 15 //拟合阶数
#define K 1000 //放大倍数
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
double G[height][width];
double GG[height][width];
double resule[height][width];
/////////////////////////////////////////////////////////////////////////////
// CQushixiangView
/////////////////////////////////////////////////////////////////////////////
IMPLEMENT_DYNCREATE(CQushixiangView, CView)
BEGIN_MESSAGE_MAP(CQushixiangView, CView)
//{{AFX_MSG_MAP(CQushixiangView)
ON_COMMAND(ID_QUSHINIHE, OnQushinihe)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CQushixiangView construction/destruction
CQushixiangView::CQushixiangView()
{
// TODO: add construction code here
}
CQushixiangView::~CQushixiangView()
{
}
BOOL CQushixiangView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CQushixiangView drawing
void CQushixiangView::OnDraw(CDC* pDC)
{
CQushixiangDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
}
/////////////////////////////////////////////////////////////////////////////
// CQushixiangView printing
BOOL CQushixiangView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CQushixiangView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CQushixiangView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CQushixiangView diagnostics
#ifdef _DEBUG
void CQushixiangView::AssertValid() const
{
CView::AssertValid();
}
void CQushixiangView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CQushixiangDoc* CQushixiangView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CQushixiangDoc)));
return (CQushixiangDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CQushixiangView message handlers
void CQushixiangView::OnQushinihe()
{
CArray<double,double> x;
CArray<double,double> y;
CArray<double,double> chazhi;
double g,q,d2;
double m_a[m];
int nn;
double resultcha;
int b,l,i,j,xdata;
double ydata;
char fileopen[50]={"/0"};
char fileclose[50]={"/0"};
FILE *fileread,*filewrite;
for(b=1;b<3;b++)
{
for(i=0;i<height;i++)
{
for(j=0;j<width;j++)
{
resule[i][j]=0;
}
}
sprintf(fileopen,"%s%d%s","f://",b,".raw");
fileread=fopen(fileopen,"rb");
if(fileread==NULL)
{
MessageBox("File1 open error");
return;
}
for(i=0;i<height;i++)
{
for(j=0;j<width;j++)
{
fread(&G[i][j],sizeof(double),1,fileread);
}
}
fclose(fileread);
//////////////////////guiyihua///////////////////
double min=0.0,max=1000;
for(i=0;i<height;i++)
{
for(j=0;j<width;j++)
{
if(G[i][j]>max)
{
max=G[i][j];
}
if(G[i][j]<min)
{
min=G[i][j];
}
}
}
for(i=0;i<height;i++)
{
for(j=0;j<width;j++)
{
//G[i][j]=K*(G[i][j]-min)/(max-min);
}
}
/////////////////////////开始拟合曲线//////////////////
for(l=0; l<width; l++)
{
for(j=0;j<height;j++)
{
ydata=(double)G[j][l];
y.Add(ydata);
xdata=j;
x.Add(xdata);
}
if(y.GetSize()>1)
{
int n=y.GetSize();
for(int i=0; i<m; i++)
{
m_a[i]=0.0;
}
double z=0.0;double p=0.0;double c=0.0;
for(i=0; i<n; i++)
{
z = z + x[i] / n;
}
double b[m],s[m],t[m];
b[0]=1.0;
double d1 = n;
for(i=0; i<n; i++)
{
p=p+(x[i]-z);
c=c+y[i];
}
c=c/d1;
p=p/d1;
m_a[0]=c*b[0];
if(m>1)
{
t[1]=1.0;
t[0]=-p;
d2=0.0;
c=0.0;
g=0.0;
for(i=0; i<n; i++)
{
q=x[i]-z-p; d2=d2+q*q;
c=c+y[i]*q;
g=g+(x[i]-z)*q*q;
}
c=c/d2;
p=g/d2;
q=d2/d1;
d1=d2;
m_a[1]=c*t[1];
m_a[0]=c*t[0]+m_a[0];
}
for(int j=2; j<m; j++)
{
s[j]=t[j-1];
s[j-1]=-p*t[j-1]+t[j-2];
if(j>=3)
for(int k=j-2; k>=1; k--) s[k]=-p*t[k]+t[k-1]-q*b[k];
s[0]=-p*t[0]-q*b[0];
d2=0.0;
c=0.0;
g=0.0;
for(i=0; i<n; i++)
{
q=s[j];
for(int k=j-1; k>=0; k--) q=q*(x[i]-z)+s[k];
d2=d2+q*q; c=c+y[i]*q;
g=g+(x[i]-z)*q*q;
}
c=c/d2;
p=g/d2;
q=d2/d1;
d1=d2;
m_a[j]=c*s[j]; t[j]=s[j];
for(int k=j-1; k>=0; k--)
{
m_a[k]=c*s[k]+m_a[k];
b[k]=t[k]; t[k]=s[k];
}
}
for(int ii=0;ii<n;ii++)
{
double cc=x[ii]-z;
for(nn=0;nn<m;nn++)
{
resule[ii][l]+=(m_a[nn]*pow(cc,nn));
}
}
x.RemoveAll();
y.RemoveAll();
}
}
for(l=0;l<height;l++)
{
resultcha=0;
for(int ii=0;ii<width;ii++)
{
resultcha+=resule[l][ii]/width;
}
chazhi.Add(resultcha);
}
for(int ii=0;ii<width;ii++)
{
for(l=0;l<height;l++)
{
GG[l][ii]=G[l][ii]-chazhi[l];
}
}
chazhi.RemoveAll();
sprintf(fileclose,"%s%d%s","f://qu",b,".raw");
filewrite=fopen(fileclose,"wb");
if(filewrite==NULL)
{
MessageBox("File open error");
return;
}
for(i=0;i<height;i++)
{
for(j=0;j<width;j++)
{
fwrite(&GG[i][j],sizeof(double),1,filewrite);
}
}
fclose(filewrite);
///////////////////////////////////////////////////////
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -