Cusa超声外科吸引系统:引力吸引和碰撞(what is gravitational attraction)

我做了一个简单的程序,模拟一个圆形物体在有重力和碰撞的环境中如何与 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); 
        }
  }
0

删除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));

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(871)
Vbscript.dll:如何编译VBScript包含DLL处理程序
上一篇
外星人checkingmedia解决:外星人入侵游戏中的外星人不动
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(67条)