В моей программе я имею дело с отслеживанием движения устройства с помощью CMMotionManager и использую кватернионное представление положения устройства. Для позиционирования устройства в глобальной системе координат мне нужно выполнить некоторые базовые вычисления с использованием кватерниона. Для этого я хочу написать класс Quaternion со всеми необходимыми функциями. Кто-нибудь знает, что является правильным способом или, может быть, какие-то общие рекомендации, как это должно быть сделано.
Я нашел пример проекта от Apple, в котором классы Quaternion, Vector2 и Vector3 написаны на cpp, но я думаю, что их не очень просто использовать в Какао, так как я не могу определить свойства объекта в заголовке Obj-C файл с использованием этих классов C ++. Или я не прав?
Спасибо.
Возможно, вы вообще не заинтересованы в OpenGL, но как часть GLKit, Apple поставляет GLKQuaternion
. Он имеет интерфейс C, но его легко экстраполировать в класс. Рекомендуется использовать его для непосредственного выражения математики, так как он, вероятно, максимально полно использует математическую векторную единицу.
В качестве альтернативы вы можете объявить использование GLKQuaternion на C ++ и Objective-C напрямую, так как оба надмножества C.
Вы задаете несколько вопросов здесь. Как реализовать класс Quaternion, как использовать их для представления ориентации (отношения), как интегрировать реализацию C ++ с Objective C, как интегрировать все это в Какао. Я отвечу на последний вопрос: действительно ли Какао должно знать, что вы используете под капотом, чтобы представлять отношение?
Существует множество существующих пакетов, которые используют кватернионы для представления ориентации в трехмерном пространстве. Эйген один. Есть много других. Не изобретай велосипед. Есть некоторые ошибки, о которых вам следует помнить, особенно при использовании сторонних пакетов. Увидеть Посмотреть матрицу из Quaternion . Если вы прокрутите вниз и посмотрите на некоторые другие ответы, вы увидите, что два из пакетов, упомянутых другими, зависят от тех проблем, о которых я говорил в своем ответе.
Обратите внимание: я не говорю, не используйте кватернионы. Это было бы довольно лицемерно; Я использую их все время. Они очень хорошо работают как компактное средство представления вращения. Вам просто нужно остерегаться проблем, в основном потому, что слишком много людей, которые используют их / внедряют для них программное обеспечение, не имеют представления о таких проблемах.