迅速.将偏北方向表示为航向范围



我正在使用注释和MapKit。我有一个自行车注释,其中默认图像指向东方(即自行车的侧视图,具有向上、向下、向前和向后的概念(。如果自行车的CLLocation路线是西的,我需要使用翻转的图像(即指向西方的图像(,否则自行车向后行驶。为了避免注释图像的过度"翻转",我想在正北和正南有一个缓冲区,例如,如果自行车的路线是东的(因此使用的图像是朝东的自行车图像(,如果路线稍微向西转向(比如 184 度(,那么这被认为是"在缓冲区内",我不在更新的注释上使用翻转的图像。假设缓冲区是正北和正南两侧的 5 度。我想在变量中捕获这些"方向",即有效东部是范围 5.0..<175,南缓冲区是范围 175..<185,有效西部是 185..<355 ...但是我将如何代表北方缓冲区....这实际上需要是一个从 355 到 360 的范围,也从 0 到 5 即不是连续的数字......我猜这在数学上应该很简单,但只是想不出怎么做?

如果我理解正确,翻转发生在南北轴上。有一个用于翻转enum很有用:

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

您可以使用它来跟踪翻转状态

var direction: Direction = .right // east

该课程是一个从 0 到 360 度的Double

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这是最后设置的任何东西。这意味着,当您的路线从东向西移动时,仅当您通过缓冲区边界时,图像才会向西翻转。

最新更新