В настоящее время я пишу небольшой кроссплатформенный движок 2D-игр на базе OpenGL для нашей студии. Когда я исследовал, какой класс 2D Vector использовать, я наткнулся на три разные парадигмы дизайна:
Float & Call-by-value, как в этой статье о Гамасутре . Кажется быстрым, но предлагает мало точности (см. Также эту тему ). Pro: быстрый, портативный и совместимый с большинством библиотек.
Double & Call-по ссылке. Если я правильно понял приведенную выше статью, я мог бы также использовать 2 переменные двойной точности вместо 4 чисел с плавающей точкой. Согласно приведенному выше потоку double все еще медленнее, чем float.
Шаблоны для удвоения и поплавка: в широко популярной книге « Архитектура игрового движка » используются шаблоны, позволяющие использовать поплавки и удвоения при необходимости. Очевидным недостатком является раздувание кода. Кроме того, я сомневаюсь, что код может быть оптимизирован без написания двух классов.
Я был бы признателен, чтобы узнать, какие решения вы используете в своих собственных движках и насколько точны, например, популярные игровые движки, чтобы я мог решить, какое решение я буду внедрять в нашем движке. В данный момент я думаю о том, чтобы просто использовать точность с плавающей точкой и жить с ней.