Я не уверен, какой язык вы ищете, но библиотека C ++ Boost имеет рабочий класс Quaternion ( quaternion.hpp ).Я использовал эту библиотеку, чтобы создать простой класс вращения для вычисления результатов или вращения точек вокруг произвольных векторов без особых затруднений.
ОБНОВЛЕНИЕ: Основываясь на вашем комментарии, я недумаю, что вам обязательно нужно использовать библиотеку кватернионов, чтобы выяснить ваше угловое положение в данный момент времени, учитывая либо постоянную угловую скорость, либо угловое ускорение.Все, что вам нужно сделать, это выяснить, что это за угол, а затем использовать класс кватернионов для вычисления положения векторов при повороте вокруг вектора вращения на угол, который вы вычислили.
При условии постоянного углаускорение α, начальная угловая скорость ω (t 0 ) и начальное угловое положение θ (t 0 ) в диапазоне [0, 2π) углового положения в некоторый момент времени t> t 0 , θ (t) определяется как:
θ(t) = [θ(t<sub>0</sub>) + ω(t<sub>0</sub>)*(t-t<sub>0</sub>) + α*(t-t<sub>0</sub>)<sup>2</sup>/2] mod 2π
Здесь операция mod 2π - это просто остаток при вычитании n2π, где n - целое число, необходимое для обеспечения того, что остаток находится вдиапазон [0, 2π).Для постоянной угловой скорости (то есть α = 0) последний член выпадает.
Тем не менее, все, что вам действительно нужно, это отслеживать угол в течение некоторого интервала времени при постоянном ускорении (или определятьсреднее ускорение за это время, если оно не является постоянным) и обновите угол.Затем вы применяете результирующее вращение вокруг вектора вращения к кватерниону, который вы используете для накопления ваших вращений.Это может быть легко реализовано как класс C ++.
Тем не менее, если вы ищете инструмент с открытым исходным кодом для этого, я ожидаю, что любая из библиотек моделирования игровой физики будет более чем адекватной,Пара открытых источников: Bullet и Open Dynamics Library .