2014-02-23 106 views
0

所以,我的问题是,一旦形状获得大量的角动量(任何视觉上明显的),那么碰撞不再起作用。它会相互碰撞,放慢速度,但不会像弹性要求那样反弹,也不会一次冲动,而是逐渐放慢速度,直到停滞。角速度和计算问题

public Vec2 getVelocityAt(Vec2 p) { 
    return getLinearVelocity().add(new Vec2(-getAngularVelocity() * p.getY(), getAngularVelocity() * p.getX())); 
} 

我相当肯定的问题,直接关系到上面的代码,我在这里以下的公式:http://www.myphysicslab.com/collision.html

public boolean checkBounds() { 
    if(bX1 == bX2 || bY1 == bY2) { 
     return false; 
    } 
    double xa = 0D; 
    double ya = 0D; 
    int a = 0; 
    boolean hC = false; 
    double xn = 0D; 
    double yn = 0D; 
    for(double[] vertex : this.getShape().getVerticies()) { 
     if(vertex[0] >= bX2) { 
      xa += vertex[0]; 
      ya += vertex[1]; 
      a++; 
      hC = true; 
      xn -= 1D; 
     } 
     if(vertex[0] <= bX1) { 
      xa += vertex[0]; 
      ya += vertex[1]; 
      a++; 
      hC = true; 
      xn += 1D; 
     } 
     if(vertex[1] >= bY2) { 
      xa += vertex[0]; 
      ya += vertex[1]; 
      a++; 
      hC = true; 
      yn -= 1D; 
     } 
     if(vertex[1] <= bY1) { 
      xa += vertex[0]; 
      ya += vertex[1]; 
      a++; 
      hC = true; 
      yn += 1D; 
     } 
    } 
    if(hC) { 
     Vec2 n = new Vec2(xn, yn).uscale(); 
     Vec2 cp = new Vec2(xa/a, ya/a); 
     Vec2 rap = cp.sub(getShape().getCM()); 
     Vec2 va = getVelocityAt(rap); 
     Vec2 rva = va; 
     Vec2 rvb = Vec2.ZERO_VEC.sub(va); 
     double pj = -(1D + getElasticity()) * rva.dot(n); 
     double j = pj/(1/getShape().getMass() + Math.pow(rap.cross(n), 2D)/getShape().getMass()); 
     applyForce(new AppliedForce(n.scale(j), rap, getShape().getMass())); 
    } 
    return hC; 
} 

public void applyForce(AppliedForce... f) { 
    for(AppliedForce vec : f) { 
     Vec2 a = vec.getForce().divide(getShape().getMass()); 
     applyLinearAcceleration(a); 
     double aa = a.relativeCosine(getShape().getTangent(vec.getOffsetCM())) * a.getMagnitude()/getShape().getMass(); 
     applyAngularAcceleration(aa); 
    } 
} 

如果没有角速度,则不会发生问题,并且由更高的角速度发音。我认为点功能的速度是问题的根源,但不知道为什么。我已经完成了调试,没有发现太多,我认为这是对数学的误解。有谁知道我做错了什么?

回答

1

我在节寻找一个公式物理碰撞在2种尺寸页刚体您链接到:

vap1 = va1 + ωa1 × rap 

其中说唱向量从重心至体上到点p, a,如果这是你正在使用的那么rap不是在p的切线,而是你想要你的t = (p in world) - (CM in world)

+0

但我的角速度是一个双重的,而不是一个向量。它是一个独立的组件。我如何设置它应该是一个交叉产品,或者我想。我需要根据角速度计算相对于质量中心的线速度吗? – user2507230

+0

对不起,我的错误自从我做了一个交叉产品以来已经太长了:}有意义,因为你在2D中,所以角速度是z轴,规范等于角速度。我只是更仔细地看待,你做的方式很好,所以问题在别处。我已经开始了。 – Schollii

+0

va1是线速度,我在包含在add语句中的代码中穿越wa1和rap1。我认为我是在为说唱的错误顺序减去。编辑:哦。我是个白痴,谢谢。 – user2507230