国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于VC++的二維繪圖程序設(shè)計(jì)

2019-09-21 01:14張亞寧劉春光吳詩帆
科技與創(chuàng)新 2019年17期
關(guān)鍵詞:坐標(biāo)軸刻度繪圖

張亞寧,劉春光,吳詩帆

基于VC++的二維繪圖程序設(shè)計(jì)

張亞寧,劉春光,吳詩帆

(91550部隊(duì),遼寧 大連 116023)

對(duì)工程數(shù)據(jù)進(jìn)行繪圖是數(shù)據(jù)分析中的一項(xiàng)重要內(nèi)容,基于VC++開發(fā)環(huán)境從數(shù)據(jù)讀取、選定坐標(biāo)范圍、繪制數(shù)據(jù)曲線等方面對(duì)二維數(shù)據(jù)繪圖程序設(shè)計(jì)流程進(jìn)行了詳細(xì)描述,通過繪圖實(shí)驗(yàn)驗(yàn)證了程序的正確性和科學(xué)性,具有一定的工程意義。

VC++;二維數(shù)據(jù);測量設(shè)備;繪圖軟件

1 緒論

在工程實(shí)踐中,對(duì)測量設(shè)備或傳感器采集的數(shù)據(jù)進(jìn)行實(shí)時(shí)顯示、事后分析等工作較為普遍[1]。通過計(jì)算機(jī)繪制出的數(shù)據(jù)曲線走勢對(duì)數(shù)據(jù)分析具有重要的意義。當(dāng)前使用較廣泛的繪圖軟件有AutoCAD、Solidworks、MATLAB、OriginPro等,經(jīng)過多年的發(fā)展,以上繪圖軟件的功能較完善。在實(shí)際工程中,有時(shí)需要對(duì)數(shù)據(jù)進(jìn)行較快速度的處理,或者需要與計(jì)算機(jī)硬件接口進(jìn)行信息互換,此時(shí),利用上述繪圖軟件處理不方便。Visual Studio C++是Microsoft公司推出的一款基于Windows平臺(tái)、可視化的集成開發(fā)環(huán)境,在其平臺(tái)下開發(fā)的程序具有效率高、占用內(nèi)存低、與硬件接口銜接方便等特點(diǎn)[2-4]?;诖?,本文利用VC++平臺(tái)開發(fā)了二維數(shù)據(jù)繪圖程序,并進(jìn)行了數(shù)據(jù)繪圖實(shí)驗(yàn),實(shí)驗(yàn)證明了程序的可行性和科學(xué)性,具有一定的工程意義。

2 程序?qū)崿F(xiàn)

程序設(shè)計(jì)主要分為4部分,分別是:①獲取數(shù)據(jù);②選定坐標(biāo)范圍;③繪制坐標(biāo)刻度及標(biāo)注;④繪制數(shù)據(jù)曲線。程序各模塊代碼的實(shí)現(xiàn)如下。

2.1 獲取數(shù)據(jù)

獲取數(shù)據(jù)是程序處理的源頭,在工程中數(shù)據(jù)獲取分為實(shí)時(shí)獲取和事后獲取。實(shí)時(shí)獲取主要從計(jì)算機(jī)硬件接口獲取,而事后獲取可以從文本、表格等文件中獲取。本文以從TXT文本文件獲取數(shù)據(jù)為例進(jìn)行程序設(shè)計(jì):

因不同文件數(shù)據(jù)的行數(shù)列數(shù)一般不同,所以在定義數(shù)據(jù)存儲(chǔ)數(shù)組前,需要先編寫程序獲取數(shù)據(jù)的行數(shù)和列數(shù)。同時(shí),因?yàn)閿?shù)組的維數(shù)一般用常量來定義,本程序選擇動(dòng)態(tài)分配空間的方式定義存儲(chǔ)數(shù)據(jù)數(shù)組[*]。數(shù)據(jù)獲取之后,通過循環(huán)語句按照行或列拆分?jǐn)?shù)組,具體如下:

2.2 確定坐標(biāo)范圍

科學(xué)、合理地選擇坐標(biāo)范圍具有重要的意義,數(shù)據(jù)范圍過大或過小都將導(dǎo)致看圖不便。本文根據(jù)數(shù)據(jù)(數(shù)據(jù)同理)的最大、最小值確定坐標(biāo)范圍,以數(shù)據(jù)為例程序處理如下:

x_max=max_double(x,N);//計(jì)算x的最大值x_max

x_min=min_double(x,N);//計(jì)算x的最小值x_min

x_abs_max=abs_max_double(x_max,x_min);//計(jì)算x絕對(duì)值的最大值

int x_power;//x_power為x的指數(shù),例如:10^2

int xd_start;// xd_start為x軸的左側(cè)

int xd_end;// xd_end為x軸的右側(cè)

x_power=e_pow_double(xx_abs_max);//計(jì)算數(shù)值的10的冪次

xd_start=xx_min/pow(10,xx_power)-1;//左側(cè)邊界減少1

xd_end =xx_max/pow(10,xx_power)+1;//右側(cè)邊界增加1

坐標(biāo)軸的范圍確定之后,需要確定坐標(biāo)軸在屏幕上的位置,即:

const int psc_left=400;//繪圖左側(cè)邊界

const int psc_right=1000; //繪圖右側(cè)邊界

const int psc_up=100; //繪圖上側(cè)邊界

const int psc_down=400; //繪圖下側(cè)邊界

確定完屏幕范圍后,需要計(jì)算坐標(biāo)范圍和屏幕范圍之間的變換系數(shù),即單位長度的數(shù)據(jù)在屏幕上的長度,計(jì)算公式為=(psc_right-psc_left)/(xd_end-xd_start)//變換系數(shù),=(psc_down-psc_up)/((-yd_start)-(-yd_end))//變換系數(shù)。

此處需要注意屏幕橫向是從左向右,縱向是從上向下,所以在計(jì)算和兩個(gè)變換系數(shù)時(shí)有所差異。

2.3 繪制坐標(biāo)軸

繪制坐標(biāo)軸首先需要計(jì)算出原點(diǎn)(0,0)在屏幕上的位置(0,0),根據(jù)比例關(guān)系得到的公式為:

定好原點(diǎn)(0,0)后,調(diào)用MFC中的類CPen,進(jìn)行畫圖,主要程序代碼如下:

CPen zpen,cpen; //坐標(biāo)軸zpen,坐標(biāo)刻度cpen

zpen.CreatePen(PS_SOLID,3,RGB(0,0,0));

cpen.CreatePen(PS_SOLID,2,RGB(0,0,0));

pDC->SetViewportOrg(x0,y0);// 確定原點(diǎn)

pDC->SelectObject(&zpen);//pDC指向zpen,開始畫坐標(biāo)軸

pDC->MoveTo(xd_start*pow(10,x_power)*ex,0);

pDC->LineTo((xd_end)*pow(10,x_power)*ex,0);

pDC->MoveTo(0,-(yd_end)*pow(10,y_power)*ey);

pDC->LineTo(0,-yd_start*pow(10,y_power)*ey);

pDC->SelectObject(&cpen);//pDC指向cpen,開始畫坐標(biāo)刻度

CString sTemp;

for (i=xd_start;i<=xd_end;i++){//劃大刻度

pDC->MoveTo(int(i*pow(10,x_power)*ex),0);

pDC->LineTo(int(i*pow(10,x_power)*ex),-8);

for (int j=1;(j<=4)&&(i

pDC->MoveTo(int((i+j*0.2)*pow(10,x_power)*ex),0);

pDC->LineTo(int((i+j*0.2)*pow(10,x_power)*ex),-4);}

sTemp.Format("%d",i);//將數(shù)字“i”轉(zhuǎn)換成字符“sTemp”

pDC->TextOut(int(i*pow(10,xx_power)*ex-4),5,sTemp);}

軸刻度的畫法與軸相同,此處不再贅述。

2.4 繪制數(shù)據(jù)曲線

坐標(biāo)軸和坐標(biāo)刻度繪制完畢之后,最后對(duì)數(shù)據(jù)進(jìn)行繪制,此處需要強(qiáng)調(diào)的是坐標(biāo)軸的變換系數(shù)和數(shù)據(jù)的變換系數(shù)必須一致,即數(shù)據(jù)的變換系數(shù)也是,。

主要程序代碼如下:

CPen pen;定義數(shù)據(jù)曲線pen畫筆

pen.CreatePen(PS_SOLID,3,RGB(255,0,0));//數(shù)據(jù)曲線特征

pDC->SelectObject(&pen);//pDC指向pen,開始畫數(shù)據(jù)曲線

for( i=0;i<=N-1;i++){

pDC->MoveTo(int(x[i]*ex),int(-y[i]*ey));

pDC->LineTo(int(x[i]*ex),int(-y[i]*ey));}

cpen.DeleteObject();//刪除刻度畫筆

zpen.DeleteObject(); //刪除坐標(biāo)畫筆

pen.DeleteObject(); //刪除數(shù)據(jù)畫筆

3 實(shí)驗(yàn)驗(yàn)證

程序完成后,選取兩組工程數(shù)據(jù)依次在VC++和OriginPro環(huán)境下進(jìn)行繪圖實(shí)驗(yàn),結(jié)果如圖1和圖2所示。

圖1 數(shù)據(jù)曲線(VC++環(huán)境)

圖2 數(shù)據(jù)曲線(OriginPro環(huán)境)

通過對(duì)比可以發(fā)現(xiàn),本文設(shè)計(jì)的二維數(shù)據(jù)繪圖程序繪圖結(jié)果與OriginPro環(huán)境下的繪圖結(jié)果是一致的,證明了本文設(shè)計(jì)程序的正確性。

4 小結(jié)及展望

本文通過在VC++環(huán)境下設(shè)計(jì)繪圖程序,實(shí)現(xiàn)了高效、準(zhǔn)確地對(duì)事后數(shù)據(jù)進(jìn)行繪圖處理,下一步將針對(duì)網(wǎng)絡(luò)發(fā)送的實(shí)時(shí)數(shù)據(jù)進(jìn)行實(shí)時(shí)繪圖顯示。

[1] 李楊,徐潔,王春海,等.VC++高效無閃爍繪制大數(shù)據(jù)量圖形[J].電腦編程技巧與維護(hù),2014(2):19-26 .

[2]賈振華.VC++程序設(shè)計(jì)項(xiàng)目實(shí)踐[M].北京:清華大學(xué)出版社,2010:36-128.

[3]和清芳.計(jì)算機(jī)圖形學(xué)原理及算法教程(Visual C++版)[M].2版.北京:清華大學(xué)出版社,2010:39-58.

[4]王振武.計(jì)算機(jī)圖形學(xué)基礎(chǔ)[M].北京:清華大學(xué)出版社,2011:31-77.

TP311

A

10.15913/j.cnki.kjycx.2019.17.020

2095-6835(2019)17-0048-02

張亞寧(1988—),男,碩士研究生,助理工程師,研究方向?yàn)閿?shù)據(jù)融合及目標(biāo)安全控制。

〔編輯:張思楠〕

猜你喜歡
坐標(biāo)軸刻度繪圖
編輯部故事
剪彩帶
巧做帶平均線的柱形圖
東施效顰
誰大誰小
誰大誰小
巧用仿射變換妙解高考解析幾何題
測量三字歌
繪圖機(jī)器人
數(shù)學(xué)問答