p2s
Version:
A JavaScript 2D physics engine.
84 lines (74 loc) • 2.64 kB
HTML
<html>
<head>
<title>Voronoi demo - p2.js physics engine</title>
<script src="../build/p2.js"></script>
<script src="../build/p2.renderer.js"></script>
<script src="js/rhill-voronoi-core.min.js"></script>
<link href="css/demo.css" rel="stylesheet"/>
<meta name="description" content="">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
</head>
<body>
<script>
// Create demo application
var app = new p2.WebGLRenderer(function(){
// Create the world
var world = new p2.World({
gravity : [0,-5]
});
this.setWorld(world);
var voronoi = new Voronoi();
var bbox = {
xl: -2, // left
xr: 2, // right
yt: -2, // top
yb: 2 // bottom
};
var sites = [];
for(var i=0; i<50; i++){ // generate points within the bbox
var site = {
x: bbox.xl + Math.random() * (bbox.xr - bbox.xl),
y: bbox.yb + Math.random() * (bbox.yt - bbox.yb)
};
sites.push(site);
}
var diagram = voronoi.compute(sites, bbox);
for (var i = 0; i < diagram.cells.length; i++) {
var cell = diagram.cells[i];
var vertices = [];
for (var j = 0; j < cell.halfedges.length; j++) {
var edge = cell.halfedges[j].getStartpoint();
vertices.push([
edge.x - cell.site.x,
-(edge.y - cell.site.y)
]);
}
var body = new p2.Body({
position: [cell.site.x + 15, -cell.site.y ],
velocity: [-15, 5],
mass: 1
});
body.addShape(new p2.Convex({
vertices: vertices
}));
world.addBody(body);
}
var planeBody = new p2.Body({
position: [0, -3]
});
planeBody.addShape(new p2.Plane());
world.addBody(planeBody);
var planeBody2 = new p2.Body({
position: [-5, 0],
angle: -Math.PI / 2
});
planeBody2.addShape(new p2.Plane());
world.addBody(planeBody2);
// Start demo
this.frame(0, 0, 12, 12);
});
</script>
</body>
</html>