C#窗体 绘画一棵树
最重要的是理解递归思想,下面是代码:
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#窗体 绘画一棵树相关推荐
- python画一棵树的心理测试_【心理测试】画树测试:一棵树读你的人生
★画树测试:一棵树读你的人生★? 心理导读:你会怎样随笔画一棵大树呢?这棵大树又折射出你怎样的秘密?在房树人心理测验的世界(HTP),树表现个体的精神及性的成熟性,是个体生命成长的历程的象征.你画怎样 ...
- 用父节点表示法表示一棵树
今天学习,把书上的代码自己边对照,边敲了一下. package mytree;import java.util.ArrayList; import java.util.List;/*** 用父节点表示 ...
- 14.相同的树另一棵树的子树检查子树二叉树中的列表(教你们使用相同的套路快速解决这四道题)
一.相同的树 这道题是开胃菜的开始,使用递归进行解决 递归三部曲: 确定递归函数的参数和返回值 因为我们要比较的是两棵树是否相等,所以参数分别是两棵树的根节点,返回值为boolean类型,即两棵树是否 ...
- c语言孩子兄弟法存储一棵树,数据结构(C语言版)---树
1.树:n个结点的有限集,n=0时为空树. 1)特点: (1)有且仅有一个特定的称为根的结点. (2)有若干个互不相交的子树,这些子树本身也是一棵树. (3)树的根结点没有前驱结点,除根结点外的所有结 ...
- 怎样推断一棵树是否是平衡二叉树
推断的思路非常easy.若一棵树是平衡二叉树,它的左右子树都是平衡二叉树,而且左右子树的高度差小于等于1.注意.实现的时候,推断左右子树的平衡性时.能够顺便计算子树高度,不用再另外计算一次.以下是其递 ...
- 用 vue + d3 画一棵树
结果预览 github pages vue 和 d3 的角色 画图可分为两步: 元素坐标计算 数据绑定 坐标计算只需要一些 api,本文使用 d3. 数据绑定既可以借助 d3,也可以使用 vue.d3 ...
- 软路试--就像一棵树活着
余先生说:我们中的每一个,它应该成长就像一棵树.即使是现在,我们什么都不是,但就我希望你有树的种子,即使你是对土壤的一个中间步骤.您还可以吸收土壤中的养分,他们的成长起来.后,遥远的地方,人们就能看到 ...
- 一棵树的生成树有几颗_次小生成树(树剖,生成树)
生成树的概念: 在一个无向图中,设顶点数为\(n\),取其中\(n-1\)条边并使所有点相连,所得到的一棵树即为生成树. 最小生成树: 如果还没有接触过生成树的同学,欢迎戳->最小生成树详解 次 ...
- 一棵树,怎么就平衡了(图解AVL+实现)
什么是AVL树 大家好,我是bigsai,好久不见,甚是想念. 对于树这种数据结构,想必大家也已经不再陌生,我们简单回顾一下. 在树的种类中,通常分成二叉树和多叉树,我们熟悉的二叉树种类有二叉搜索(排 ...
- LeetCode——Same Tree(判断两棵树是否相同)
问题: Given two binary trees, write a function to check if they are equal or not. Two binary trees are ...
最新文章
- 管理系统中的计算机应用信息可靠性,计算机信息处理系统的可靠性研究
- Paging Library使用及原理
- Search Insert Position
- 全球及中国微型风扇行业营销前景及发展趋势建议报告2022-2027年
- 启明云端分享| ESP32-C3智能写字板应用解决方案
- fckeditor2.63 上传图片的一个问题的解决办法
- Acwing 307. 连通图
- java 类 加载 初始化_java中类的初始化和加载
- 第十三章 对文本进行排序、单一和重复操作:sort命令、uniq命令
- premiere安装失败解决办法
- 大数据之-Hadoop源码编译_编译hadoop源码前_需要准备的软件_以及编译步骤---大数据之hadoop工作笔记0045
- 用for打印菱形java_Java 动态打印菱形代码之for循环的使用
- 试用cmd markdown
- c 和java用cfb_一文彻底搞懂Java中的环境变量
- 【ide】myeclipse项目右键没有configure
- 椭圆曲线形式下的Pedersen commitment——vector commitment和polynomial commitment
- vue 在线预览 word ,Excel,pdf,图片 数据流 内网文件流 亲测有效(word 目前支持docx文件以及doc文件(doc需要后端处理))
- Google抢Waze:除了地图还有什么?
- pc端不同分辨率适配
- 天才啊!仅用四个整数编写一个贪吃蛇游戏!
热门文章
- 计算机会说,计算机会有意识吗?你以为就我们才有吗~
- kubuntu我显示服务器,还是不行!kubuntu到底怎么配置IP才能上网啊?[已经解决!]...
- 制作浏览器javascript书签
- 常见分布的数学期望和方差
- 如何获取http://123123123 双斜杠后面的值?
- idea主菜单栏(main menu)消失解决办法,无需重启
- 计算机网络共享文件密码,如何给局域网共享文件夹设置访问密码
- 断背山 - 剧情花絮 - 电影 - 风行
- 日常工作常用的几款小工具
- linux usb 从芯片,新人求教,怎么烧录Linux系统到一个小芯片上?