用于检测模拟时钟上的小时位置的三角函数算法

时间:2016-10-23 17:14:05

标签: ios swift algorithm math trigonometry

我的应用程序中有一个大小为312x312的视图,其中包含一个类似的模拟时钟:

Clock

每次用户点击时钟时都会调用一个方法。

我尝试使用三角函数来确定用户点击的小时(时钟部分),如下所示:

let touchPoint = tapGestureRecognizer.locationInView(self)

let delta = CGPoint(x: center.x - touchPoint.x, y: center.y - touchPoint.y)
let distance = hypotf(Float(delta.x), Float(delta.y))
//Ignore points outside circle
guard distance < Float(min (frame.width / 2, frame.height / 2)) else {
    return
}
let angle = atan2f(Float(delta.y), Float(delta.x))
let proportion = angle / (Float(M_PI) * 2) + 0.5
let hour = (Int(proportion * 12) + 3) % 12 + 1
print (hour)

但它给了我错误的结果:

格式为hourTapped: hourPrinted

  • 12:12
  • 1:1
  • 2:1
  • 3:1
  • 4:2
  • 5:1
  • 6:11
  • 7:11
  • 8:11
  • 9:11
  • 10:12
  • 11时十二

有时我甚至会忽略圈内的水龙头。

这种方法有什么问题?

谢谢!

0 个答案:

没有答案