使用p5.js库中的createVector()、dist()、mag()和normalize()函数计算碰撞后的速度方向和大小。
示例代码如下:
let circle1, circle2;
function setup() {
createCanvas(400, 400);
circle1 = new Circle(100, 100, 30);
circle2 = new Circle(200, 200, 50);
}
function draw() {
background(220);
circle1.update();
circle2.update();
if (circle1.collide(circle2)) {
circle1.handleCollision(circle2);
}
circle1.display();
circle2.display();
}
class Circle {
constructor(x, y, r) {
this.pos = createVector(x, y);
this.vel = createVector(3, 1);
this.r = r;
this.color = color(random(255), random(255), random(255));
}
update() {
this.pos.add(this.vel);
if (this.pos.x <= this.r || this.pos.x >= width - this.r) {
this.vel.x *= -1;
}
if (this.pos.y <= this.r || this.pos.y >= height - this.r) {
this.vel.y *= -1;
}
}
display() {
noStroke();
fill(this.color);
ellipse(this.pos.x, this.pos.y, this.r * 2);
}
collide(other) {
let distance = dist(this.pos.x, this.pos.y, other.pos.x, other.pos.y);
return distance <= this.r + other.r;
}
handleCollision(other) {
let direction = createVector(other.pos.x - this.pos.x, other.pos.y - this.pos.y);
let magnitude = direction.mag();
direction.normalize();
let speed = (this.vel.mag() + other.vel.mag()) / 2;
this.vel = direction.copy().mult(speed);
other.vel = direction.copy().mult(-speed);
}
}
在这个示例中,我们定义了Circle类,该类具有update()、display()、collide()和handleCollision()等方法。我们在setup()函数中创建了两个Circle对象,并在draw()函数中更新和显示它们。当两个圆形发生碰撞时,我们使用handleCollision()方法计算它们碰撞后的速度方向和大小,然后分别将新的速度分配给两个圆形的vel属性。
使用p5.js库中的函数,我们可以轻松地解决不同大小圆形的