Swift. Представлять северное направление как диапазон направления курса - PullRequest
0 голосов
/ 11 сентября 2018

Я работаю с аннотациями и MapKit. У меня есть аннотация велосипеда, где изображение по умолчанию указывает на восток (т.е. вид сбоку велосипеда, который имеет концепцию вверх, вниз, спереди и сзади). Если курс CLLocation велосипеда идет на запад, мне нужно использовать перевернутое изображение (т.е. изображение, указывающее на запад), в противном случае велосипед движется назад. Чтобы избежать чрезмерного «переворачивания» аннотационного изображения, я хочу иметь буферную зону на должном севере и на юге, где, например, если курс велосипеда находится на восток (и, следовательно, используемое изображение является изображением велосипеда, обращенного на восток), если курс немного отклоняется на запад (скажем, 184 градуса), тогда это считается «в буферной зоне», и я не использую перевернутое изображение в обновленной аннотации. Скажем, буферная зона находится на 5 градусов по обе стороны от севера и юга. Я хочу зафиксировать эти «направления» в переменных, т. Е .ffectiveEast - это диапазон 5.0 .. <175, southBuffer - это диапазон 175 .. <185 ,ffectiveWest - 185 .. <355 ... но как бы я представлял northBuffer .... который должен быть в диапазоне от 355 до 360, а также от 0 до 5, то есть не смежных чисел ... Я предполагаю, что это должно быть довольно просто сделать математически, но просто не могу придумать, как? </p>

1 Ответ

0 голосов
/ 11 сентября 2018

Если я правильно понимаю, переворачивание происходит на оси север-юг.Полезно иметь enum для переворачивания:

enum Direction {  //image flipping
   case left, right
}

. Вы можете использовать это для отслеживания состояния переворачивания

var direction: Direction = .right // east

. Это курс Double, который выполняетсяот 0 до 360 градусов.

var course = CLLocation.course

Буферная зона - все, что вам нравится

var buffer:Double = 5 // 5 degrees each side of north or south 

Вы можете настроить переворачивание изображения на основе текущего состояния direction.

func setImage(_ course: course) {
    switch(direction){
        case .right: // east
          if(course < 360 - buffer || course > 180 + buffer){
             direction = .left
             // flip image to left
          }
        case .left: // west
          if(course > buffer || course < 180 - buffer){
             direction = .right
             // flip image to right
          }
      }
  }

Обратите внимание, что есть мертвая зона, созданная buffer, например, на севере между 355 и 5 градусами, где direction - это то, что было установлено последним.Это означает, что когда ваш курс перемещается с востока на запад, изображение переворачивается на запад, только когда вы пересекаете границу буфера.

...