0

私は iOS アプリに取り組んでおり、矢印のグラフィックを持つ UIImageView を回転させようとしています。私は自分の部屋の位置を CGPoint として持っており、別の CGPoint に到達するために向かわなければならない方向を示したいと考えています。2 点間の角度を生成し、矢印が正しい方向を向いていることを確認するにはどうすればよいですか?また、UIImageView を回転させる最良の方法は何ですか?

- (CGFloat) pointPairToBearingDegrees:(CGPoint)startingPoint secondPoint:(CGPoint) endingPoint
{
    CGPoint originPoint = CGPointMake(endingPoint.x - startingPoint.x, endingPoint.y - startingPoint.y); // get origin point to origin by subtracting end from start
    float bearingRadians = atan2f(originPoint.y, originPoint.x); // get bearing in radians
    float bearingDegrees = bearingRadians * (180.0 / M_PI); // convert to degrees
    bearingDegrees = (bearingDegrees > 0.0 ? bearingDegrees : (360.0 + bearingDegrees)); // correct discontinuity
    return bearingDegrees;
}

    CGAffineTransform transform = CGAffineTransformMakeRotation([self pointPairToBearingDegrees:yourLocation secondPoint:CGPointMake(0, 0)]);
    self.arrow.transform = transform;

問題は、自分の位置 (yourLocation.x,yourLocation.y) から原点 (0,0) を指すのではなく、矢印が激しくジャンプすることです。

4

1 に答える 1

1

2 つのデバイス (1 つは送信用、もう 1 つは受信用) が必要なように思えますが、受信デバイスにはブロードキャスト デバイスへのコンパスが必要です。これはかなりきれいに聞こえます。

ブロードキャスト デバイスの経度と緯度を、メジャー キーとマイナー キーを介して文字列としてブロードキャストします。

これで、経度と緯度のブロードキャスト デバイスと受信デバイスの 2 つのポイントが得られます。受信装置にはコンパスも付いています。

ここでコードを使用できるようになりました:ポイントする方向を決定するために コンパスを使用して場所をポイントします。

これが機能するためには、Bluetooth が両方のデバイスでオンになっている必要があり、両方のデバイスでアプリが開いている必要があることに注意してください。ブロードキャスト デバイスでも同様です。

編集

ランダムなポイントは、基本的に送信している別のデバイスであると想定しています。信号がどこから来ているかを感知したいだけだと思いますが、デバイスが知る方法はありません。Bluetooth は電波 (つまり光) に基づいており、ソースがどの方向から来ているかを知る方法はありません。これを機能させるには、2 つの情報が必要です。各デバイスからの位置と、デバイスの方向を示す基準点です。

  1. 受信デバイスが常に北を向いていると仮定した場合、デバイス間の距離と方向を示す各デバイスからの空間内の位置
  2. 多くの場合、ユーザーは iPhone を使用するときに北を向いていないため、デバイスのコンパスを使用して、デバイス上で指している矢印の画像の向きを決める方法を見つける必要があります。

位置を特定するには GPS を使用できますが、部屋の位置について話している場合は、できるだけ正確である必要があります。そして、上記のリンクを使用して向きを決定できます。

屋内測位 SDK があることに注意してくださいiOS には Core Location を使用した屋内測位 - 正確ではありませんか? しかし、期待するほど正確ではないようです。

于 2015-01-22T20:12:47.203 に答える