Hi all!
I'm developing a Peggle-style game and I need to calculate the angular velocity to apply to a ball as a result of bouncing off a wall. My ball has a Rigidbody2D and a CircleCollider2D attached to it, but at some point I need to simulate the trajectory so I set it to kinematic and disable the collider to move it around and resolve the collisions myself using CircleCast2D.
I managed to implement the formulas to resolve the collision and get the resulting linear velocity and position, but I'm still struggling to calculate the angular velocity. I found some formulas and tried them all, but the results I'm getting are nothing close to what Unity sets to the rigidbody if I let the physics engine do its own thing. I followed [this][1] approach, implementing formula number 7 with no luck at all. Values are not even linearly dependent, so I assume it is not a matter of units of measurement.
My setup is as follows:
- A ball with a radius of 0,192 and no physics material in its CircleCollider2D with a Rigidbody2D attached to it (mass = 1, linearDrag = 0, angularDrag = 0, gravityScale = 1).
- A kinematic wall with a physics material (friction = 0.1, bounciness = 0.6).
- Incoming velocity for the collision: (-11,01391, -6,336001).
- Incoming angular velocity of the ball: 0 degress/sec. (it is not rotating at all)
- Collision normal: (1, 0).
- Vector.Angle(normal, incomingVelocity) = 150,0894.
Using this setup, if the ball is moved by the physics engine the resulting Rigidbody.AngularVelocity will be -1323,647 degress/sec. However, my calculations give me a value of 44,78571, that when converted to degrees/sec (the output of the formula is supposed to be in radians/sec) gives a total of 2566,032165.
As you can see, the values are not even close to Unity's output. What am I missing here?
Thanks for your time ;)
[1]: http://www2.physics.umd.edu/~mfuhrer/course/spr02/AJP/AJP00482.pdf
↧