Ваше представление эквивалентно кватерниону вращения , при условии, что ваши векторы вращения имеют единичную длину.Если вы не хотите использовать какую-либо структуру данных постоянного кватерниона, вы должны просто убедиться, что ваши векторы вращения имеют единичную длину, а затем обработать эквивалентные умножения кватернионов / обратные вычисления , чтобы определитьсовокупное вращение.Возможно, вам удастся уменьшить количество умножений или сложений.
Если ваш угол - единственное, что меняется (то есть ось вращения постоянна), тогда вы можете просто использовать линейное масштабирование углаи, если хотите, измените его на диапазон [0, 2π).Итак, если у вас есть скорость вращения α raidans в секунду, начиная с начального угла θ 0 в момент времени t 0 , то конечный угол поворота в момент времени t определяется как:
θ (t) = θ 0 + α (tt 0 ) мод 2π
Затем вы просто применяете это вращение к своей коллекциивекторы.
Если ничего из этого не улучшит вашу производительность, вам следует рассмотреть возможность использования библиотеки стандартных кватернионов, поскольку такие вещи уже оптимизированы для приложений, которые вы обсуждаете.