拡張現実アプリケーションを作成しようとしています。コンパス、ジャイロスコープ、GPS 座標を使用してオーバーレイを作成しています。ユーザーがポートレート モードを終了する場合を除いて、すべてがうまく機能しています。私が理解できない単純な三角問題でなければなりません。
座標が視野内にあるかどうかを判断するには、プログラムの開始時に計算された iPhone の中心点の方位角と傾斜角の値を使用します。方位角は、電話が上を向いているときの左右の動きとして定義され、傾斜は、電話が上を向いているときの上下の動きとして定義されます。次に、更新時にジャイロスコープとコンパスのデータでこの値を更新します。したがって、中心点の傾きと方位角を正しく更新すれば、すべてが機能するはずです。
問題は、iPhone を回転させたときに、その方位角と傾斜角の定義が電話に対して同じままであることです。そのため、電話が横向きであっても、傾斜は電話の上部までとして定義されます。
私が試したのは、次のようなことでした:
self.centerPoint.azimuth = (degToRad(angleX)*cosZ) + (degToRad(angleY)*sinZ);
self.centerPoint.inclination = (degToRad(angleY)*cosZ) + (degToRad(angleX)*sinZ);
ここで、degToRad(x) は度からラジアンに変換されます。cosZ と sinZ はそれぞれジャイロスコープからの z 角度の cos と sin であり、angleX と angleY はジャイロスコープからの x と y の角度です。ジャイロスコープの X 角度は上下角度を測定し、Y 角度は左右を測定し、Z 角度は縦から横への電話の回転を測定します。
機能していないようです。電話を横に回転させると、傾斜が劇的に跳ね上がります。助けてくれる人はいますか?
通常、縦向きのみを考慮する場合は、次のように追加する必要があります。これは、縦向きで機能します。異なる角度を考慮して、これに何らかの係数を掛ける必要があります。