首页 > 编程语言 >C#使用自己写的海龟绘图类绘制递归分型树

C#使用自己写的海龟绘图类绘制递归分型树

时间:2024-08-24 21:06:29浏览次数:6  
标签:helper C# void curPos int 绘图 private 分型 public

  0 paython里有个库,叫turtle,俗称海龟作图。自己看《程序员的数学》时,在递归章节看了用海龟绘图画递归树,我想用C#在winform上用gdi+去实现,我却没有在网上找到有适合C#语言的类似的库,我就自己简单写了一个海龟作图帮助类,实现了上图的图案。代码如下:

 public class TurtleHelper : IDisposable
    {
        private Graphics g;
        private int len = 30;
        private int curDegree = 0;
        public int degree = 15;
        private Point curPos;
        private Pen pen =null;

        private Stack<Point> stPoints;


        public TurtleHelper(Graphics g, Point basePoint)
        {
            this.g = g;
            this.curPos = basePoint;
            pen = Pens.Black;
            stPoints = new Stack<Point>();
           
        }

        public void left()
        {
            this.curDegree += this.degree;
        }

        public void right()
        {
            this.curDegree -= this.degree;
        }

        public void forward()
        {
            stPoints.Push(curPos);
            Point nextPoint = default;
            nextPoint.X =(int) (curPos.X - Math.Sin(curDegree/180.0 * Math.PI) * this.len);
            nextPoint.Y = (int)(curPos.Y - Math.Cos(curDegree / 180.0 * Math.PI) * this.len);
            this.g.DrawLine(pen, curPos, nextPoint);
            curPos = nextPoint;
           
        }
        public void back()
        {
            if(stPoints.Count>0)
            {
                var p = stPoints.Pop();
                curPos = p;
            }
        }

        public void Dispose()
        {
            g.Dispose();
        }


        
    }
View Code 三角函数,度数需要换算成弧度值,以上实现了海龟作图的基本方法,然后在窗体画递归树的代码:
TurtleHelper helper = null;

        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
            helper = new TurtleHelper(e.Graphics, new Point(350, 350));
            drawtree(7);
            helper.Dispose();
        }

        public void drawtree(int n)
        {
            if(n==0||helper==null)
            {
               return;
            }
            else
            {
                helper.left();
                helper.forward();
                drawtree(n - 1);
                helper.back();
                helper.right();
                helper.right();
                helper.forward();
                drawtree(n - 1);
                helper.back();
                helper.left();
            }
        }
View Code

标签:helper,C#,void,curPos,int,绘图,private,分型,public
From: https://www.cnblogs.com/HelloQLQ/p/18378253

相关文章

  • YSP_refs_cn_2020_其他关节炎和适应症外
    rhTNFR-Fc中文文献-2020-其他炎性关节炎及PsO 银屑病关节炎 单臂观察[1][1] 赵丽.益赛普联合甲氨蝶呤治疗银屑病关节炎的疗效观察.中国冶金工业医学杂志,2020;37:605–606.浏览文摘 银屑病 临床+基础 单臂观察[2][2] 柴衡,栗玉珍.益赛普对寻常型银屑......
  • C# .NET CORE 面试题【Mysql篇】
    心之所向,勇往直前!简单归纳Mysql相关面试题正文1. MySql的索引有哪些? a.聚簇索引:主键,索引即数据b.非聚簇索引:索引和数据分开储存,检索到索引后需要回表查询数据  2. MySql的Myisam和Innodb有什么区别? a.Myisam不支持事务......
  • k8s新版本使用container而不是docker
    使用Harbor仓库作为Kubernetes集群私有仓库Harbor仓库信息内网地址:hub.rainsc.comIP地址:192.168.66.100问题背景在许多版本的教程中,会建议在Docker的配置中添加忽略证书的列表。然而,截至2024年8月24日,这些教程支持的Kubernetes版本已经无法直接安装。一方......
  • JUC7-共享模型之工具
    线程池自定义线程池importlombok.extern.slf4j.Slf4j;importorg.springframework.core.log.LogDelegateFactory;importjava.util.ArrayDeque;importjava.util.Deque;importjava.util.HashSet;importjava.util.concurrent.TimeUnit;importjava.util.concurrent......
  • Chain Contestant 题解
    前言题目链接:洛谷;AtCoder。最慢的点才跑\(2\)ms的题解确定不看一看?题意简述给定长度为\(n\)的字符串\(s\),其中\(s_i\in\Omega\),求有多少子序列\(T\)满足任意\(x\in\Omega\),其在\(T\)出现的位置为连续一段,当然,对\(998244353\)取模。\(n\leq10^5\),\(|\Omeg......
  • 【C语言】进程和线程详解
    目录C语言进程和线程详解1.进程和线程的对比2.进程的基本概念2.1进程的定义2.2进程的特点2.3进程的生命周期3.进程管理3.1进程创建3.2进程间通信(IPC)3.2.1管道(Pipe)4.线程的基本概念4.1线程的定义4.2线程的特点5.POSIX线程库5.1引用头文件5.2创建线程......
  • [TCP/IP]四次挥手
    三次握手四次挥手OSI七层模型应用层表示层会话层传输层网络层数据链路层物理层TCP/IP四层模型应用层传输层网络层数据链路层物理层全双工全双工(Full-Duplex)是指在通信中,数据传输能够在两个方向上同时进行,允许双方在同一时间既能发送数据,又能接收数据。这种方式......
  • 使用Cloudflare Worker搭建自己的AI绘画工具
    demo:https://aidraw.foxhank.top0.前言Cloudflare公司推出了workers-ai,可以免费在Cloudflare的全球网络上运行由无服务器GPU提供支持的机器学习模型。WorkersAI可以Cloudflare网络上使用自己的代码运行机器学习模型,也就是说,只要写一个js代码,就可以免费调用cloudfl......
  • maven Tomcat插件安装 运行web项目 (3)
    1.maven工程目录结构main是用来写我们程序test是用来测试java是源程序resource是配置maven项目构建命令2.配置maven创建Maven工程这里的项目名称可以随便取进来后改成自己想要的jdk......
  • Bandicam(班迪录屏)录屏幕,录游戏 软件安装包下载地址及安装教程!
    软件介绍Bandicam(班迪录屏)是一款录屏幕,录游戏,录视频的功能强大的屏幕录像录屏软件,Bandicam可让您录制电脑屏幕上一切活动,音画同步录制。还有摄像头画中画效果,鼠标点击效果,也可以添加水印图片等,录制中可以画图功能,线条,文本,高光等添加注释,令你的视频更酷炫,更生动,不仅保证原文件......