首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

仿查詢分析器的 C# 計算器(六):函數波形繪製

     編輯:關於C#

計算器新增變數支援、更多函數、邏輯短路運算後,進一步實作「輸入函數表達式即繪製波形」的功能,效果如示波器般直觀。

變數機制與語法樹複用

採用靜態字典 DicVariable 儲存變數(Key 為名稱,Value 為 TokenValue)。解析表達式時,非關鍵字識別字視為變數。關鍵在於保留完整語法樹:賦值運算子 = 保持樹結構,不像括號只做分隔。繪圖時只需修改變數節點的 TokenValue,再呼叫根節點 Execute(),避免重複解析,大幅提升效能。

波形繪製核心邏輯

定義參數變數 n、X/Y 兩個表達式(含 n)。先解析得三棵語法樹,再迴圈遞增 n 計算座標點,最後用 Graphics.DrawLines 連線:

// 偽代碼
strN = "n=0";
strX = "n*sin(n)";
strY = "n*cos(n)";
TokenN = Analyse(strN);
TokenX = Analyse(strX);
TokenY = Analyse(strY);

for (int n = 1; n < 360; n++)
{
    TokenN.TokenValue = n;
    TokenX.Execute();
    TokenY.Execute();
    points.Add(new Point(TokenX.TokenValue, TokenY.TokenValue));
}
g.DrawLines(pen, points.ToArray());

支援多波形疊加

設計 DrawInfo 類別封裝單一波形的表達式 X/Y、線條顏色/寬度、點集合,並提供 InitialToken(解析)、Execute(計算點)方法。UI 透過 PropertyGrid 編輯波形清單。

繪圖實作細節

  • 建立 Bitmap、取得 Graphics,設定 SmoothingMode.HighQuality。
  • 平移座標原點至圖片中心 (TranslateTransform),繪製 X/Y 軸與刻度。
  • 迴圈計算所有波形點集合,再逐一 DrawLines。
  • 繪製圖例,最後 RotateFlip 修正 Y 軸方向。

內建範例波形

名稱表達式 X表達式 Y
相位1na=100*sin(n)
相位2nb=100*sin(n+120)
相位3nc=100*sin(n-120)
三相整流nabs(a)+abs(b)+abs(c)
李沙育圖100*sin(n*2)100*cos(n*3+90)-200
阿基米德螺旋線n*sin(abs(n))/20-240n*cos(abs(n))/20-180

同樣的 GDI+ 技巧也可延伸繪製統計圖表(折線、柱狀、橫條、餅圖),文末附贈多張成果圖。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved