Published
Edited
Apr 27, 2021
1 fork
Insert cell
Insert cell
Insert cell
Insert cell
rapier2d = {
const rapier = await require('https://cdn.jsdelivr.net/npm/@dimforge/rapier2d-compat');
await rapier.init(); // Note that this call needs to be awaited.
return rapier;
}
Insert cell
Insert cell
{
let gravity = new rapier2d.Vector2(0.0, -9.81);
let world = new rapier2d.World(gravity);

while (true) {
yield world.step();
}
}
Insert cell
Insert cell
Insert cell
{
let gravity = new rapier2d.Vector2(0.0, -9.81);
let world = new rapier2d.World(gravity);

// Create a dynamic rigid-body.
// Use "static" for a static rigid-body instead.
let rigidBodyDesc = new rapier2d.RigidBodyDesc(
rapier2d.BodyStatus.Dynamic
).setTranslation(0.0, 1.0);
let rigidBody = world.createRigidBody(rigidBodyDesc);

while (true) {
world.step();
const pos = rigidBody.translation();
yield { x: pos.x, y: pos.y };
}
}
Insert cell
Insert cell
Insert cell
Insert cell
{
let gravity = new rapier2d.Vector2(0.0, -9.81);
let world = new rapier2d.World(gravity);

// Create a dynamic rigid-body.
// Use "static" for a static rigid-body instead.
let rigidBodyDesc = new rapier2d.RigidBodyDesc(
rapier2d.BodyStatus.Dynamic
).setTranslation(0.0, 1.0);
let rigidBody = world.createRigidBody(rigidBodyDesc);

// Create a cuboid collider attached to rigidBody.
let colliderDesc = rapier2d.ColliderDesc.cuboid(0.5, 0.5).setDensity(2.0); // The default density is 1.0.
let collider = world.createCollider(colliderDesc, rigidBody.handle);

while (true) {
world.step();
const pos = rigidBody.translation();
yield { x: pos.x, y: pos.y };
}
}
Insert cell
Insert cell
{
let gravity = new rapier2d.Vector2(0.0, -9.81);
let world = new rapier2d.World(gravity);

// Create the ground
let groundRigidBodyDesc = new rapier2d.RigidBodyDesc(
rapier2d.BodyStatus.Static
);
let groundRigidBody = world.createRigidBody(groundRigidBodyDesc);
let groundColliderDesc = rapier2d.ColliderDesc.cuboid(10.0, 0.1);
world.createCollider(groundColliderDesc, groundRigidBody.handle);

// Create a dynamic rigid-body.
// Use "static" for a static rigid-body instead.
let rigidBodyDesc = new rapier2d.RigidBodyDesc(
rapier2d.BodyStatus.Dynamic
).setTranslation(0.0, 100.0);
let rigidBody = world.createRigidBody(rigidBodyDesc);

// Create a cuboid collider attached to rigidBody.
let colliderDesc = rapier2d.ColliderDesc.cuboid(0.5, 0.5).setDensity(2.0); // The default density is 1.0.
let collider = world.createCollider(colliderDesc, rigidBody.handle);

while (true) {
world.step();
const pos = rigidBody.translation();
yield { x: pos.x, y: pos.y };
}
}
Insert cell
Insert cell
{
let gravity = new rapier2d.Vector2(0.0, -9.81);
let world = new rapier2d.World(gravity);

// Create the ground
let groundRigidBodyDesc = new rapier2d.RigidBodyDesc(
rapier2d.BodyStatus.Static
);
let groundRigidBody = world.createRigidBody(groundRigidBodyDesc);
let groundColliderDesc = rapier2d.ColliderDesc.cuboid(10.0, 0.1);
world.createCollider(groundColliderDesc, groundRigidBody.handle);

// Create a dynamic rigid-body.
// Use "static" for a static rigid-body instead.
let rigidBodyDesc = new rapier2d.RigidBodyDesc(
rapier2d.BodyStatus.Dynamic
).setTranslation(0.0, 1.0);
let rigidBody = world.createRigidBody(rigidBodyDesc);

// Create a cuboid collider attached to rigidBody.
let colliderDesc = rapier2d.ColliderDesc.cuboid(0.5, 0.5).setDensity(2.0); // The default density is 1.0.
let collider = world.createCollider(colliderDesc, rigidBody.handle);

let force = new rapier2d.Vector2(1.0, 2.0);
let impulse = new rapier2d.Vector2(0.1, 0.2);
let torque = 3.0;
let torqueImpulse = 0.3;

rigidBody.applyForce(force, true);
rigidBody.applyImpulse(impulse, true);
rigidBody.applyTorque(torque, true);
rigidBody.applyTorqueImpulse(torqueImpulse, true);
while (true) {
world.step();
const pos = rigidBody.translation();
yield { x: pos.x, y: pos.y };
}
}
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
{
let gravity = new rapier2d.Vector2(0.0, -9.81);
let world = new rapier2d.World(gravity);
let eventQueue = new rapier2d.EventQueue(true);

// Create the ground
let groundRigidBodyDesc = new rapier2d.RigidBodyDesc(
rapier2d.BodyStatus.Static
);
let groundRigidBody = world.createRigidBody(groundRigidBodyDesc);
let groundColliderDesc = rapier2d.ColliderDesc.cuboid(10.0, 0.1);
world.createCollider(groundColliderDesc, groundRigidBody.handle);

// Create a dynamic rigid-body.
// Use "static" for a static rigid-body instead.
let rigidBodyDesc = new rapier2d.RigidBodyDesc(
rapier2d.BodyStatus.Dynamic
).setTranslation(0.0, 10.0);
let rigidBody = world.createRigidBody(rigidBodyDesc);

// Create a cuboid collider attached to rigidBody.
let colliderDesc = rapier2d.ColliderDesc.cuboid(0.5, 0.5).setDensity(2.0); // The default density is 1.0.
let collider = world.createCollider(colliderDesc, rigidBody.handle);

let force = new rapier2d.Vector2(1.0, 2.0);
let impulse = new rapier2d.Vector2(0.1, 0.2);
let torque = 3.0;
let torqueImpulse = 0.3;

rigidBody.applyForce(force, true);
rigidBody.applyImpulse(impulse, true);
rigidBody.applyTorque(torque, true);
rigidBody.applyTorqueImpulse(torqueImpulse, true);

const events = [];
while (true) {
world.step(eventQueue);

eventQueue.drainContactEvents((handle1, handle2, contactStarted) => {
events.push({ type: "contact", handle1, handle2, contactStarted });
});
eventQueue.drainIntersectionEvents((handle1, handle2, intersecting) => {
events.push({ type: "intersection", handle1, handle2, intersecting });
});
yield events;
}
}
Insert cell
import { warn, note } from "@somethingelseentirely/papers"
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more