2024年12月16日 星期一

我好想回家

 //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{
  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,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{
  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,200,60);
Ball ball2 = new Ball(300,200,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);
}
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();
      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)));
      
      println(N.mag());
      
      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.x;
      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_DFS
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,1,0,1,1,0,1,1},
  {1,0,0,1,1,0,0,0,1,1},
  {1,0,0,0,0,1,1,0,1,1},
  {1,0,1,1,1,1,1,0,1,1},
  {1,0,0,0,0,0,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.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,1,0,1,1,0,1,1},
  {1,0,0,1,1,0,0,0,1,1},
  {1,0,0,0,0,1,1,0,1,1},
  {1,0,1,1,1,1,1,0,1,1},
  {1,0,0,0,0,0,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.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,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,1,0,1,1,0,1,1},
  {1,0,0,1,1,0,0,0,1,1},
  {1,0,0,0,0,1,1,0,1,1},
  {1,0,1,1,1,1,1,0,1,1},
  {1,0,0,0,0,0,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;
  }
}

//week15_08_maze_DFS_boolean
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,1,0,1,1,0,1,1},
  {1,0,0,1,1,0,0,0,1,1},
  {1,0,0,0,0,1,1,0,1,1},
  {1,0,1,1,1,1,1,0,1,1},
  {1,0,0,0,0,0,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);
}





沒有留言:

張貼留言