康托尔集_康托尔集的基本概念「建议收藏」

康托尔集_康托尔集的基本概念「建议收藏」本次任务主要是利用递归画出康托尔集。这里我写的方法如下:publicvoidDrawLine(Graphicsgr,doubleix,doubleiy,doublejx,doublejy,MouseEvente){doublemid=1;if((jx-ix)&lt

大家好,欢迎来到IT知识分享网。

本次任务主要是利用递归画出康托尔集。
这里我写的方法如下:
public void DrawLine(Graphics gr,double ix,double iy,double jx,double jy,MouseEvent e){ double mid = 1; if((jx - ix) < mid){ gr.drawLine((int)ix,(int)iy,(int)jx,(int)jy); } else{ double kx = 0f;double ky = 0f; double lx = 0f;double ly = 0f; kx = ix + (jx - ix) / 3; ky = iy + 50; lx = jx - (jx - ix) / 3; ly = jy + 50; iy = iy + 50; jy = jy + 50; DrawLine(gr,ix,iy,kx,ky,e); DrawLine(gr,lx,ly,jx,jy,e); } } //在MouseClicked里面 if(ab.equals("康托尔集")){ if(e.getClickCount() == 1){ DrawLine(gr,100,300,500,300,e); } }
这里,在DrawLine()这个方法的括号里,要添加Grphics gr,不然画线的时候画不了。其次,要添加MouseEvent e(鼠标监听器?),不然的话,接下来调用这个方法的时候会报错(编译器不认识e,不知道这是啥)。
然后既然是递归函数,就必须设置退出的东西,不能让它一直进行下去。所以这个时候我就定义了一个mid = 1.ix,iy和jx,jy分别是一条线段的起始点和终止点的坐标。如果这两个点的横坐标之差小于这个mid,那么就只需要执行gr.drawLine((int)ix,(int)iy,(int)jx,(int)jy);这条语句就可以了(只需要画一条线)。
如果不是的话,那就可以递归了。kx,ky是一条线段下面那两条线段中靠左边的那一条的终止点坐标;lx,ly是一条线段下面那两条线段中靠右边的那一条的起始点坐标。它们的计算方法在上面已经给出。(横坐标就加减三分之一那个东西,纵坐标+50表示两点线段之间的距离是50),而iy和jy都还分别需要+50是因为我画完一条线之后,接下来画的那两条线也需要用到最开始的ix,iy和jx,jy坐标。就是横坐标的值不需要变,但是纵坐标差了50.(这里如果不懂的话,可以自己模拟一遍这个画线的过程。)
关于递归次数的问题:当然这里因为一条线段下面有两条线段,两条线段都需要画,所以我需要在这里(一个方法里)调用两次递归函数。
再次强调:MouseEvent e一定要加!至于怎么加,直接放到写的那个方法后面跟的括号里就行了!不然的话会报错的!康托尔集_康托尔集的基本概念「建议收藏」
康托尔集_康托尔集的基本概念「建议收藏」

康托尔集_康托尔集的基本概念「建议收藏」

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/29610.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信