根据角度找到正确的车轮段
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
在这种情况下,角度 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