- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在试验优秀的 PhysicsJS 库,尤其是约束和碰撞。我想要实现的是一个可以围绕固定旋转点旋转的多边形。举一个现实世界的例子,想象一下一个宽大的架子被钉在墙上,只有一根长钉子穿过正中心,这样当偏离中心的东西从上面掉到上面时,它可能会旋转半圈或一圈。
这是一个 fiddle 示例:http://jsfiddle.net/2HRGW/41/
和代码:
Physics(function (world) {
var renderer = Physics.renderer('canvas', {
el: 'viewport',
width: 500,
height: 400
});
world.add(renderer);
var nail = Physics.body('circle', {
x: 250,
y: 200,
radius: 5,
mass: 1,
fixed: true
});
world.add(nail);
var shelf = Physics.body('convex-polygon', {
x: 250,
y: 200,
vertices: [{
x: -100,
y: -10
}, {
x: 100,
y: -10
}, {
x: 100,
y: 10
}, {
x: -100,
y: 10
}],
mass: 100,
restitution: 0.5
});
world.add(shelf);
var ball = Physics.body('circle', {
x: 175,
y: 50,
radius: 20,
mass: 10
});
world.add(ball);
world.add(Physics.integrator('verlet', {
drag: 0.003
}));
var verletConstraints = Physics.behavior('verlet-constraints', {
iterations: 2
});
verletConstraints.distanceConstraint(shelf, nail, 1);
world.add(verletConstraints);
world.add(Physics.behavior('constant-acceleration'));
world.add(Physics.behavior('body-collision-detection'));
world.add(Physics.behavior('body-impulse-response'));
world.add(Physics.behavior('sweep-prune'));
world.add(Physics.behavior('verlet-constraints'));
var bounds = Physics.aabb(0, 0, 500, 400);
world.add(Physics.behavior('edge-collision-detection', {
aabb: bounds,
restitution: 0.01
}));
Physics.util.ticker.subscribe(function (time, dt) {
world.step(time);
});
world.render();
Physics.util.ticker.start();
world.subscribe('step', function () {
world.render();
});
});
我为钉子定义了一个固定的圆,为架子定义了一个非固定的多边形,并添加了一个将多边形连接到圆的距离约束。如您所见,有两个问题。首先,架子立即略微下降,直到其顶部边缘与钉子的顶部齐平,而不是保持均匀地围绕钉子放置。其次,当球掉到架子上时,尽管尝试了质量和各种恢复设置,但架子会疯狂地不停地旋转。稍微调整一下位置,有时甚至可以完全脱离飞走。
我以这种方式使用约束是否在正确的轨道上,或者是否有更简单的解决方案?
最佳答案
正如其他用户所提到的,这是 PhysicsJS 当前的限制。正在制定中:
与此同时,为什么不创建自定义管脚约束行为而不是修补库。对于将主体质心固定到目标位置的简单固定约束行为,这非常容易。这是您示例的 jsFiddle,开头定义了自定义引脚约束管理器。
http://jsfiddle.net/wellcaffeinated/2HRGW/50/
// create a behavior to handle pin constraints
Physics.behavior('pin-constraints', function( parent ){
return {
init: function( opts ){
parent.init.call( this, opts );
this.pins = [];
},
add: function( body, targetPos ){
this.pins.push({
body: body,
target: Physics.vector( targetPos )
});
},
behave: function( data ){
var pins = this.pins
,pin
;
for (var i = 0, l = pins.length; i < l; i++){
pin = pins[ i ];
// move body to correct position
pin.body.state.pos.clone( pin.target );
}
}
};
});
关于javascript - PhysicsJS - 如何创建一个在被击中时围绕固定点旋转的物体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20066434/
我有一个 fx1.15 表示法。底层整数值为 63183(寄存器值)。 现在,根据维基百科,完整长度为 15 位。该值不适合里面,对吧? 假设它是一个 fx1.16 值,我如何将它转换为人类可读的值?
我是一名优秀的程序员,十分优秀!