2024年12月16日 星期一

WEEEK15

 WEEK15

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); 
   }
}
void setup(){
   size(640, 360); 
}
Ball ball = new Ball(100, 200, 20);
void  draw(){
    ball.update();
    ball.display();//呼叫class
}
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); 
   }
}


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.checkCollisoion(ball2) ) fill(#FFAAAA);
  else fill(255);
  ball.update();
  ball.display();
  ball2.update();
  ball2.display();
}


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 checkCollisoion(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); 
   }
}

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.checkCollisoion(ball2) ) fill(#FFAAAA);
  else fill(255);
  ball.update();
  ball.display();
  ball2.update();
  ball2.display();
}

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 checkCollisoion(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 量質、長度的意思
      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 > 640 || x+vx < 0+r) vx = -vx;
    if (y+vy < 0 || y+vy >360-r) vy = -vy;
    x += vx;
    y += vy;
  }
  void display() {
    ellipse(x, y, r+r, r+r);
  }
}


int [][] maze = {
   {1,1,1,1,1,1,1,1,1,1},
   {1,0,0,0,1,0,0,0,1,1},
   {1,1,1,0,1,0,1,0,1,1},
   {1,1,1,0,1,0,1,0,1,1},
   {1,1,1,0,0,0,1,0,1,1},
   {1,1,1,1,0,1,1,0,1,1},
   {1,0,0,0,0,1,1,0,1,1},
   {1,0,1,1,0,1,1,0,1,1},
   {1,0,1,1,0,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 += 1;
      visited[I][J] = ++step;
   }else if(maze[I][J+1]==0){
      J +=1;
      visited[I][J] = ++step;
   }
}

int [][] maze = {
   {1,1,1,1,1,1,1,1,1,1},
   {1,0,0,0,1,0,0,0,1,1},
   {1,1,1,0,1,0,1,0,1,1},
   {1,1,1,0,1,0,1,0,1,1},
   {1,1,1,0,0,0,1,0,1,1},
   {1,1,1,1,0,1,1,0,1,1},
   {1,0,0,0,0,1,1,0,1,1},
   {1,0,1,1,0,1,1,0,1,1},
   {1,0,1,1,0,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);
}



沒有留言:

張貼留言