(1) //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_upda void setup() { size(640, 360); } Ball ball=new Ball(100, 200, 20); void draw() { ball.update(); ball.display(); } **Ballclass 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); } }
//week15_03_circle_collision_detection_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(); } **Ballclass 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); } }
//week15_04_circle_collision_cos_sin_vector_N_N2_M_M2_swap void setup() { size(640, 360); } Ball ball=new Ball(100, 100, 60); Ball ball2=new Ball(100, 300, 60); void draw() { background(51); if(ball.checkCollision(ball2))fill(#FFAAAA); else fill(255); ball.update(); ball.display(); ball2.update(); ball2.display(); } **Ballclass Ball { float x, y, r; float vx, vy; Ball(int x0, int y0, int r0) { x=x0; y=y0; r=r0; vx=random(-6, +6); vy=random(-6, +6); } 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(); 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(); N.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(vx, 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||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); } }
//week15_05_maze_2D_array_draw 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,0,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}, }; 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_visited 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,0,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=I; 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_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,0,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=I; 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_ok int [][]maze={ {1,1,1,1,1,1,1,1,1,1}, {1,0,0,0,1,0,0,0,1,1}, {1,1,0,1,1,0,1,0,1,1}, {1,0,0,0,1,0,1,0,1,1}, {1,0,1,1,0,1,1,0,1,1}, {1,0,1,1,0,0,1,0,1,1}, {1,0,0,0,0,1,1,0,1,1}, {1,1,1,1,0,1,1,0,1,1}, {1,0,0,0,0,0,0,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=I; 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){ println(i,j,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); }
沒有留言:
張貼留言