//week15_01_circle_collision_class_Ball_new_ball_display
void setup(){
size(640,360);
}
Ball ball = new Ball(100,200,20);
void draw(){
ball.display();
}
class Ball{
float 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);
}
}
//week15_02_circle_collision_class_Ball_update
void setup(){
size(640,360);
}
Ball ball = new Ball(100,200,20);
void draw(){
ball.update();//加這行
ball.display();
}
//把class 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 <0 || x+vx >640) vx = -vx;
if(y+vy <0 || y+vy >360) vy = -vy;
x += vx;
y += vy;
}
void display(){
ellipse(x,y,r+r,r+r);
}
}
//week15_03_circle_collision_detection_two_ball
//我們要在這裡,先測試最後的結果
void setup(){
size(640,360);
}
Ball ball = new Ball(100,200,60);
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();
}
//把class 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 <0 || x+vx >640) vx = -vx;
if(y+vy <0 || y+vy >360) vy = -vy;
x += vx;
y += vy;
}
void display(){
ellipse(x,y,r+r,r+r);
}
}
//week15_04_circle_collision_cos_sin_vector_N_N2_M_M2_swap
//我們要在這裡,先測試最後的結果
void setup(){
size(640,360);
}
Ball ball = new Ball(100,200,60);
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();
}
//把class 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){
PVector diff = new PVector(other.x-x,other.y-y);
float len = diff.mag();//maganitude的意思
float a = diff.heading();//向量的方向
//大家熟的cos(a), sin(a)
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 <0 || x+vx >640) vx = -vx;
if(y+vy <0 || y+vy >360) vy = -vy;
x += vx;
y += vy;
}
void display(){
ellipse(x,y,r+r,r+r);
}
}
//week15_05_maze_2D_array_draw
int [][]maze ={
{1,1,1,1,1,1,1,1,1,1},
{1,0,1,0,1,1,1,0,0,1},
{1,0,1,0,0,0,0,0,1,1},
{1,0,1,1,0,1,1,1,1,1},
{1,0,0,0,0,0,0,0,1,1},
{1,1,1,1,1,0,1,0,0,1},
{1,1,0,0,0,0,0,1,0,1},
{1,1,0,1,1,1,0,1,0,1},
{1,0,0,0,0,1,0,1,0,1},
{1,1,1,1,1,1,1,1,1,1},
};
void setup(){
size(400,400);
}
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);
}
}
}
//week15_06_maze_DFS_record int [][]maze ={ {1,1,1,1,1,1,1,1,1,1}, {1,0,1,0,1,1,1,0,0,1}, {1,0,1,0,0,0,0,0,1,1}, {1,0,1,1,0,1,1,1,1,1}, {1,0,0,0,0,0,0,0,1,1}, {1,1,1,1,1,0,1,0,0,1}, {1,1,0,0,0,0,0,1,0,1}, {1,1,0,1,1,1,0,1,0,1}, {1,0,0,0,0,1,0,1,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); }//week15_07_maze_DFS_visited_step_mousePressed_move int [][]maze ={ {1,1,1,1,1,1,1,1,1,1}, {1,0,1,0,1,1,1,0,0,1}, {1,0,1,0,0,0,0,0,1,1}, {1,0,1,1,0,1,1,1,1,1}, {1,0,0,0,0,0,0,0,1,1}, {1,1,1,1,1,0,1,0,0,1}, {1,1,0,0,0,0,0,1,0,1}, {1,1,0,1,1,1,0,1,0,1}, {1,0,0,0,0,1,0,1,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; } }//week15_08_maze_DFS_boolean_true_false int [][]maze ={ {1,1,1,1,1,1,1,1,1,1}, {1,0,1,0,1,1,1,0,0,1}, {1,0,1,0,0,0,0,0,1,1}, {1,0,1,1,0,1,1,0,1,1}, {1,0,0,0,0,1,1,0,1,1}, {1,1,1,1,1,1,0,0,0,1}, {1,1,0,0,0,0,0,1,0,1}, {1,1,0,1,1,1,0,1,0,1}, {1,0,0,0,0,1,0,1,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); } 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); }
沒有留言:
張貼留言