📄 traceview.cpp
字号:
// TraceView.cpp : implementation of the CTraceView class
//
#include "stdafx.h"
#include "Trace.h"
#include "TraceDoc.h"
#include "TraceView.h"
#include "math.h"
#include "fstream.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CTraceView
IMPLEMENT_DYNCREATE(CTraceView, CView)
BEGIN_MESSAGE_MAP(CTraceView, CView)
//{{AFX_MSG_MAP(CTraceView)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code!
//}}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()
/////////////////////////////////////////////////////////////////////////////
// CTraceView construction/destruction
CTraceView::CTraceView()
{
// TODO: add construction code here
}
CTraceView::~CTraceView()
{
}
BOOL CTraceView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CTraceView drawing
void CTraceView::OnDraw(CDC* pDC)
{
CTraceDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
pDC=GetDC();
CRect Recto;
GetClientRect(&Recto);
pDC->SetMapMode(MM_ANISOTROPIC);
pDC->SetViewportOrg(0,0);
pDC->SetViewportExt(Recto.right,Recto.bottom);
pDC->SetWindowOrg(0,0);
pDC->SetWindowExt(1400,1600);
CString str;
for(int i=0;i<12;i++)
{
pDC->MoveTo((i+1)*100,50);
for(int j=0;j<1500;j++)
{
pDC->LineTo(int(trace[j][i]*100),j+51);
}
}
//pDC->LineTo(950,900);
//pDC->LineTo(50,50);
Trace();
}
/////////////////////////////////////////////////////////////////////////////
// CTraceView printing
BOOL CTraceView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CTraceView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CTraceView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CTraceView diagnostics
#ifdef _DEBUG
void CTraceView::AssertValid() const
{
CView::AssertValid();
}
void CTraceView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CTraceDoc* CTraceView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CTraceDoc)));
return (CTraceDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CTraceView message handlers
void CTraceView::Trace()
{
double t=0.002; //采样间隔
int n=31; //子波长度
int f=40; //子波频率
double s[31];
double pi=3.1415926;
fstream outfile;
outfile.open("s.txt",ios::out);
for(int i=0;i<n;i++)
{
s[i]=cos(2*pi*f*(i+1-(n/2+1))*t)*exp(-pow(2*pi*f*(i+1-(n/2+1))*t,2)); //余弦钟形子波
//s[i]=(1-2*pow(pi*f*i*t,2)*exp(-pow(pi*f*i*t,2))); //雷克子波
outfile<<i+1<<"\t"<<s[i]<<endl;
}
outfile.close();
int v=1000; //速度
int h=200; //深度
int X=100; //道间距
int N=12; //记录道数
int T=1500; //采样点数
double time[12];
int x;
outfile.open("time.txt",ios::out);
for(i=0;i<N;i++)
{
x=X*N/2-X*(i+1);
time[i]=sqrt(pow(h,2)+pow(x,2)/4)/v;
}
for(i=0;i<N;i++)
{
time[i]=int(time[i]/t);
outfile<<i+1<<"\t"<<time[i]<<endl;
}
outfile.close();
outfile.open("trace1.txt",ios::out);
double noise[1500][12];
int num,j;
for(i=0;i<T;i++)
{
outfile<<i+1<<"\t";
for(j=0;j<N;j++)
{
trace[i][j]=0.0;
outfile<<trace[i][j]<<"\t";
}
outfile<<endl;
}
for(i=0;i<N;i++)
{
num=int(time[i]);
for(j=num-1;j<num+n-1;j++)
{
trace[j][i]=s[j-num+1];
}
}
outfile.close();
outfile.open("trace.txt",ios::out);
for(i=0;i<T;i++)
{
outfile<<i+1<<"\t";
for(j=0;j<N;j++)
outfile<<float(trace[i][j])<<"\t";
outfile<<endl;
}
outfile.close();
outfile.open("noise.txt",ios::out);
for(i=0;i<T;i++)
{
outfile<<i+1;
for(j=0;j<N;j++)
{
noise[i][j]=Crand(rand())/2;
outfile<<" "<<noise[i][j]<<" ";
}
outfile<<endl;
}
outfile.close();
outfile.open("TraceNoise.txt",ios::out);
for(i=0;i<T;i++)
{
outfile<<i+1<<"\t";
for(j=0;j<N;j++)
{
trace[i][j]=trace[i][j]+noise[i][j];
outfile<<trace[i][j]<<"\t";
}
outfile<<endl;
}
outfile.close();
outfile.open("TraceEnd.txt",ios::out);
for(i=0;i<N;i++)
{
for(j=0;j<T;j++)
trace[j][i]=trace[j][i]+i+1;
}
for(i=0;i<T;i++)
{
outfile<<i+1<<"\t";
for(j=0;j<N;j++)
outfile<<trace[i][j]<<"\t";
outfile<<endl;
}
outfile.close();
}
double CTraceView::Crand(int a)
{
double b;
if(a<1)
b=double(a)/10;
else if(a<100)
b=double(a)/100;
else if(a<1000)
b=double(a)/1000;
else if(a<10000)
b=double(a)/10000;
else
b=double(a)/100000;
return b;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -