Is BasePart:ApplyImpulseAtPosition() working as intended?

I am developing a physically accurate raycasting based suspension system for cars. In the process of doing that i have fallen into the need of using a function like “BasePart:ApplyImpulseAtPosition()” but i find it to be incorrect and there is no alternative for it. I am trying to apply an impulse at a position relative to an object causing rotational and linear velocities but this function always maintains the same linear velocity, independant of how far away the impulse is. I do not believe this is correct.

The function applies a regular impulse at the center of mass to create the linear velocity and then also adds the rotational velocity/torque. Isn’t this physically incorrect? I would expect the function to correctly divide the impulse into linear and rotation velocities depending on where it is applied.

The function appears to correctly scale the rotational velocity with where you apply the force but the linear velocity is never changed. I have looked everywhere but i can’t find any other function that matches what i want to do. I believe this should be the correct function but the function is just incorrect.

Is the function working the way it is intended? Is there any other function i should be using?

3 Likes