弹跳球。 使它在高度的峰值减缓 弹跳球。 使它在高度的峰值减缓(Bouncing Ball.

2019-05-12 12:34发布

我已经创造了X3D反弹球动画。 我只是好奇,我怎么可能让球慢下来,在其高度的峰值,使它看起来更逼真。 先感谢您。

<X3D profile="interactive">
    <Scene>
        <Background skyColor='0.5 0.5 1'/>

    <Transform DEF="Ball" translation="0 1 0" >
    <TouchSensor DEF="Touch"/>
            <Shape>
                <Appearance>
                    <Material diffuseColor="1 0 0 "/>
                </Appearance>
                <Sphere radius='1'/>
            </Shape>
        </Transform>

    <TimeTrigger DEF="Trigger"/>
        <TimeSensor DEF="Clock" loop="false" cycleInterval="5" />    
        <PositionInterpolator DEF="Position" key="0.0 0.5 1.0" keyValue="0 1 0 0 5 0 0 1 0"/>

        <ROUTE fromNode="Clock" fromField="fraction_changed" toNode="Position" toField="set_fraction"/> 
        <ROUTE fromNode="Position" fromField="value_changed" toNode="Ball" toField="set_translation"/>
    <ROUTE fromNode="Touch" fromField="isActive" toNode="Trigger" toField="set_boolean"/>
    <ROUTE fromNode="Trigger" fromField="triggerTime" toNode="Clock" toField="startTime"/>

</Scene>

Answer 1:

使用该“真实”物理。

  1. 球有参数

    • 加速度a(ax,ay,az)由它的质量[米/秒^ 2] ...这是推动球的所有力的总和除以
    • 速度v(vx,vy,vz) [米/秒] ...实际速度=集成的加速度v += a * dt
    • 位置p(x,y,z) [M] ...实际位置=速度的集成p += v * dt
    • 半径r [米]
    • 质量m [千克]
    • dt [S] ...迭代步骤(更新时间)

    INIT开始a,v(0,0,0)p开始位置

  2. 应用重力,摩擦力,碰撞

    • 重力例如g(gx=0,gy=-9.81,gz=0)
    • 摩擦f2 = -(|v|^2)*c2 * (v/|v|) ...在气体
    • 摩擦f3 = -(|v|^3)*c3 * (v/|v|) ...在液体

    如果前和跨边界碰撞后位置反映速度*碰撞COEF <= 1通过冲击正常也可以反映的位置,如果越过边界是不可能的。

  3. 把它放在一起在一些计时器/更新代码与dt间隔

     a =g+(f2+f3+(driving force))/m v+=a*dt p+=v*dt test_collisions() redraw() 
  4. 对的位置手动更改

    只需设置p(x,y,z)到新位置,并且还可以设置v=(0,0,0)以阻止球



文章来源: Bouncing Ball. Making it slow down at peak of height