等高線圖是 CChart 開發初衷核心功能,專為二維標量場視覺化設計:有限元分析、流體模擬、地形高程、電磁場分佈等。
目標函數 z = f(x, y),示例:
f(x, y) = 1.0 / ((x-1.0)² + y² + 1.0)
在 (1.0, 0.0) 處有極大值,適合驗證渲染效果。
Lesson04,複製前 3 課通用框架包含庫配置、static CChartWnd chartWnd、Attach/Detach、CS_DBLCLKS。
double FieldFunc(double x, double y) {
return 1.0 / ((x-1.0)*(x-1.0) + y*y + 1.0);
}
case WM_CREATE:
chartWnd.Attach(hWnd, kTypeContourLine); // 關鍵:類型為等高線
chartWnd.GetChart()->SetFieldFcn(FieldFunc); // 註冊標量場函數
double xRange[2] = {-2.0, 2.0};
double yRange[2] = {-2.0, 2.0};
chartWnd.GetChart()->SetPlotRange(xRange, yRange); // 設置繪圖域
// 可選優化參數
chartWnd.GetChart()->SetContourPrecision(8); // 精度 5~8 足夠,越大首次渲染越慢
chartWnd.GetChart()->SetContourLineNum(50); // 等高線條數,默認較少
break;
基礎版(精度默認、線數默認):
優化版(Precision=8, LineNum=50):
| 方法 | 參數 | 說明 |
|---|---|---|
| SetFieldFcn | double (*fcn)(double, double) | 註冊 z=f(x,y) 函數指針 |
| SetPlotRange | double xRange[2], double yRange[2] | 設置 X/Y 顯示範圍 |
| SetContourPrecision | int level (1~10) | 邊緣追蹤精度,越高越平滑 |
| SetContourLineNum | int count | 等高線數量(高度層數) |
| SetContourColorMap | ColorMapType | 配色方案(熱圖/彩虹/灰度) |
[xMin,xMax]×[yMin,yMax] 建立均勻網格。Precision 控制細分度)。第 5 課:回歸基礎——批量數據繪製、多曲線、圖例、座標軸標題、背景網格,構建工程級監控儀表盤。