从星期六开班之后,我就正式成为蓝杰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;
打印的图形: