3

拡張現実アプリケーションを作成しようとしています。コンパス、ジャイロスコープ、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 角度は縦から横への電話の回転を測定します。

機能していないようです。電話を横に回転させると、傾斜が劇的に跳ね上がります。助けてくれる人はいますか?

通常、縦向きのみを考慮する場合は、次のように追加する必要があります。これは、縦向きで機能します。異なる角度を考慮して、これに何らかの係数を掛ける必要があります。

4

1 に答える 1

0

このような問題を解決してから久しぶりですが、ポートレートからランドスケープに移行するだけの場合は、必要に応じて方位角と傾斜角の値を入れ替えることはできませんか?

結局のところ、それらは両方とも同じ方法で計算された単なる角度であり、実際にそれらを異なるのはラベルだけです。angle1それらにラベルを付けてangle2から、電話の向きに基づいて他の計算でどちらか一方を使用する方がよい場合があります。


アップデート:

これをもう一度見てみると、あなたの問題はあなたが間違ったセンサーを使用していることだと思います。ジャイロスコープのデータはラジアン/秒を返し、不要な回転速度の測定値です。

代わりに、 CMAttitudeが提供する姿勢測定を使用する必要があると思います。CMAttitudeクラスは、ロール、ピッチ、ヨーのデータを提供します。これにより、デバイスの物理的な向きを計算できます。このメソッドmultiplyByInverseOfAttitude:は、任意の2つのサンプル間でデバイスの向きを変更できるように見えます。

于 2010-11-30T21:04:48.217 に答える