☺HOMEWORK (1)
//week15_01_circle_collision_calss_Ball_new_Ball_display void setup(){ size(640,360); } Ball ball = new Ball(100,200,20); void draw(){ ball.display(); } class Ball{ int x,y,r; Ball(int x0, int y0, int r0){ x = x0; y = y0; r = r0; } void display(){ ellipse(x,y,r+r,r+r); } }
☺HOMEWORK (2) //week15_02_circle_collision_calss_Ball_update
void setup(){
size(640,360);
}
Ball ball = new Ball(100,200,20);
void draw(){
ball.update();
ball.display();
}
//Ball分頁class Ball{
float x,y,r;
float vx,vy;
Ball(int x0, int y0, int r0){
x = x0;
y = y0;
r = r0;
vx = random(-10,+10);
vy = random(-10,+10);
}
void update(){
if(x+vx > 640 || x+vx < 0) vx = -vx;
if(y+vy <0 || y+vy >360) vy = -vy;
x += vx;
y += vy;
}
void display(){
ellipse(x,y,r+r,r+r);
}
}
☺HOMEWORK (3) //week15_03_circle_collision_detecion_two_ball
void setup(){
size(640,360);
}
Ball ball = new Ball(100,200,20);
Ball ball2 = new Ball(300,200,60);
void draw(){
background(51);
if(ball.checkCollision(ball2)) fill(#FFAAAA);
else fill(255);
ball.update();
ball.display();
ball2.update();
ball2.display();
}
//Ball分頁class Ball{ float x,y,r; float vx,vy; Ball(int x0, int y0, int r0){ x = x0; y = y0; r = r0; vx = random(-10,+10); vy = random(-10,+10); } boolean checkCollision(Ball other){ if(dist(x, y, other.x, other.y) < r + other.r) return true; else return false; } void update(){ if(x+vx > 640 || x+vx < 0) vx = -vx; if(y+vy <0 || y+vy >360) vy = -vy; x += vx; y += vy; } void display(){ ellipse(x,y,r+r,r+r); } }
☺HOMEWORK (4) //week15_04_circle_collision_con_sin_vector_N_N2_M_M2_swap
void setup(){
size(640,360);
}
Ball ball = new Ball(100,200,20);
Ball ball2 = new Ball(100,300,60);
void draw(){
background(51);
fill(255,255,0);
ball.update();
ball.display();
fill(255);
ball2.update();
ball2.display();
if(ball.checkCollision(ball2)) fill(#FFAAAA);
else fill(255);
}//Ball 分頁class Ball{ float x,y,r; float vx,vy; Ball(int x0, int y0, int r0){ x = x0; y = y0; r = r0; vx = random(-10,+10); vy = random(-10,+10); } boolean checkCollision(Ball other){ if(dist(x+vx, y+vy, other.x+other.vx, other.y+other.vy) <= r + other.r){ PVector diff = new PVector(other.x-x, other.y-y); float len = diff.mag(); //maganitude 量值、長度的意思 print(len); float a = diff.heading(); //向量的方向,對應某個角度 PVector N = diff.copy().normalize(); N.mult(N.dot(new PVector(vx,vy))); PVector N2 = new PVector(-N.y,N.x).normalize(); N2.mult(N2.dot(new PVector(vx,vy))); PVector M = diff.copy().normalize(); M.mult(M.dot(new PVector(other.vx,other.vy))); PVector M2 = new PVector(-M.y,M.x).normalize(); M2.mult(M2.dot(new PVector(other.vx,other.vy))); PVector newV1 = PVector.add(M,N2); PVector newV2 = PVector.add(N,M2); vx = newV1.x; vy = newV1.y; other.vx = newV2.x; other.vy = newV2.y; return true; }else return false; } void update(){ if(x+vx > 640-4 || x+vx < 0+r) vx = -vx; if(y+vy <0+r || y+vy >360-r) vy = -vy; x += vx; y += vy; } void display(){ ellipse(x,y,r+r,r+r); } }
☺HOMEWORK (5)//week15_05_maze_DFS_record int [][] maze = { {1,1,1,1,1,1,1,1,1,1}, {1,0,0,1,1,0,0,0,1,1}, {1,1,0,1,1,0,1,0,1,1}, {1,1,0,0,1,0,1,0,1,1}, {1,1,1,0,0,0,1,0,1,1}, {1,1,1,1,1,1,1,0,1,1}, {1,1,1,1,1,1,1,0,1,1}, {1,1,1,1,1,1,1,0,1,1}, {1,1,1,1,1,1,1,0,0,1}, {1,1,1,1,1,1,1,1,1,1}, }; int [][] visited = new int[10][10]; int startI = 1, startJ = 1, I = 1, J = 1, step = 1; void setup(){ size(400,400); visited[I][J] = step; } void draw(){ for(int i=0;i<maze.length;i++){ for(int j=0; j<maze[0].length;j++){ if(maze[i][j]==1) fill(0); else fill(255); rect(j*40,i*40,40,40); } } fill(255,0,0); rect(startJ*40,startI*40,40,40); }
☺HOMEWORK (6) //week15_06_maze_DFS_visited_step_mousePressed_move int [][] maze = { {1,1,1,1,1,1,1,1,1,1}, {1,0,0,1,1,0,0,0,1,1}, {1,1,0,1,1,0,1,0,1,1}, {1,1,0,0,1,0,1,0,1,1}, {1,1,1,0,0,0,1,0,1,1}, {1,1,1,1,1,1,1,0,1,1}, {1,1,1,1,1,1,1,0,1,1}, {1,1,1,1,1,1,1,0,1,1}, {1,1,1,1,1,1,1,0,0,1}, {1,1,1,1,1,1,1,1,1,1}, }; int [][] visited = new int[10][10]; int startI = 1, startJ = 1, I = 1, J = 1, step = 1; void setup(){ size(400,400); visited[I][J] = step; } void draw(){ for(int i=0;i<maze.length;i++){ for(int j=0; j<maze[0].length;j++){ if(maze[i][j]==1) fill(0); else fill(255); rect(j*40,i*40,40,40); } } fill(255,0,0); rect(startJ*40,startI*40,40,40); for(int i=0;i<maze.length;i++){ for(int j=0;j<maze[0].length;j++){ if(visited[i][j]>0){ fill(0,0,255); text(""+visited[i][j],j*40+20,i*40+20); } } } } void mousePressed(){ if(maze[I+1][J]==0){ I = I+1; visited[I][J] = ++step; }else if(maze[I][J+1]==0){ J = J+1; visited[I][J] = ++step; } }
☺HOMEWORK (7) //week15_07_maze_DFS_visited_step_mousePressed_move int [][] maze = { {1,1,1,1,1,1,1,1,1,1}, {1,0,0,1,1,0,0,0,1,1}, {1,1,0,1,1,0,1,0,1,1}, {1,1,0,0,1,0,1,0,1,1}, {1,1,1,0,0,0,1,0,1,1}, {1,1,1,1,1,1,1,0,1,1}, {1,1,1,1,1,1,1,0,1,1}, {1,1,1,1,1,1,1,0,1,1}, {1,1,1,1,1,1,1,0,0,1}, {1,1,1,1,1,1,1,1,1,1}, }; int [][] visited = new int[10][10]; int startI = 1, startJ = 1, I = 1, J = 1, step = 1; void setup(){ size(400,400); visited[I][J] = step; } void draw(){ for(int i=0;i<maze.length;i++){ for(int j=0; j<maze[0].length;j++){ if(maze[i][j]==1) fill(0); else fill(255); rect(j*40,i*40,40,40); } } fill(255,0,0); rect(startJ*40,startI*40,40,40); for(int i=0;i<maze.length;i++){ for(int j=0;j<maze[0].length;j++){ if(visited[i][j]>0){ fill(0,0,255); text(""+visited[i][j],j*40+20,i*40+20); } } } } boolean DFS(int i,int j, int s){ if(i==8 && j==8) return true; //走到目的地 if(maze[i][j]==1) return false; // 擋住不能走 if(visited[i][j]>0) return false; //走過,不要再來 visited[i][j] = s; if(DFS(i+1,j,s+1)) return true; if(DFS(i-1,j,s+1)) return true; if(DFS(i,j+1,s+1)) return true; if(DFS(i,j-1,s+1)) return true; visited[i][j] = 0; return false; } void mousePressed(){ visited[1][1] = 0; DFS(1,1,1); }







沒有留言:
張貼留言