根据角度找到正确的车轮段

Find correct segment of wheel based on angle

在这种情况下,角度 0 表示最小索引 (0) 和最大索引 (7) 之间的线段在圆的右半边水平 - 左边的图像。在中间的图像中,车轮已旋转 23 度。这里的正确答案 (x) 是 3,因为黄色指针在索引 3 的线段上。在右图中,轮子旋转了 220 度,正确答案 (x) 是 7.

在这个轮子中,n = 8。有8个部分。角度 (a) 是车轮从其原始位置旋转的距离。

那么给定 n 和 a,你将如何计算 x?

只需切换角度并为每个 45 角度范围创建一个案例:

let angle = 220.0
switch angle.truncatingRemainder(dividingBy: 360) {
case 0..<45: print("3")
case 45..<90: print("2")
case 90..<135: print("1")
case 135..<180: print("0")
case 180..<225: print("7")  // 7
case 225..<270: print("6")
case 270..<315: print("5")
case 315..<360: print("4")
default: break
}

如果你真的想要一个公式,你可以从 360 中减去角度,除以 45(截面角度 = 360 除以截面数),加上 4(截面初始偏移量),向下舍入并截断提醒除以 8(节数)。

func segment(from angle: Double) -> Double {
    ((360.0-angle) / 45.0 + 4.0).rounded(.down)
        .truncatingRemainder(dividingBy: 8)
}

segment(from: 23)   // 3
segment(from: 60)   // 2
segment(from: 123)  // 1
segment(from: 170)  // 0
segment(from: 220)  // 7
segment(from: 235)  // 6
segment(from: 280)  // 5
segment(from: 322)  // 4