深入显出CChart 每日一课——第十三课 似曾相识之云图,乱花渐欲迷人眼

深入浅出CChart 每日一课——第十三课 似曾相识之云图,乱花渐欲迷人眼

在第三课中,笨笨向大家展示了CChart绘制等高线图的功能,用很少的代码就实现了等高线图。

这一课用CChart的云图功能把第三课的等高线图修改成云图。

按照第一课的方法建立一个VC6工程Lesson13

在文件Lesson13.cpp中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, kTypeContourMap);
	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);
	}
	chartWnd.GetChart()->SetTitle(_T("测试云图"));
	break;
 

这里的代码似曾相识哟,呵呵。

很容易发现,这里的代码和第三课相比,除了最后设置标题的那一行外,只有第一句有变化,把kTypeContourLine改成了kTypeContourMap,而后者正是云图的代号。

运行程序,效果如图。

深入显出CChart 每日一课——第十三课 似曾相识之云图,乱花渐欲迷人眼


云图的颜色比较绚烂,效果的确要比等高线图好一点,呵呵。

云图的图例和前面课程中看到的不一样,这是一个渐变的颜色棒。

下面我们把云图场函数修改一下,让它有两个极大值点,看看CChart显示的结果对不对。

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


运行效果如图。

深入显出CChart 每日一课——第十三课 似曾相识之云图,乱花渐欲迷人眼

如同我们的预期,现在的图像中有两个极大值点。

本节课笨笨给同学们介绍了CChart的云图功能。云图和前面介绍的等高线图各有特色。其实笨笨还实现了一种视图,把等高线图和云图结合在一起,当然这就完美了。这种新视图在这里就不详述了。