程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 深入淺出CChart 每日一課——第四課 等高線圖,白富美之第一個高級功能

深入淺出CChart 每日一課——第四課 等高線圖,白富美之第一個高級功能

編輯:關於C語言

前幾課介紹了CChart的第一個例程,畫了一條簡單的折線圖。有的同學不免就要嘀咕了,原來CChart也就不過爾爾了呗,沒什麼特別之處,我用MoveTo、LineTo在屏幕上自己畫也能完成。

這些同學低估了CChart的功能。

雖然CChart是笨笨自己搗鼓出來的,但笨笨十年磨一劍,目前CChart功能已經相當不錯。笨笨自我感覺CChart在功能上不比MsChart、TeeChart、ChartDirector等大公司的產品差多少。當然在調用接口方面、一些圖像細節處理方面,和大公司產品的確還有差距。

這也是沒有辦法的。笨笨作為一個非專業的業余編程愛好者,獨自開發這幾十萬行的代碼,確實沒法和公司的專業人員相比。

不閒扯了,今天給大家帶來CChart的第一個高級功能——等高線圖。等高線功能可是笨笨當初開發CChart庫的緣由喲。

既然要畫等高線圖,首先得想好等高線圖的函數。實際應用中,等高線圖的函數可能是多種型式的,例如測量數據、程序模擬計算結果等。最終都將可以表示成z=f(x,y)的形式,其中x、y就是平面坐標,z就是等高線的高度。

作為例子,這裡我們對一個比較簡單的函數繪制等高線。其中f(x,y)=1.0/((x-1.0)*(x-1.0)+y*y+1.0)。可以想象,這個函數在坐標點(1.0,0.0)位置有極大值。讓我們把等高線畫出來,看結果對不對。

首先仍然按照第一課的方法,建立一個VC6項目,名稱為Lesson04。

按照第一課的流程,完成第一步到第九步,其中第七步WM_CREATE消息的響應例程暫時不填,如下。

case WM_CREATE:
		break;
 


然後按照第三課的方法,讓我們的程序能響應鼠標雙擊。

wcex.style			= CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;
 


建立等高線函數。在WndProc函數的前面某個位置,輸入如下代碼。

double f(double x, double y)
{
	return 1.0/((x-1.0)*(x-1.0)+y*y+1.0);
}
 


修改WM_CREATE消息的響應例程

case WM_CREATE:
		chartWnd.Attach(hWnd, kTypeContourLine);
		chartWnd.GetChart()->SetFieldFcn(f);
		{
			double xRange[2], yRange[2];
			xRange[0] = -2.0;
			xRange[1] = 2.0;
			yRange[0] = -2.0;
			yRange[1] = 2.0;
			chartWnd.GetChart()->SetPlotRange(xRange, yRange);
		}
		break;
 


注意等高線圖的類型標識為kTypeContourLine。

現在編譯並運行程序,得到的效果如圖。

SouthEast

哈哈,等高線圖這麼容易就出來了。從圖可以看出,(1,0)位置的確是一個極值點。

上面的代碼中,利用SetFieldFcn設置等高線函數,利用SetPlotRange設置繪圖的X坐標和Y坐標的范圍。

有的同學仔細瞧了瞧上面的圖,發現圖中的線不甚光滑,這個問題能解決嗎?

請在WM_CREATE消息的響應例程中break;前面添加一句代碼。

chartWnd.GetChart()->SetContourPrecision(8);
 


再運行試試看,曲線是不是光滑多了?

這裡用SetContourPrecision設置等高線的精度,一般設置為5或者6就可以了。設置得越高,第一次繪制的時候延遲就越長。

還有的同學會覺得等高線是不是有點稀疏,那好,請在WM_CREATE消息的響應例程中break;前面再添加一句代碼。

chartWnd.GetChart()->SetContourLineNum(50);
 


運行效果如圖。

SouthEast

這下等高線夠多了的吧,呵呵。

這裡SetContourLineNum用來設置等高線高度的個數。

到現在為止,同學們已經會用CChart畫等高線了,簡單得出奇吧!

當然等高線圖的色彩有點單調,後續課程中將介紹另一種類似的視圖——雲圖,那就五顏六色、五彩缤紛了,嘿嘿。

下課了!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved