黄致列歌曲视频想念你:简单的MFC画正弦曲线

来源:百度文库 编辑:偶看新闻 时间:2024/04/30 01:13:06

MFC 单文档 如何画正弦曲线

1.画笔类,CPen,创建画笔类的对象后,需要调用CreatePen(......)函数创建画笔。然后将其选入设备描述表中。

pDC->SelectObject(.......);

2.设置起点坐标。在这里调用一个函数来设置坐标原点。

pDC->SetViewportOrg(100,255);

3.调用LineTo(point),MoveTo(Point)函数画图。

4.删除创建的画笔对象。pen.DeleteObject();

以下是今天所写的画正弦函数的图像。创建一个单文档的应用程序。并且在VIEW类中的OnDraw(。。。。)函数里面做消息响应。由于调用了sin()函数,所以要把math.h头文件包含进来。#include "math.h"

void CDrawSinXView::OnDraw(CDC* pDC)
{
CDrawSinXDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
//建立画笔
CPen pen_Zuobixi,pen_sinx;
pen_Zuobixi.CreatePen(PS_SOLID,4,RGB(0,0,0));
pen_sinx.CreatePen(PS_SOLID,2,RGB(0,0,255));
pDC->SelectObject(&pen_Zuobixi);
//指定原点
pDC->SetViewportOrg(100,255);
pDC->SetTextColor(RGB(255,0,0));
//绘制横坐标
CString sPIText[]={"-1/2π","","1/2π","π","3/2π","2π","5/2π","3π","7/2π","4π","9/2π","5π"};
int n=-1;
int nTemp=0;
while (nTemp<=660)
{
   pDC->LineTo(60*n,0);
   pDC->LineTo(60*n,-5);
   pDC->MoveTo(60*n,0);
   pDC->TextOut(60*n-sPIText[n+1].GetLength()*3,16,sPIText[n+1]);

   n++;
   nTemp +=60;
}
pDC->MoveTo(0,0);
CString strTemp;
//绘制纵坐标
for(n=-4,nTemp = 0;nTemp<=180;n++,nTemp+=60)
{
   pDC->LineTo(0,60*n);
   pDC->LineTo(5,60*n);
   pDC->MoveTo(0,60*n);
   strTemp.Format("%d",-n);
   pDC->TextOut(10,60*n,strTemp);
}
   double y,radian;
pDC->SelectObject(&pen_sinx);
for(int x=-60;x<600;x++)
{
   //弧度=X坐标/曲线宽度*角系数*π
   //Y坐标=振幅*曲线宽度*sin(弧度)
   radian =x/((double)60*2)*PI;
   y=sin(radian)*2*60;
   pDC->MoveTo((int)x,(int)y);
   pDC->LineTo((int)x,(int)y);
}
pen_sinx.DeleteObject();
pen_Zuobixi.DeleteObject();

}