gpt4 book ai didi

ios - 寻找两点之间的角度

转载 作者:行者123 更新时间:2023-11-30 12:41:29 26 4
gpt4 key购买 nike

这是我的问题,每当我点击任何按钮时,它都应该到达中心,我正在使用 CGAffineTransform 和 CABasicAnimation,但我无法获得应该旋转的角度,它们每个都是一个圆形按钮,任何帮助将不胜感激 enter image description here

旋转代码

func rotateBarrel(with duration:CGFloat,angle:Double) {
let rotationAnimaton = CABasicAnimation(keyPath: "transform.rotation.z")
rotationAnimaton.toValue = angle

rotationAnimaton.duration = CFTimeInterval(duration)
barrelContainingView.layer.add(rotationAnimaton, forKey: "rotationAnimation")
barrelContainingView.transform = CGAffineTransform(rotationAngle: CGFloat(angle))
}

角度计算代码

func angleToPoint(comparisonPoint: CGPoint) -> Double {
let originPoint = CGPoint(x:comparisonPoint.x-initialCenterPoint.x,y:comparisonPoint.y-initialCenterPoint.y)
return Double(atan2f(Float(originPoint.y), Float(originPoint.x)))

}

//旋转前初始中心点为第三个按钮的中心

最佳答案

您想要函数atan2。您传入从中心点到点 1 的 deltaX 和 deltaY 以获得第一个角度。然后在第二个点上重复以获得第二个角度,然后求角度差。这就是圆弧的角度。

我在 Github 上有一个名为 TrochoidDemo 的项目其中包括使用相同数学的单指点击手势识别器(对于手势识别器,我计算从手指起始点到拖动到的点的角度变化。)

相关代码如下:

let center = CGPoint(x: view!.bounds.midX, y: view!.bounds.midY)
let currentTouchPoint = touch.location(in: view)
let previousTouchPoint = touch.previousLocation(in: view)

//Calculate the angle from the center of the view to the previous touch point.
let previousAngle = atan2f(Float(previousTouchPoint.y - center.y),
Float(previousTouchPoint.x - center.x))
//Calculate the angle from the center of the view to the current touch point.
let currentAngle = atan2f(Float(currentTouchPoint.y - center.y),
Float(currentTouchPoint.x - center.x))

//Adjust the rotation by the change in angle.
rotation -= CGFloat(currentAngle - previousAngle)

它需要进行调整才能为您工作,但它应该向您展示基本思想。

关于ios - 寻找两点之间的角度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42181719/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com