CSDN博客

img PercyLee

分形图形.生命中的树(图,评,代码)

发表于2003/7/29 8:18:00  1435人阅读

分类: 我的大学时代

 

程序实现的图形为: 

        

  

我想,自然界中没有比树更美丽的了.

 

树是最坚强的生命之一.我国西部的戈壁上,生命罕至的地方,却能常常看见一片一片的胡杨树林.关于胡杨树,有个美丽的断言,您一定听说过:

她在戈壁中,将是生存而一千年不死,死后一千年不倒,倒后一千年不腐!

 

树也是最优雅的生命,您来南国来看一看呀,来南国做客;我常常能一动不动的看那棕榈几个小时,看那学校后山上的青松,看东湖岸边的垂柳------

有多少诗言,有多少,是在歌颂她们哦~~~

 

没有美好,就不会有快乐!

分形将带给您美好,愿分形能让您快乐~~~

 

我以后还会帖出更多的树,不断重复这个主题,因为我的生命中,树是如此的重要!

程序的代码(c#):

 

using System;

using System.Drawing;

using System.Collections;

using System.ComponentModel;

using System.Windows.Forms;

using System.Data;

 

namespace Picture

{

     /// <summary>

     /// Form1 的摘要说明。

     /// </summary>

     public class Form1 : System.Windows.Forms.Form

     {

         /// <summary>

         /// 必需的设计器变量。

         /// </summary>

          private System.ComponentModel.Container components = null;

 

          private Pen greenPen=new Pen(Color.Green,0);

          private Random randNum=new Random(unchecked((int)DateTime.Now.Ticks));

 

         public Form1()

         {

              //

              // Windows 窗体设计器支持所必需的

              //

              InitializeComponent();

 

              //

              // TODO: 在 InitializeComponent 调用后添加任何构造函数代码

              //

         }

 

         /// <summary>

         /// 清理所有正在使用的资源。

         /// </summary>

          protected override void Dispose( bool disposing )

         {

              if( disposing )

              {

                   if (components != null)

                   {

                        components.Dispose();

                   }

              }

              base.Dispose( disposing );

         }

 

          #region Windows Form Designer generated code

          /// <summary>

         /// 设计器支持所需的方法 - 不要使用代码编辑器修改

         /// 此方法的内容。

         /// </summary>

          private void InitializeComponent()

         {

              //

              // Form1

              //

              this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);

              this.BackColor = System.Drawing.SystemColors.WindowText;

              this.ClientSize = new System.Drawing.Size(488, 333);

              this.Name = "Form1";

              this.Text = "美丽的分形";

              this.WindowState = System.Windows.Forms.FormWindowState.Maximized;

 

         }

          #endregion

 

         /// <summary>

         /// 应用程序的主入口点。

         /// </summary>

          [STAThread]

         static void Main()

         {

              Application.Run(new Form1());

         }

         /// <summary>

         /// 重载 OnPaint

         /// </summary>

         /// <param name="e"></param>

          protected override void OnPaint(PaintEventArgs e)

         {

              DrawTree(e);

             

              base.OnPaint(e);

         }

 

         /// <summary>

         /// 绘制分形图形

         /// </summary>

         /// <param name="e"></param>

         /// <param name="number"></param>

          private void DrawTree(PaintEventArgs e)

         {

              Graphics dc= e.Graphics;

 

              int k=0,rand;

              double x=0,y=0;

              double maxX=this.Width,maxY=this.Height;

              double [,]d=new double[4,6];

 

              d[0,0]=0;   d[0,1]=0;    d[0,2]=0;    d[0,3]=0.5; d[0,4]=0;d[0,5]=0;

              d[1,0]=0.42;d[1,1]=-0.42;d[1,2]=0.42; d[1,3]=0.42;d[1,4]=0;d[1,5]=0.2;

              d[2,0]=0.42;d[2,1]=0.42; d[2,2]=-0.42;d[2,3]=0.42;d[2,4]=0;d[2,5]=0.2;

              d[3,0]=0.1; d[3,1]=0;    d[3,2]=0;    d[3,3]=0.1; d[3,4]=0;d[3,5]=0.2;

 

              for(int i=0;i<30001;i++)

              {

                rand=randNum.Next(0,100);

 

                   if(rand<=40)

                       k=1;

                   if(rand>40&&rand<81)

                        k=2;

                   if(rand>=81&&rand<95)

                       k=3;

                   if(rand>=95)

                       k=0;

 

                   x=d[k,0]*x+d[k,1]*y+d[k,4];

                y=d[k,2]*x+d[k,3]*y+d[k,5];

                   if(i>10)

                        dc.DrawEllipse(greenPen,50+(int)Math.Round(maxY/2+3*maxY*x),

                                (int)Math.Round(maxY-3*maxY*y),1,1);

              }

         }        

     }

}

       程序中用到迭代函数系统变换,有关定义,请看以前介绍分形的一个帖子:

         http://www.csdn.net/develop/read_article.asp?id=17613

         后注: 因为看到许多网友都喜欢分形图形,所以赶着又发一帖.有的网友说想看到这些图形后面的算法的详细分析.这需要很大精力,需要一些数学知识.我愿意将来在 "有趣的算法世界"专门谈谈分形的算法,送给大家.现在,如果您喜欢分形了,我就很高兴.更希望您去查查有关资料,自己动动手.另外,一般我每个月要至少发两个帖子,上半个月是"有趣的算法世界"里的,接下来就是分形了.精力有限,请原谅.

阅读全文
0 0

相关文章推荐

img
取 消
img