📄 qushixiangview.cpp
字号:
// qushixiangView.cpp : implementation of the CQushixiangView class
//
#include "stdafx.h"
#include "qushixiang.h"
#include <Afxtempl.h>
#include "qushixiangDoc.h"
#include "qushixiangView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
unsigned short G[1920][1536];
float GG[1920][1536];
/////////////////////////////////////////////////////////////////////////////
// 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<float,float> x;
CArray<float,float> y;
CArray<float,float> chazhi;
float g,q,d2;
float m_a[5];
int m=5;
float resule,resultcha;
int l,i,j,xdata;
float ydata;
char *fileopen="e://6.raw";
char *fileclose="d://66.raw";
FILE *fileread,*filewrite;
fileread=fopen(fileopen,"rb");
if(fileread==NULL)
{
MessageBox("File1 open error");
return;
}
for(i=0;i<1920;i++)
{
for(j=0;j<1536;j++)
{
fread(&G[i][j],sizeof(unsigned short),1,fileread);
}
}
fclose(fileread);
/////////////////////////开始拟合曲线//////////////////
for(l=0;l<1920;l++)
{
for(j=0; j<1536; j++)
{
ydata=(float)G[i][j];
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;
}
if(m>n) m = n;
if(m>20) m=20;
float z=0.0;float p=0.0;float c=0.0;
for(i=0; i<n; i++)
{
z = z + x[i] / n;
}
float b[20],s[20],t[20];
b[0]=1.0;
float 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++)
{
float cc=x[ii]-z;
resule=m_a[0]+m_a[1]*cc+m_a[2]*cc*cc+m_a[3]*cc*cc*cc+m_a[4]*cc*cc*cc*cc;
resultcha=y[ii]-resule;
chazhi.Add(resultcha);
}
float minpoint=0.0,maxpoint=0.0;
for(int ii2=0;ii2<n;ii2++)
{
if(chazhi[ii2]<minpoint)
{
minpoint=chazhi[ii2];
}
if(chazhi[ii2]>maxpoint)
{
maxpoint=chazhi[ii2];
}
}
if(minpoint<0)
{
for(int ii3=0;ii3<n;ii3++)
{
chazhi[ii3]=chazhi[ii3]-minpoint;
}
maxpoint=maxpoint-minpoint;
minpoint=0;
}
else
{
maxpoint=maxpoint;
minpoint=minpoint;
}
int ratio;
ratio=4096/maxpoint;
for(j = 0; j < 1536; j++)
{
float newdata=chazhi[j]*ratio;
GG[i][j]=newdata;
}
x.RemoveAll();
y.RemoveAll();
chazhi.RemoveAll();
}
}
filewrite=fopen(fileclose,"wb");
if(filewrite==NULL)
{
MessageBox("File open error");
return;
}
for(i=0;i<1920;i++)
{
for(j=0;j<1536;j++)
{
fwrite(&GG[i][j],sizeof(float),1,fileread);
}
}
fclose(filewrite);
////////////////////////////////////////////////////////
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -