花样贝塞尔曲线(C#)

来源:互联网 发布:小红帽q群优化软件 编辑:程序博客网 时间:2024/04/23 21:27

                  花样贝塞尔曲线(C#)

                                                        作者 jlgzw

贝塞尔是一名法国工程师。他发明的贝塞尔曲线可以说是一种奇妙的曲线,用它可以创造出很美的图像。一条贝塞尔曲线由4个点唯一定义,包括“起点”,“终点”和“控制点”。其中“控制点”的位置决定着曲线的形状。
 下面是我模仿 Windows自带的屏幕保护“贝塞尔曲线”写的一个小程序。它也可以设置贝塞尔曲线的个数和环数,只需修改iCount和iNumber这两个变量。
//----------------------------------------------
// RandomBezier.cs @2007 by jl gzw
//----------------------------------------------
using System;
using System.Drawing;
using System.Windows.Forms;
class RandomBezier: Form
{
    //变量iCount表示贝塞尔曲线的个数
    const int iCount = 2;
    //变量iNumber表示环的个数
    const int iNumber = 3;    
     private Point[] ptArr = new Point[4 * iCount - (iCount - 1)];
     public static void Main()
     {
          Application.Run(new RandomBezier());
     }
     public RandomBezier()
     {
          Text = "花样贝塞尔曲线";
          this.BackColor = Color.Black;
         
          Timer timer    = new Timer();
          timer.Interval = 100;
          timer.Tick    += new EventHandler(TimerOnTick);
          timer.Start();
     }
     void TimerOnTick(object obj, EventArgs ea)
     { 
          Random rand = new Random();
          Graphics grfx = CreateGraphics();
          //擦除旧的贝塞尔曲线。
          for (int j = 0; j < iNumber; j++)
          {
              for (int i = 0; i < 4 * iCount - (iCount - 1); i++)
              {
                  ptArr[i].X += 5;
                  ptArr[i].Y += 5;
              }
              grfx.DrawBeziers(new Pen(Color.Black, 1), ptArr);
          }
          Point ptBeg = new Point(0,0);
          //获得新贝塞尔曲线的坐标。
          for(int i = 0; i < 4 * iCount - (iCount - 1); i++)
          {
              ptArr[i] = new Point(rand.Next(Math.Min(ClientSize.Width, ClientSize.Height)),
                  rand.Next(Math.Min(ClientSize.Width, ClientSize.Height)));
            
             ptBeg = ptArr[0];
          }
          ptArr[4 * iCount - (iCount - 1) - 1] = ptBeg;
    
          Color color = Color.FromArgb(rand.Next(256),rand.Next(256), rand.Next(256));
          //画新的贝塞尔曲线。外层循环控制环的个数。
          for (int j = 0; j < iNumber; j++)
          {
              grfx.DrawBeziers(new Pen(color, 1), ptArr);
              for (int i = 0; i < 4 * iCount - (iCount - 1); i++)
              {
                  ptArr[i].X -= 5;
                  ptArr[i].Y -= 5;
              }             
          }
          grfx.Dispose();
     }
}
原创粉丝点击