在第三课中,笨笨向大家展示了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);
chartWnd.GetChart()->SetPlotRange(-2.0, 2.0, -2.0, 2.0);
chartWnd.GetChart()->SetTitle(_T("测试云图"));
break;
这里的代码似曾相识哟,呵呵。
很容易发现,这里的代码和第三课相比,除了最后设置标题的那一行外,只有第一句有变化,把kTypeContourLine改成了kTypeContourMap,而后者正是云图的代号。
运行程序,效果如图。
云图的颜色比较绚烂,效果的确要比等高线图好一点,呵呵。
云图的图例和前面课程中看到的不一样,这是一个渐变的颜色棒。
下面我们把云图场函数修改一下,让它有两个极大值点,看看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的云图功能。云图和前面介绍的等高线图各有特色。其实笨笨还实现了一种视图,把等高线图和云图结合在一起,当然这就完美了。这种新视图在这里就不详述了。