c#如何实现雪花分形?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
公共部分中类Form1:形式 { 公共Form1 () { InitializeComponent (); } 私人空间Form1_Paint(对象发送方,PaintEventArgs e) { DrawKochSnow (e.Graphics); } 私人空间ZheXian (p1, p2,图形g)//4条基本线段组成的折线 { 点p3=new点(p1。X + (p2。X - p1.X)/3, p1。Y + (p2。Y - p1.Y)/3);//三等分点坐标 点p4=new点(p1。X + (p2。X - p1.X) * 2/3, p1。Y + (p2。Y - p1.Y) * 2/3);//三等分点坐标 点p4XD3=new点(p4。X - p3。X, p4。Y - p3.Y);//p4相对于p3点的坐标//int x=(int) (p4XD3。X * Math.Cos(数学。π/3)——p4XD3。Y * sin(数学。π/3));//int y=(int) (p4XD3。X * sin(数学。π/3)+ p4XD3。Y * Math.Cos(数学。π/3));//注意计算机的屏幕垂直坐标和数学上相反,所以数学上逆时针旋转在计算机上相当于顺时针旋转 int x=(int) Math.Round (p4XD3。X * Math.Cos(数学。π/3)+ p4XD3。Y * sin(数学。π/3)); int y=(int) Math.Round (p4XD3。Y * Math.Cos(数学。π/3)——p4XD3。X * sin(数学。π/3)); 点p5XD3=new点(x, y);//凸起点p5相对于p3点的坐标 点p5=new点(p3。X + X, p3。Y + Y);//p5相对于原点的坐标 钢笔笔=新钢笔(画笔。黑色,1); 两倍长度=Math.Sqrt (Math.Pow (p2。X - p1。X, 2) + Math.Pow (p2。Y - p1。Y, 2))/3;//Console.WriteLine(长度); 如果(长度比;20)//通过最终线段长度可以控制迭代 { ZheXian (p1, p3, g); ZheXian (p3, p5, g); ZheXian (p5, p4, g); ZheXian (p4, p2, g); } 其他的 { g。画直线(笔,p1, p3); g。画直线(钢笔、p3 p5); g。画直线(钢笔、p5 p4); g。画直线(笔,p4, p2); } } 私人空间DrawKochSnow(图形g)//科赫雪花(瑞典人科赫于1904年提出了著名的“雪花”曲线) { int长度=480; 点=new起源点(this.ClientSize。宽/2,this.ClientSize。高度/2); g.FillEllipse(画笔。蓝色,新RectangleF(起源、新大小(10,10)));//计算三角形的顶点让其中心和窗体的中心重合 A=new(起源。X -长度/2,(int)(来源。Y +长度/(2 * Math.Sqrt (3)))); 点B=new(起始点。X (int)(来源。Y -长度/Math.Sqrt (3))); 点C=new(起始点。X +长度/2,(int)(来源。Y +长度/(2 * Math.Sqrt (3)))); ZheXian (A, B, g); ZheXian (B、C、g); ZheXian (C、g); } }
看完上述内容,你们掌握c#如何实现雪花分形的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!