私のプログラムでは、CMMotionManagerを使用してデバイスの動きを追跡し、デバイスの姿勢のクォータニオン表現を使用しています。デバイスをグローバル座標系に配置するには、クォータニオンを含むいくつかの基本的な計算を行う必要があります。そのために、必要なすべての関数が実装されたQuaternionクラスを作成したいと思います。誰かが適切な方法、またはそれがどのように行われるべきかについてのいくつかの一般的なガイドラインを知っていますか?cppで記述されたQuaternion、Vector2、Vector3クラスを持つAppleのサンプルプロジェクトを見つけましたが、Obj-Cヘッダーでオブジェクトのプロパティを定義できないため、Cocoaでそれらを使用するのは簡単ではないと思います。これらのc++クラスを使用したファイル。それとも私は間違っていますか?ありがとうございました。
2 に答える
あなたはおそらくOpenGLにまったく興味がないでしょうが、GLKitの一部としてAppleが提供していGLKQuaternion
ます。Cインターフェースを備えていますが、クラスに簡単に外挿できるはずです。数学のベクトル単位を可能な限り完全に使用する可能性があるため、数学を直接表現するよりも使用することをお勧めします。
または、両方ともスーパーセットCであるため、GLKQuaternionのC++およびObjective-Cの使用を直接宣言することもできます。
ここで複数の質問をしています。Quaternionクラスを実装する方法、方向(態度)を表すためにそれらを使用する方法、C++実装をObjectiveCと統合する方法、それらすべてをCocoaに統合する方法。最後に質問で答えます。Cocoaは、態度を表すために内部で何を使用しているのかを本当に知る必要がありますか?
四元数を使用して3次元空間の方向を表す既存のパッケージはたくさんあります。Eigenはその1つです。他にもたくさんあります。車輪の再発明をしないでください。特にサードパーティのパッケージを使用する場合は、注意が必要な落とし穴がいくつかあります。Quaternionからのビューマトリックスを参照してください。下にスクロールして他の回答のいくつかを見ると、他の人が言及した2つのパッケージが、私の回答で話し合った問題の影響を受けていることがわかります。
注意:クォータニオンを使用しないと言っているのではありません。それはかなり偽善的です。いつも使っています。これらは、回転を表すコンパクトな手段として非常にうまく機能します。あなたはただ問題に注意する必要があります、主にそれらを使用する/それらのためにソフトウェアを実装するあまりにも多くの人々がそれらの問題に関して無知であるからです。