两个球,相同体积(直径50米)、质量、速度、性质(刚性),忽略其他引力、磨擦力,碰撞后的运动方向。
好像碰向有很多种形式吧?好像是正面碰撞,V型碰撞,T型碰撞等等,请给出一个算法给我看看,谢谢。

解决方案 »

  1.   

    球体碰撞不需要考虑那么多的,只要计算它们的球心距离是否小于半径之和即可,下面是关于球体碰撞的代码,会计算是否碰撞、碰撞点、碰撞法线、穿透深度。
    { TSphereSphereContact }constructor TSphereSphereContact.Create(ASphere1, ASphere2: TSphereShape);
    begin
      inherited Create;
      FSphere1 := ASphere1;
      FSphere2 := ASphere2;
    end;function TSphereSphereContact.Generate(ACacheInfo: TObject): Boolean;
    var
      detail, vertex: TVector3;
      sumRadius: Single;
    begin
      Result := False;
      detail := FSphere1.WorldFrame.Position - FSphere2.WorldFrame.Position;
      sumRadius := FSphere1.Radius + FSphere2.Radius;
      if detail.LengthSq > Sqr(sumRadius) then
        Exit;  FPenetration := sumRadius - detail.Length;  FNormal := detail;
      FNormal.Normalize;  vertex := FSphere2.WorldFrame.Position + FNormal * (FSphere2.Radius - FPenetration * 0.5);
      AddContactPoint(vertex);
      Result := True;
    end;
      

  2.   

    刚性球的意思是说动能守恒,没有外力所以动量守恒球碰撞的时刻,就是两球球心距离正好等于二倍半径的时刻。此时碰撞发生的方向为两球球心连线的方向上。把两球的速度都按和球心连线平行及垂直的方向分解,碰撞只发生在平行于球心连线的方向,垂直球心连线的速度在碰撞过程中不变。好了 现在问题已经简化到高中教科书上的两球碰撞了
    假设两球质量分别为 m1 m2,两球速度(实际是平行球心连线方向的分速度)分别为v1 v2,设碰撞后的速度为v1',v2'解着个方程组  即可m1 * v1 + m2 * v2 = m1 * v1' + m2 * v2'
    0.5 * m1 * v1 * v1 + 0.5 * m2 * v2 * v2 = 0.5 * m1 * v1' * v1' + 0.5 * m2 * v2' * v2' 碰撞结束后记得把新的速度和垂直于球心连线方向的速度合并
      

  3.   

    先找数学模型,在IEEE 或 ACM 上面会有吧
      

  4.   

    1、动量守恒推论:质量相等的两个球正碰,彼此交换速度;
    2、平面笛卡尔坐标,任意方向运动的速度矢量都可以分解到x、y轴向的两个速度分量Vx、Vy;
    3、根据以上原理,任意两球碰撞都可以分解为X轴正碰(无论相向还是追击)、Y轴正碰;
    4、交换两球的Vx、Vy以后,再合并向量即可;设计算法的时候,用结构体或对象(Vx,Vy) 表示球体的速度矢量,按照上面的方法计算。
      

  5.   

    1.在碰撞方向,等质量的两个球,速度分量交换;
    2.垂直于碰撞方向,速度分量各自保持不变;假设在笛卡尔直角坐标系中,在x方向发生碰撞:
    碰撞前:
    (Vx1,Vy1) 。。(Vx2,Vy2)
    碰撞后:
    (Vx2,Vy1) 。。(Vx1,Vy2)注解:碰撞方向是垂直于瞬间接触球面切线方向。
      

  6.   

    你物理学的真够次的。当然守恒了。只不过这里的冲量,是矢量,速度也是矢量。位置等因数都是三维立体坐标系(x,y,z)。从矢量的角度来做。我都给你写的那么清晰了。冲量和守恒,两球在球心连线方向上的冲量分量投影发生了一个无损失交换。通过能量、冲量守恒方程,能够求出冲量变化量来,分别除以两个球的质量,就求出了速度变化量(也是两个矢量),不就出来了吗。
      

  7.   

    看下那个DELPHI算法这本书,然后再参考下其他语言的算法,再用DELPHI写代码