分形小试

    从星期六开班之后,我就正式成为蓝杰1024组成员,在这个组有我们两个可爱的同班同学,还有许多来自邻校的同学们,意外的是在开班的自我介绍的过程中我找到了一个老乡,哈哈哈。我们交流甚欢,还交流各自的学习与生活状况,最近虽然很忙碌,但是有各位的相伴,过程还是相当快乐的,我也坚信自己的选择是正确的。
    这几次给我们上课的是胡zong,但是他叫我们喊他胡哥,虽然跟小龟他们叫的不一样有点不太自然,但是慢慢的就会习惯的。胡哥的上课方式我很喜欢啊,有种很清醒的感觉,不像是被牵着走的,而自己才是真正的主人。
    这几天学的是分形基础,跟我们班两个活宝搭档的感觉不错,代同学代码基础是相当了得,哈哈,他敲代码出结果那是相当快的,我会好好学习,努力赶上他的,哈哈。曹芳同学是活宝,一直都是啊,以后也要更加努力了,为了那天开会时自己说的生活。
一、
    1.第一次,我们打出了一个包含好多三角形的图形,出结果很快,贴代码:

import java.awt.Graphics;

import javax.swing.JFrame;

public class DrawTes {
	//定义一个init方法
	public void init(){
		JFrame jf=new JFrame();
		jf.setSize(600,600);
		jf.setLocationRelativeTo(null);
		jf.setVisible(true);
		
		Graphics g=jf.getGraphics();
		//实例化一个事件处理对象
		MouTest mt=new MouTest(g);
		//将事件处理对象加入到窗体中
		jf.addMouseListener(mt);
	}
	
	public static void main(String[] args) {
		//实例化一个JFrame窗口
		DrawTes dr=new DrawTes();
		dr.init();
	}

}

import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Random;

public class MouTest implements MouseListener{
	Graphics g;
	
	public MouTest(Graphics g){
		this.g=g;
	}
	public void mouseClicked(MouseEvent e) {
		
		
		
	}

	public void mousePressed(MouseEvent e) {
		
	}

	public void mouseReleased(MouseEvent e) {
		int x1,y1,x2,y2,x3,y3,x4,y4,t;
		Random ran=new Random();
		
		x1=ran.nextInt(500);y1=ran.nextInt(500);
		x2=ran.nextInt(500);y2=ran.nextInt(500);
		x3=ran.nextInt(500);y3=ran.nextInt(500);
		x4=ran.nextInt(500);y4=ran.nextInt(500);//p
		g.drawLine(x1, y1, x1, y1);
		g.drawLine(x2, y2, x2, y2);
		g.drawLine(x3, y3, x3, y3);
		g.drawLine(x4, y4, x4, y4);
	    for(int i=0;i<1000;i++){
	    	t=ran.nextInt(3)+1;
	    	if(t==1){
	    		g.drawLine((x1+x4)/2, (y1+y4)/2, (x1+x4)/2, (y1+y4)/2);
	    		x4=(x1+x4)/2;y4=(y1+y4)/2;
	    	}
	    	if(t==2){
	    		g.drawLine((x2+x4)/2, (y2+y4)/2, (x2+x4)/2, (y2+y4)/2);
	    		x4=(x2+x4)/2;y4=(y2+y4)/2;
	    	}
	    	if(t==3){
	    		g.drawLine((x3+x4)/2, (y3+y4)/2, (x3+x4)/2, (y3+y4)/2);
	    		x4=(x3+x4)/2;y4=(y3+y4)/2;
	    	}
	    	
	    }
		
		
	}
	public void mouseEntered(MouseEvent e) {
		
	}

	public void mouseExited(MouseEvent e) {
	}

}



这之中只要学到的是随机数的应用,
实例化一个Random对象
Random ran=new Random();
调用nextInt()方法
int t=ran.nextInt(3);//随机从0,1,2中返回一个整数给t

2.其中胡哥给我们复习了一下添加监听器的方法
在窗体JFrame对象中必须得到一个画布对象才能在窗体中画图
Graphics g=jf.getGraphics();
实例化一个监听器对象,将画布传到监听器类中,同时给事件添加一个监听器方法
代码:
                Graphics g=jf.getGraphics();
//实例化一个事件处理对象
MouTest mt=new MouTest(g);
//将事件处理对象加入到窗体中
jf.addMouseListener(mt);

从中想到胡哥今天给我们讲的传参的问题
(1)直接传递属性 public修饰符
(2)构造器传参  对于一个对象只能调用一次,也就是在实例化的该对象时
(3)一般函数传参 对于一个对象可以调用多次
打印得到的图形


分形小试


二、
之后打印很多有趣的图形,之前跟小代子合作弄出了好多错误,发现自己还是很多地方很是粗心啊

贴代码:
package cn0324;

import java.awt.Graphics;

import javax.swing.JFrame;

public class DrawT {
		public void init(){
			JFrame jf=new JFrame();
			jf.setSize(1000, 1000);
			jf.setLocationRelativeTo(null);
			jf.setDefaultCloseOperation(3);
			jf.setVisible(true);
			
			Graphics g=jf.getGraphics();
			
			Mout mou=new Mout(g);
			jf.addMouseListener(mou);
		}
		
		public static void main(String args[]){
			DrawT dr=new DrawT();
			dr.init();
			
		}
		
}
package cn0324;

import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

public class Mout implements MouseListener {
	private Graphics g;
	public Mout(Graphics g){
		this.g=g;
	}

	public void mouseClicked(MouseEvent e) {
//		double a=1.5f,b=-1.8f,c=1.6f,d=0.9f;
//		double x=0,y=0;
//		int x1=0,y1=0;
//		for(int i=0;i<1000000;i++){
//			g.drawLine(x1, y1, x1, y1);
//			
//			x=Math.sin(a*y)+c*(Math.cos(a*x));
//			y=Math.sin(b*x)+d*(Math.cos(b*y));
//			x1=(int)Math.abs((x*100))+300;
//			y1=(int)Math.abs((y*100))+300;
//			System.out.println("x1 = "+x1+"y1 ="+y1);
//			
//		}
	}

	public void mousePressed(MouseEvent e) {
		
	}

	public void mouseReleased(MouseEvent e) {
		draw3();
	}
 public void draw1(){
		double a=1.5f,b=-1.8f,c=1.6f,d=0.9f;
		double x=0,y=0,x2;
		int x1=0,y1=0;
		for(int i=0;i<100000;i++){
			g.drawLine(x1, y1, x1, y1);
			x2=x;
			x=Math.sin(a*y)+c*(Math.cos(a*x));
			y=Math.sin(b*x2)+d*(Math.cos(b*y));
			x1=(int)(x*100)+300;
			y1=(int)(y*100)+300;
			//System.out.println("x1 = "+x1+"y1 ="+y1);
			
		}
 }
 public void draw2(){
		double a=1.7f,b=1.7f,c=0.06f,d=1.2f;
		double x=0,y=0,x2;
		int x1=0,y1=0;
		for(int i=0;i<100000;i++){
			g.drawLine(x1, y1, x1, y1);
			x2=x;
			x=Math.sin(a*y)+c*(Math.cos(a*x));
			y=Math.sin(b*x2)+d*(Math.cos(b*y));
			x1=(int)(x*100)+300;
			y1=(int)(y*100)+300;
			//System.out.println("x1 = "+x1+"y1 ="+y1);
			
		}
}
 public void draw3(){
		double a=1.4f,b=1.5f,c=1.40f,d=-6.56f;
		double x=0,y=0,x2,y2;
		int x1=0,y1=0;
		for(int i=0;i<100000;i++){
			g.drawLine(x1, y1, x1, y1);
			x2=x;
			y2=y;
			x=d*(Math.sin(a*x2))-(Math.sin(b*y2));
			y=c*(Math.sin(b*x2))+Math.cos(b*y2);
			x1=(int)(x*40)+300;
			y1=(int)(y*40)+300;
			//System.out.println("x1 = "+x1+"y1 ="+y1);
			
		}
}

	public void mouseEntered(MouseEvent e) {
		
	}

	public void mouseExited(MouseEvent e) {
		
	}

}

主要的错误是:
1.那个参与计算的应该是double类型的,而且不应该放大倍数,打印该点时才放大该点的坐标
2.                      x=Math.sin(a*y)+c*(Math.cos(a*x));
y=Math.sin(b*x)+d*(Math.cos(b*y));//错误的原因是x的只改变了之后还代入到y的计算中,坑了自己啊,改成y=Math.sin(b*x2)+d*(Math.cos(b*y));
x1=(int)(x*100)+300;
y1=(int)(y*100)+300;

打印的图形:
分形小试

分形小试

分形小试



你可能感兴趣的:(java)