程序实现的图形为:
我想,自然界中没有比树更美丽的了.
树是最坚强的生命之一.我国西部的戈壁上,生命罕至的地方,却能常常看见一片一片的胡杨树林.关于胡杨树,有个美丽的断言,您一定听说过:
她在戈壁中,将是生存而一千年不死,死后一千年不倒,倒后一千年不腐!
树也是最优雅的生命,您来南国来看一看呀,来南国做客;我常常能一动不动的看那棕榈几个小时,看那学校后山上的青松,看东湖岸边的垂柳------
有多少诗言,有多少,是在歌颂她们哦~~~
没有美好,就不会有快乐!
分形将带给您美好,愿分形能让您快乐~~~
我以后还会帖出更多的树,不断重复这个主题,因为我的生命中,树是如此的重要!
程序的代码(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
后注: 因为看到许多网友都喜欢分形图形,所以赶着又发一帖.有的网友说想看到这些图形后面的算法的详细分析.这需要很大精力,需要一些数学知识.我愿意将来在 "有趣的算法世界"专门谈谈分形的算法,送给大家.现在,如果您喜欢分形了,我就很高兴.更希望您去查查有关资料,自己动动手.另外,一般我每个月要至少发两个帖子,上半个月是"有趣的算法世界"里的,接下来就是分形了.精力有限,请原谅.