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

C# GDI+ 繪圖實戰:25 等分圓周連線生成金剛石晶格效果

     編輯:關於C語言

效果預覽

在 400×400 視窗中,以 25 等分圓周節點兩兩連線,形成密集幾何紋理,視覺酷似金剛石切面折射光輝。

核心演算法

  1. 計算圓心 (ClientSize.Width/2, ClientSize.Height/2) 與半徑 Width/2.2。
  2. 將圓周均勻分為 25 份,角度步進 2π/25。
  3. 預先計算 25 個節點座標存入陣列 circleX[], circleY[]。
  4. 雙重迴圈:for i=0..23, for j=i+1..24 畫線連接所有節點對(共 C(25,2)=300 條線)。

完整程式碼

using System;
using System.Drawing;
using System.Windows.Forms;

public class DrawDiamond : Form {
    public static void Main() {
        Application.Run(new DrawDiamond());
    }

    public DrawDiamond() {
        Text = "金剛石圖案";
        BackColor = Color.Black;
        ForeColor = Color.White;
        ResizeRedraw = true;   // 視窗縮放自動重繪
        Width = 400; Height = 400;
    }

    protected override void OnPaint(PaintEventArgs e) {
        var g = e.Graphics;
        var pen = new Pen(ForeColor, 2);

        float radius = Width / 2.2f;
        const int partitions = 25;
        float angleStep = (float)(2 * Math.PI / partitions);

        float[] xs = new float[partitions];
        float[] ys = new float[partitions];
        float cx = ClientSize.Width / 2f;
        float cy = ClientSize.Height / 2f;

        for (int i = 0; i < partitions; i++) {
            double angle = i * angleStep;
            xs[i] = (float)(radius * Math.Cos(angle)) + cx;
            ys[i] = (float)(radius * Math.Sin(angle)) + cy;
        }

        for (int i = 0; i < partitions - 1; i++)
            for (int j = i + 1; j < partitions; j++)
                g.DrawLine(pen, xs[i], ys[i], xs[j], ys[j]);

        pen.Dispose(); // 釋放非託管資源
    }
}

優化與擴展方向

  • 效能:節點固定時可緩存 PointF[],OnPaint 僅遍歷畫線;Resize 時重算。
  • 動畫:引入 Timer 旋轉相位角 angleOffset,每幀 Invalidate() 產生旋轉效果。
  • 色彩:用 LinearGradientBrush 或 HSB 漸變為每條線著色,增強立體感。
  • 互動:MouseMove 取得滑鼠極座標,動態調整 partitions 或半徑。

數學延伸

此圖形本質是 完全圖 K25 的圓周佈局。若將節點數改為 n,線條數為 n(n-1)/2。n > 50 時線條過密失去美感,建議 12~36 之間。更進階可嘗試 玫瑰線、李薩如曲線 等參數方程生成節點,創造更豐富幾何藝術。

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