[디지털전송]정현파를 display해주는 소스
*재*
다운로드
장바구니
소개글
다음과 같은 식을 이용해서 만들어지는 정현파를 화면상에 그려주는 프로그램의 작성하시오.식 : g(t) = A sin ( 2πft + θ )
입력변수 : A, f, θ
출력값 : 학번, 이름, g(t) 그래프
Y축은 위의 식을 표시하고 X축은 시간을 의미한다.
MFC에서 코딩하였으며, VC++에서 컴파일 하였습니다.
컴파일 실행환경
VC++본문내용
#include <math.h> // 사인값을 위한 수학함수 헤더파일 링크#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// Sin
Sin::Sin()
{
// 초기값은 0
val_A = 0;//Amplify
val_P = 0;//Frequency
val_X = 0;//Theta
}
Sin::~Sin()
{
}
//double PI = 3.1*************3238; 파이값
double PI = 3.141592653589;
double Sin::y_size(int nTime)
{
return val_A * sin(GetRadianVal(nTime));
}
double Sin::GetRadianVal(int nTime)
{
double WIDTH = 100; // Double 값을 계산해야 하므로..
return PI*val_P*(nTime/WIDTH) + PI*val_X/180; // 사인 그리는 부분. 값을 리턴할때마다 값이 변한다.
}
==========================================================
void SinGraph::OnPaint()
{
CPaintDC DContext(this); // device context - DC라는 파일명 탓에 애매한 혼돈이 발생. DContext라고 처리--;
// TODO: Add your message handler code here
CRect rtClient;
GetClientRect(&rtClient);
// 지도 그리기
DContext.SetMapMode (MM_ANISOTROPIC);
DContext.SetViewportOrg(MARGIN_X, rtClient.Height()/2);
DContext.SetWindowExt(1, -1);
int nBoundTop = -rtClient.Height()/2 + MARGIN_Y;
int nBoundBottom= rtClient.Height()/2 - MARGIN_Y;
int nBoundLeft = MARGIN_X;
int nBoundRight = rtClient.Width() - 2*MARGIN_X;
CPen pen(PS_SOLID, 1, COLOR_GRID);
int nOldBKMode = DContext.SetBkMode (TRANSPARENT);
CPen *pOldPen = DContext.SelectObject(&pen);
// X 축 그린다
DContext.MoveTo(0,0);
DContext.LineTo(nBoundRight, 0);
// Y 축 그린다
DContext.MoveTo(0, nBoundTop);
DContext.LineTo(0, nBoundBottom);
// X 축 단위 입력
DContext.SetTextColor(COLOR_GRID);
CString strText(_T("Time(ms)"));
DContext.TextOut(nBoundRight - 60, -15, strText);
// 모눈을 그린다.
CPen penGrid(PS_DOT, 1, COLOR_GRID);
DContext.SelectObject(&penGrid);
int nValue = 0;
for( int x = 50; x< nBoundRight; x += 50)
{
// 위도
DContext.MoveTo(x, nBoundTop);
DContext.LineTo(x, nBoundBottom);
// 경도
CString strValue; ++nValue;
strValue.Format (_T("%dpi"), nValue);
DContext.TextOut(x-7, 0, strValue);
}
// 원점
nValue = 0;
CString strValue(_T(" 0"));
DContext.TextOut(-15, 6, strValue);
// Y 축 부분과 값
for( int y = 30; y< nBoundBottom; y += 30)
{
// 모눈
DContext.MoveTo(0, y);
DContext.LineTo(nBoundRight, y);
DContext.MoveTo(0, -y);
DContext.LineTo(nBoundRight, -y);
// y 값
CString strValue; nValue += 3;
strValue.Format (_T(" %d"), nValue);
DContext.TextOut(-15, y+6, strValue);
strValue.Format (_T("-%d"), nValue);
DContext.TextOut(-15, -y+6, strValue);
}
// 사인함수
for( int nTime = 0; nTime < nBoundRight; ++nTime)
{
double dfY = SinCore.y_size(nTime);
dfY *= 10;
DContext.SetPixel( nTime, (int)dfY, COLOR_GRAPH);
}
DContext.SelectObject(pOldPen);
DContext.SetBkMode (nOldBKMode );
}
압축파일 내 파일목록
dc.aps
dc.clw
dc.cpp
dc.dsp
dc.dsw
dc.h
dc.ncb
dc.opt
dc.plg
dc.rc
dcDlg.cpp
dcDlg.h
ReadMe.txt
resource.h
Sin.cpp
Sin.h
SinGraph.cpp
SinGraph.h
StdAfx.cpp
StdAfx.h
디지털 전송 과제.hwp
res/dc.ico
res/dc.rc2
dc.clw
dc.cpp
dc.dsp
dc.dsw
dc.h
dc.ncb
dc.opt
dc.plg
dc.rc
dcDlg.cpp
dcDlg.h
ReadMe.txt
resource.h
Sin.cpp
Sin.h
SinGraph.cpp
SinGraph.h
StdAfx.cpp
StdAfx.h
디지털 전송 과제.hwp
res/dc.ico
res/dc.rc2