我做了一个简单的程序,模拟一个圆形物体在有重力和碰撞的环境中如何与 roudn 表面一起工作。
我的问题与重力的应用有关:每当一个物体非常接近吸引子,它开始重新获得高度,我认为导致问题的原因是,假设球以非常低的速度接触地面,我的程序应用重力,然后它会接触,反转力并再次将其发送到空中。
我试图在球达到足够低的速度后将其停止,但效果总体上令人不快(它永远不会慢到足以使它看起来不那么慢)
我的猜测是,我不尊重动能 / 势能关系,但我不知道如何使它正确:/
void update(ArrayList<Attracter>a) {
pos.add(acceleration);
println(acceleration.mag());
for (Attracter ar : a)
if (PVector.dist(pos, ar.pos)<ar.size/2+size/2) {
//send the compenetrated body back
float difference=((ar.size/2+size/2)-PVector.dist(pos, ar.pos)+1);
pos.sub(acceleration.copy().normalize().mult(difference));
//calculate the new acceleration
PVector perpendicular= PVector.sub(pos,ar.pos).normalize(); //perpendicolare
float angle=perpendicular.rotate(-PI/2).heading();//angolo dellatangente
perpendicular.rotate(-angle); //normalizzo l'angolo
acceleration.rotate(-angle); //normalizzo l'accellerazione
PVector newAcceleration= PVector.fromAngle(perpendicular.heading()-acceleration.heading());
acceleration=newAcceleration.setMag(acceleration.mag());
acceleration.rotate(angle); //denormalizzo l'accellerazione
//push the body forward
pos.add(acceleration.copy().normalize().mult(difference));
acceleration.mult(0.9);
}
}
删除difference calculation
中的+1
,即尝试替换
float difference=((ar.size/2+size/2)-PVector.dist(pos, ar.pos)+1);
具有
float difference=((ar.size/2+size/2)-PVector.dist(pos, ar.pos));
本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处
评论列表(67条)