Вращение стрелки iBeacon

Я работаю над приложением для iOS и пытаюсь повернуть UIImageView с изображением стрелки. У меня есть свое местоположение в комнате как CGPoint, и я хочу показать направление, в котором вам нужно двигаться, чтобы добраться до другого CGPoint. Как создать угол между двумя точками и убедиться, что стрелка указывает правильное направление, а также как лучше всего повернуть 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;

Проблема в том, что это просто заставляет стрелку дико прыгать вместо того, чтобы указывать на начало координат (0,0) из моей позиции (yourLocation.x, yourLocation.y).


person Adam Hoffman    schedule 22.01.2015    source источник
comment
Если вы не говорите об этом iBeacon en.m.wikipedia.org/wiki/IBeacon , пожалуйста, удалите iBeacon из заголовка темы.   -  person Roecrew    schedule 22.01.2015
comment
Разве это не просто какой-то довольно простой математический вопрос?   -  person Hermann Klecker    schedule 22.01.2015
comment
@Stonz2 Stonz2 Я прикрепил код, с которым работаю, раньше не задавал вопросов и был уверен, как прикрепить код.   -  person Adam Hoffman    schedule 22.01.2015
comment
@HermannKlecker Да, это довольно простой математический вопрос, но я не смог найти хороший ответ в Google, поэтому обратился сюда за помощью.   -  person Adam Hoffman    schedule 22.01.2015
comment
Это довольно простой вопрос по тригонометрии, вам нужно изучить его.   -  person zaph    schedule 22.01.2015
comment
Вы уверены, что текущее местоположение не перемещается дико? Например, Core Location не работает внутри здания. Да и снаружи он не очень точен на коротких дистанциях. Если вы находитесь в пределах досягаемости Bluetooth-маяка, то местоположение ядра почти бесполезно для определения того, насколько близко вы находитесь к маяку. GPS недостаточно точен для этого. Что вы можете использовать, так это мощность радиосигнала маяка, но это не поможет вам определить местоположение, если у вас нет нескольких маяков для триангуляции.   -  person Abhi Beckert    schedule 23.01.2015


Ответы (1)


Звучит так, как будто вы хотите иметь два устройства — одно передающее и одно принимающее, и вы хотите, чтобы принимающее устройство имело компас в направлении вещательного устройства. Это звучит довольно аккуратно.

Я бы транслировал долготу и широту вещательного устройства в виде строк через мажорную и минорную клавиши.

Теперь у вас должно быть две точки - долгота и широта передающих и принимающих устройств. Приемное устройство также имеет компас.

Теперь вы можете использовать код здесь: Указать местоположение с помощью компаса, чтобы определить направление на точка.

Обратите внимание, что для того, чтобы это работало, Bluetooth должен быть включен на обоих устройствах, а приложения должны быть открыты на обоих устройствах, даже на устройстве вещания.

Изменить

Я предполагаю, что случайная точка — это, по сути, другое передающее устройство. Я понимаю, что вы просто хотите почувствовать, откуда идет сигнал, но устройство не может это узнать. Bluetooth основан на радиоволнах (т. е. свете), и невозможно определить, в каком направлении исходит источник. Чтобы это работало, вам нужно иметь две части информации: местоположение с каждого устройства и контрольную точку для ориентации устройства:

  1. Местоположение в пространстве от каждого устройства, которое даст вам расстояние между устройствами и направление, если вы предполагаете, что принимающее устройство всегда указывает на север.
  2. Поскольку пользователи часто не смотрят на север при использовании своих iPhone, вам нужно использовать компас на устройстве, чтобы выяснить, как ориентировать изображение стрелки, указывающей на устройстве.

Чтобы определить местоположение, вы можете использовать GPS, но он должен быть максимально точным, если вы говорите о позициях с комнатой. И тогда вы можете использовать ссылку выше, чтобы определить ориентацию.

Обратите внимание, что существует SDK для внутреннего позиционирования Внутреннее позиционирование на iOS с Core Местоположение - неточное? но оно не такое точное, как хотелось бы.

person Josh Gafni    schedule 22.01.2015
comment
Я использую iBeacons, поэтому, по сути, я знаю свое положение в комнате, представьте себе комнату как плоскость координат X и Y. Я хочу более или менее случайным образом выбрать другую точку в комнате, а затем указать стрелку в моем приложении в направлении этой точки, независимо от того, сколько я перемещаюсь по комнате. - person Adam Hoffman; 23.01.2015
comment
это точка наугад в основном другое устройство, которое передает? - person Josh Gafni; 23.01.2015
comment
Нет другого момента — предмет в комнате подобен письменному столу или лампе, ничего не пропуская. Пол становится сеткой X и Y, и я узнаю свое положение в комнате с помощью триангуляции iBeacons. Я хочу указать стрелку от моего положения к стулу или лампе или чему-то еще. это должно работать, даже если моя позиция была статусной, как будто это был также стол. Я думаю, что я спрашиваю, как мне указать от одного CGPoint к другому CGPoint вроде как просто нарисовать линию, но что меня интересует, так это то, что в конце линии я хочу, чтобы стрелка указывала на второй объект. - person Adam Hoffman; 23.01.2015