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

分形图形.生命中的树(图,评,代码) (转)[@more@]

 

程序实现的图形为: 

  2003-7-29036430.gif" align=baseline border=0>XML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office:office" />

 

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

 

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

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

 

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

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

 

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

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

 

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

程序的代码(C#)为:

 

using System;

using System.Drawing;

using System.Collections;

using System.ComponentModel;

using System.windows.Forms;

using System.Data;

 

namespace Picture

{

  ///

  /// Form1 的摘要说明。

  ///

  public class Form1 : System.Windows.Forms.Form

  {

  ///

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

  ///

    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 调用后添加任何构造函数代码

  //

  }

 

  ///

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

  ///

    protected override void Dispose( bool disposing )

  {

    if( disposing )

  {

    if (components != null)

    {

      components.Dispose();

    }

  }

    base.Dispose( disposing );

  }

 

    #region Windows FoRM Designer generated code

    ///

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

  /// 此方法的内容。

  ///

    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

 

  ///

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

  ///

    [STAThread]

  static void Main()

  {

    Application.Run(new Form1());

  }

  ///

  /// 重载 OnPaint

  ///

  ///

    protected override void OnPaint(PaintEventArgs e)

  {

    DrawTree(e);

 

    base.OnPaint(e);

  }

 

  ///

  /// 绘制分形图形

  ///

  ///

  ///

    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);

  }

  }   

  }

}

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

  .NET/develop/read_article.ASP?id=17613">http://www.csdn.net/develop/read_article.asp?id=17613

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


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10748419/viewspace-960993/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10748419/viewspace-960993/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值