2024年12月16日 星期一

w151515151515 weeeeek000015

001.

 void setup() {

  size(640, 360);

}

Ball ball = new Ball(100, 200, 50);

Ball ball2 = new Ball(300, 200, 50);


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 > 360 || y+vy < 0) vy = -vy;

    x += vx;

    y += vy;

 

  }

  void display() {

    ellipse(x, y, r+r, r+r);

  }

}

-----------------------------------------------------------------------------------

002.
void setup() {
  size(640, 360);
}
Ball ball = new Ball(100, 200, 50);
Ball ball2 = new Ball(300, 200, 50);

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) {
      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)));
      
      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) vx = -vx;
    if (y+vy > 360 || y+vy < 0) vy = -vy;
    x += vx;
    y += vy;
  }
  void display() {
    ellipse(x, y, r+r, r+r);
  }
}
---------------------------------------------------------
003.
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, 1, 0, 0, 1, 0, 1, 0, 1, 1},
  {1, 1, 1, 0, 0, 0, 1, 0, 1, 1},
  {1, 0, 1, 1, 0, 1, 1, 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) {
  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[I][J] = 0;
  DFS(1, 1, 1);
}

沒有留言:

張貼留言