最重要的是理解递归思想,下面是代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace WindowsFormsApp1
{public partial class Form1 : Form{public Form1(){InitializeComponent();this.AutoScaleBaseSize = new Size(6,14);this.ClientSize = new Size(600,400);this.Paint += new PaintEventHandler(Form1_Paint);}static  private Graphics graphics;const double PI = Math.PI;static double th1 = 40 * Math.PI / 180;static double th2 = 30 * Math.PI / 180;static double per1 = 0.6;static double per2 = 0.7;static void Form1_Paint(object sender,PaintEventArgs e){graphics = e.Graphics;drawTree(10, 200, 310, 100, -PI / 2);}static void drawTree(int n,double x0,double y0,double leng, double th){if (n == 0){return;}double x1 = x0 + leng * Math.Cos(th);double y1 = y0 + leng * Math.Sin(th);drawLine(x0,y0,x1,y1,n/2);drawTree(n - 1, x1, y1, per1 * leng, th + th1);drawTree(n-1,x1,y1,per2*leng,th-th2);}static void drawLine(double x0,double y0,double x1,double y1,int width){graphics.DrawLine(new Pen(Color.Blue, width),(int)x0, (int)y0, (int)x1, (int)y1);}}
}

实现画不同的树:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace WindowsFormsApp2
{public partial class Form1 : Form{public Form1(){InitializeComponent();this.AutoScaleBaseSize = new Size(6, 14);this.ClientSize = new Size(600, 400);this.Paint += new PaintEventHandler(this.Form1_Paint);this.Click += new EventHandler(this.Redraw);}private void Form1_Paint(object sender, PaintEventArgs e){graphics = e.Graphics;drawTree(10, 200, 380, 100, -PI / 2);}private void Redraw(object sender, EventArgs e){this.Invalidate();}private Graphics graphics;const double PI = Math.PI;double th1 = 35 * Math.PI / 180;double th2 = 25 * Math.PI / 180;double per1 = 0.6;double per2 = 0.7;Random rnd = new Random();double rand(){return rnd.NextDouble();}void drawTree(int n,double x0, double y0, double leng, double th){if (n == 0) return;double x1 = x0 + leng * Math.Cos(th);double y1 = y0 + leng * Math.Sin(th);drawLine(x0, y0, x1, y1);drawTree(n - 1, x1, y1, per1 * leng * (0.5 + rand()), th + th1 * (0.5 + rand()));drawTree(n - 1, x1, y1, per2 * leng * (0.4 + rand()), th - th2 * (0.5 + rand()));if (rand() > 0.6)drawTree(n - 1, x1, y1, per2 * leng * (0.4 + rand()), th - th2 * (0.5 + rand()));}void drawLine(double x0, double y0, double x1, double y1){graphics.DrawLine(Pens.Blue,(int)x0, (int)y0, (int)x1, (int)y1);}}
}

C#窗体 绘画一棵树相关推荐

  1. python画一棵树的心理测试_【心理测试】画树测试:一棵树读你的人生

    ★画树测试:一棵树读你的人生★? 心理导读:你会怎样随笔画一棵大树呢?这棵大树又折射出你怎样的秘密?在房树人心理测验的世界(HTP),树表现个体的精神及性的成熟性,是个体生命成长的历程的象征.你画怎样 ...

  2. 用父节点表示法表示一棵树

    今天学习,把书上的代码自己边对照,边敲了一下. package mytree;import java.util.ArrayList; import java.util.List;/*** 用父节点表示 ...

  3. 14.相同的树另一棵树的子树检查子树二叉树中的列表(教你们使用相同的套路快速解决这四道题)

    一.相同的树 这道题是开胃菜的开始,使用递归进行解决 递归三部曲: 确定递归函数的参数和返回值 因为我们要比较的是两棵树是否相等,所以参数分别是两棵树的根节点,返回值为boolean类型,即两棵树是否 ...

  4. c语言孩子兄弟法存储一棵树,数据结构(C语言版)---树

    1.树:n个结点的有限集,n=0时为空树. 1)特点: (1)有且仅有一个特定的称为根的结点. (2)有若干个互不相交的子树,这些子树本身也是一棵树. (3)树的根结点没有前驱结点,除根结点外的所有结 ...

  5. 怎样推断一棵树是否是平衡二叉树

    推断的思路非常easy.若一棵树是平衡二叉树,它的左右子树都是平衡二叉树,而且左右子树的高度差小于等于1.注意.实现的时候,推断左右子树的平衡性时.能够顺便计算子树高度,不用再另外计算一次.以下是其递 ...

  6. 用 vue + d3 画一棵树

    结果预览 github pages vue 和 d3 的角色 画图可分为两步: 元素坐标计算 数据绑定 坐标计算只需要一些 api,本文使用 d3. 数据绑定既可以借助 d3,也可以使用 vue.d3 ...

  7. 软路试--就像一棵树活着

    余先生说:我们中的每一个,它应该成长就像一棵树.即使是现在,我们什么都不是,但就我希望你有树的种子,即使你是对土壤的一个中间步骤.您还可以吸收土壤中的养分,他们的成长起来.后,遥远的地方,人们就能看到 ...

  8. 一棵树的生成树有几颗_次小生成树(树剖,生成树)

    生成树的概念: 在一个无向图中,设顶点数为\(n\),取其中\(n-1\)条边并使所有点相连,所得到的一棵树即为生成树. 最小生成树: 如果还没有接触过生成树的同学,欢迎戳->最小生成树详解 次 ...

  9. 一棵树,怎么就平衡了(图解AVL+实现)

    什么是AVL树 大家好,我是bigsai,好久不见,甚是想念. 对于树这种数据结构,想必大家也已经不再陌生,我们简单回顾一下. 在树的种类中,通常分成二叉树和多叉树,我们熟悉的二叉树种类有二叉搜索(排 ...

  10. LeetCode——Same Tree(判断两棵树是否相同)

    问题: Given two binary trees, write a function to check if they are equal or not. Two binary trees are ...

最新文章

  1. 管理系统中的计算机应用信息可靠性,计算机信息处理系统的可靠性研究
  2. Paging Library使用及原理
  3. Search Insert Position
  4. 全球及中国微型风扇行业营销前景及发展趋势建议报告2022-2027年
  5. 启明云端分享| ESP32-C3智能写字板应用解决方案
  6. fckeditor2.63 上传图片的一个问题的解决办法
  7. Acwing 307. 连通图
  8. java 类 加载 初始化_java中类的初始化和加载
  9. 第十三章 对文本进行排序、单一和重复操作:sort命令、uniq命令
  10. premiere安装失败解决办法
  11. 大数据之-Hadoop源码编译_编译hadoop源码前_需要准备的软件_以及编译步骤---大数据之hadoop工作笔记0045
  12. 用for打印菱形java_Java 动态打印菱形代码之for循环的使用
  13. 试用cmd markdown
  14. c 和java用cfb_一文彻底搞懂Java中的环境变量
  15. 【ide】myeclipse项目右键没有configure
  16. 椭圆曲线形式下的Pedersen commitment——vector commitment和polynomial commitment
  17. vue 在线预览 word ,Excel,pdf,图片 数据流 内网文件流 亲测有效(word 目前支持docx文件以及doc文件(doc需要后端处理))
  18. Google抢Waze:除了地图还有什么?
  19. pc端不同分辨率适配
  20. 天才啊!仅用四个整数编写一个贪吃蛇游戏!

热门文章

  1. 计算机会说,计算机会有意识吗?你以为就我们才有吗~
  2. kubuntu我显示服务器,还是不行!kubuntu到底怎么配置IP才能上网啊?[已经解决!]...
  3. 制作浏览器javascript书签
  4. 常见分布的数学期望和方差
  5. 如何获取http://123123123 双斜杠后面的值?
  6. idea主菜单栏(main menu)消失解决办法,无需重启
  7. 计算机网络共享文件密码,如何给局域网共享文件夹设置访问密码
  8. 断背山 - 剧情花絮 - 电影 - 风行
  9. 日常工作常用的几款小工具
  10. linux usb 从芯片,新人求教,怎么烧录Linux系统到一个小芯片上?