This uses the same logic as in the test_suite/shared_data/frame_order/cam/*/generate_distribution.py
scripts which were used to generate all of the test suite data. However rather than using a random
rotation matrix, a random 3D vector is used to rotate a fixed angle. And the rotation is used to
rotate the current state to state i+1. The rotation for the state is decomposed into torsion-tilt
angles once shifted into the motional eigenframe, the violations checked for as the state shifted to
the boundary, then the new state reconstructed from the corrected torsion-tilt angles, and then it
is shifted from the motional eigenframe to the PDB frame.