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

.NET 環境下繪製模糊數學隸屬函數分布圖完整指南

     編輯:關於.NET

在 .NET 環境中視覺化模糊數學的隸屬函數,是理解與應用模糊邏輯的重要步驟。本文提供一個完整的 Windows Forms 應用程式範例,示範如何使用 GDI+ 繪製六大類常見隸屬函數圖形,包含完整原始碼與核心邏輯解析。

核心參數設定

程式中定義兩個關鍵參數控制繪圖品質與效能:

  • unit(放大倍數):數值越大,圖形顯示越放大,預設為 40。
  • interval(步進刻度):值越小曲線越平滑精確(必須大於 0),但運算速度會下降,預設為 0.001。

架構概覽

專案採用標準 WinForms 架構,主表單 Form1 包含:

  • 參數輸入介面(TextBox 與 ComboBox)
  • 繪圖區域(PictureBox)
  • 預設參數快速載入按鈕(Set1~Set6)

六大隸屬函數類型實作

程式支援 type1 = 1~6 六種基本函數,每種再依 type2 = 1~3 切換左右/中間/完整三種變體:

1. Z型 / S型 / 正三角型(type1 = 1)

以水平線段與垂直截斷組成,適合表示「小於」「大於」「約等於」等語意。

2. 梯型 / 三角型 / 雙邊梯型(type1 = 2)

使用線性插值公式 (d-a)/(b-a) 計算隸屬度,a,b,c,d 為使用者輸入的四個關鍵節點。

3. Bell型 / 反Bell型 / 雙邊Bell型(type1 = 3)

引入冪次參數 k,公式為 ((d-a)/(b-a))^k,曲線彎曲程度可調。

4. 高斯型 / 左高斯 / 右高斯(type1 = 4)

核心公式 Exp(-((d-a)/k)^2),參數 k 控制寬度,呈現平滑鐘形曲線。

5. Pi型 / 左Pi / 右Pi(type1 = 5)

以有理函數 1/(1+k*(d-a)^l) 建模,參數 l 控制邊緣銳度。

6. 正弦型 / 左正弦 / 右正弦(type1 = 6)

利用 0.5 ± 0.5*Sin(...) 產生週期性平滑過渡,適合模擬週期性模糊概念。

繪圖核心邏輯解析

以正態分布(高斯型)為例,pictureBox1_Paint 事件中採用「微段連線法」:

for (d = a; d <= 2 * a; d += interval) {
    x1 = o.X + d * unit;
    x2 = o.X + (d + interval) * unit;
    y1 = o.Y - (float)(Math.Exp(-((d - a) / k) * ((d - a) / k)) * unit);
    y2 = o.Y - (float)(Math.Exp(-((d - interval - a) / k) * ((d - interval - a) / k)) * unit);
    p1 = new PointF(x1, y1);
    p2 = new PointF(x2, y2);
    e.Graphics.DrawLine(Pens.Blue, p1, p2);
}

步驟:

  1. 確定起始座標 (x1, y1)。
  2. 依函數公式計算下一步進 interval 後的 (x2, y2)。
  3. 呼叫 e.Graphics.DrawLine 繪製微小線段。
  4. 迴圈累積形成完整曲線。

手動觸發重繪機制

因 PictureBox.Paint 非使用者自訂方法,需透過按鈕點擊事件手動取得繪圖表面並觸發:

private void button1_Click(object sender, EventArgs e) {
    InitArray(); // 讀取 UI 參數
    Graphics g = Graphics.FromHwnd(this.pictureBox1.Handle);
    PaintEventArgs e1 = new PaintEventArgs(g, this.pictureBox1.ClientRectangle);
    this.pictureBox1_Paint(this.pictureBox1, e1);
    g.Dispose();
}

應用場景與延伸

此工具可用於:

  • 模糊控制器參數調整時的視覺化驗證
  • 教學示範隸屬函數形狀對推理結果的影響
  • 快速原型驗證不同參數組合下的函數變化

若需整合至 WPF 或 ASP.NET Core,可將繪圖邏輯封裝為獨立函式庫,配合 System.Drawing.Common 或 SkiaSharp 實現跨平台渲染。

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