本サイトからスピンオフした姉妹サイトです。Motionの座標系の変換やスクリーンについて解説する。バージョン1に基づいた記事です。バージョン2の連載記事に改訂しており、その改訂の際に本稿の内容はカットされました。Motionデバイスで、最新のSDKバージョン2を利用できますので、最新版SDKをご利用ください。Motionを利用してタッチ入力を認識するアプリケーションを作成した。8のタッチ入力として認識させる。Motionの座標系の変換やスクリーンについて解説する。今回のサンプル・コードは前回のコードに加える形になっている。サンプル・コードは次のリンク先で公開している。4.6.3での動作確認を行い、プロジェクト・ファイルを含めてすぐに利用できるようにしてある。Motionが認識しているスクリーン(=ディスプレイ)について知る必要がある。Leap::ControllerクラスにはlocatedScreens()関数(以降、「()」と記述されているものは「関数」を指す)というスクリーン一覧(=Leap::ScreenListオブジェクト)を取得する機能がある。ちなみに、同様の機能を持つ関数としてcalibratedScreens()があるが、これは“Deprecated”(=推奨されない)とされ、「locatedScreens()を利用するように」と記載されている。次のようなコードで、スクリーン情報を表示できる。);スクリーン情報を表示する(main.cpp)このコードを実際に試したい場合は、前回のコードのdraw関数の最後にこれを追記すればよい。Leap::ScreenListクラスは、個別のスクリーン情報を持つLeap::Screenクラスのイテレーターを持ち、これをfor文で回すことで、スクリーン情報を表示できる。上記のコードではlocatedScreens()以外に5つの座標に関する関数が使われている。それぞれの意味を次に示す。Motionコントローラーを中心とした物理的な位置。Motionコントローラーを中心とした物理的な位置。Motionコントローラーを中心とした物理的な位置。Motionで利用されている座標の単位は2つあり、ピクセル単位(以降、px)とミリメートル単位(以降、mm)となる。11インチで上記のコードを動作すると、次のような結果になる。1080」(ピクセル単位)というスクリーン・サイズの値を返している。250mm」となっている。bottomLeftCorner()が返す値には特に注意が必要だ。Motionを中心としてスクリーンの左下の位置を表す。Motionの座標系は右手座標系であり、それぞれの方向は次のようになっている。200mm」の位置ということなる。SDKのAPIドキュメントから引用)さまざまな座標変換ここから本題に入る。Motionから取得できる座標の変換方法は下記の3種類がある。座標の種類は、先に解説した「ピクセル単位」および「ミリメートル単位」のものになる。「ピクセル単位」の座標系に変換する場合は、指をどのように認識するかによって、「(1)(前回紹介した)インタラクション・ボックスを使用した座標変換」と「(2)インターセクション・ポイントの座標変換」のうち、適切な手段を選択する。「ミリメートル単位」の座標系に変換する場合は、「(3)プロジェクション・ポイント」だ。それぞれについて詳しく説明しよう。(1)InteractionBoxオブジェクトを利用した座標変換InteractionBoxオブジェクトを使えば、指の位置をピクセル座標系に変換し、指がスクリーンのどの位置にあるかという値を取得できる。次のコードはその利用例である。Point)の座標変換Leap::Screen::intersect()関数を使えば、指の位置に加えて指の方向を認識されて、指が向いている先のスクリーン・パネルと交差する点の座標(=インターセクション・ポイント)を取得できる。次の図の「A」と「B」はスクリーンと交差している緑色の○がインターセクション・ポイントになる。SDKのAPIドキュメントから引用)ポインターAは、物理スクリーン領域外にあるスクリーン・パネルとのインターセクション。ポインターBは、スクリーンとの直接的なインターセクション。ポインターCは、スクリーン・パネルと交差しない。次のコードは、インターセクション・ポイントの座標変換を行う例だ。「(1)(前回紹介した)インタラクション・ボックスを使用した座標変換」と「(2)インターセクション・ポイントの座標変換」のどちらも、次の図のように左下を原点とする座標となっている。実行して座標を確認してみると、指を正面に向けているときは両方の座標がほぼ同じ位置を差し、指を上下左右に動かしてみると、両方の座標は変化する。インターセクション・ポイントは指先方向を見るため、手の位置を固定しても指の動きだけで座標が大きく変化することが分かるだろう。Point)の座標変換プロジェクション・ポイントでは、次の図に示すように、スクリーン・パネル上に投影された指の点を「ミリメートル単位」の座標に変換する。SDKのAPIドキュメントから引用)ポイントAは、スクリーンに直接、投影されている。ポイントBは、物理スクリーン領域外にあるスクリーン・パネルに投影されている。プロジェクション・ポイントは次のコードのように利用する。Motionからの高さの位置になる。Motionで変換できる座標系および手・指の扱いにはいくつかの種類がある。目的のアプリケーションに最適な動きを採用していただきたい。8を操作するアプリケーションの開発について解説する。機械学習エンジニアを目指す人~初中級者のための技術情報サイトです。「機械学習&AI」「クラウド&ビッグデータ」「IoTデバイス」のネット記事情報を共有中。開発者のためのSlackチーム、作りました:「機械学習&AI」「クラウド&ビッグデータ」「IoTデバイス」のネット記事情報を共有中。2020最適なビューへの切り替えを推奨します:スマートフォン用表示に。