日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

简单的MFC画正弦曲线

發布時間:2023/12/18 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 简单的MFC画正弦曲线 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 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();

}

?

http://www.360doc.com/content/14/1127/22/11539950_428607967.shtml

?

2. 做一個振幅可以改變的正弦曲線的vc小程序,但是坐標軸可以畫出來,正弦曲線出不來,高手給分析一下程序吧~

void?CSinxDlg::OnBtn()?
{
//?TODO:?Add?your?control?notification?handler?code?here
CWnd*?pWnd=GetDlgItem(IDC_SRC);
CDC*?pDC=pWnd->GetDC();

pDC->Rectangle(0,0,400,300);

CPen?redpen(PS_SOLID,1,RGB(255,0,0));
CPen*?pOldPen=pDC->SelectObject(&redpen);
pDC->MoveTo(20,10);
pDC->LineTo(20,290);
pDC->MoveTo(20,150);
pDC->LineTo(380,150);

CString?sPIText[]={"0","1/2π","π","3/2π","2π","5/2π","3π"};

for?(int?i=0;i<7;i++)
{
pDC->MoveTo(60*i+20,150);
pDC->LineTo(60*i+20,145);
pDC->TextOut(60*i+15,153,sPIText[i]);
}

CString?sYText[]={"-2","-3/2","-1","-1/2","","1/2","1","3/2","2"};
for?(int?j=0,m=0;m<9;j++,m++)
{
pDC->MoveTo(20,250-25*j);
pDC->LineTo(23,250-25*j);
pDC->TextOut(5,250-25*j,sYText[m]);
}
pDC->SelectObject?(pOldPen);

double?radian,y;
UpdateData();
double?m_pi;
m_pi=m_radius;
for?(i=20;i<380;i++)
{
radian=(i-20)/((double)60*2)*PI;
y=150-sin(radian)*50*m_pi;
pDC->MoveTo(i,(int)y);
pDC->LineTo(i,(int)y);
}
}

小弟明白了,其實最后兩句:
?pDC->MoveTo(i,(int)y);
?pDC->LineTo(i,(int)y);
進行畫線的時候是顯示的正弦曲線上的一些點,但是此時系統畫筆的寬度為1,當畫筆寬度為1時,是不顯示繪制的每個點的,當把畫筆的寬度改為2或者更大的時候就可以顯示啦~

http://bbs.csdn.net/topics/340031505

總結

以上是生活随笔為你收集整理的简单的MFC画正弦曲线的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。