Swift SpriteKit 中计算圆边缘上两点之间角度的方法

16

你如何在Swift中计算一个圆周上两个点之间的角度。

enter image description here


你确定这是一个圆吗?你知道圆心在哪里吗?因为仅凭两个点并不能确定一个圆,因为可以通过两个点描述无数个不同的圆 - 你需要第三个点,要么在圆上,要么在原点上。 - corsiKa
我知道起源,也知道 @corsiKa。 - PoKoBros
那么你可以使用arctan(delta y / delta x)。我不知道什么是swift sprite key,所以我不确定代码的格式。编辑:大多数使用三角函数的编程语言使用弧度,因此您的输出可能是以弧度为单位的。如果有将其转换为度数的函数,请使用该函数;否则,使用将其转换为度数的公式,即rads * 180 / pi。 - Muhatashim
1个回答

39

给定圆心为center,点p1p2在同一个圆上,首先需要计算它们之间的差向量:

let v1 = CGVector(dx: p1.x - center.x, dy: p1.y - center.y)
let v2 = CGVector(dx: p2.x - center.x, dy: p2.y - center.y)

然后

let angle = atan2(v2.dy, v2.dx) - atan2(v1.dy, v1.dx)

是这些向量之间的(有向)夹角,以弧度为单位。

var deg = angle * CGFloat(180.0 / M_PI)

角度,以度为单位计算。计算出的值可以在-360..360范围内,因此您可能希望使用以下方法将其归一化到0&lt;= deg < 360范围内

if deg < 0 { deg += 360.0 }

这段代码能在iPad上运行吗?它所做的只是让圆形稍微放大一点。 - PoKoBros
4
@PoKoBros:这只是数学,它在任何设备上都能运行。它只计算一个角度,那么你所说的“圆会稍微变大”是什么意思? - Martin R
我指的只是圆的半径会在 iPad 上加倍。 - PoKoBros
@PoKoBros:抱歉,我不明白。这个问题是关于从三个点(中心、p1、p2)计算角度的,半径甚至没有涉及到公式中。那么在iPad上怎么/哪里会出现“半径加倍”的情况呢? - Martin R
由于某种原因,当我在iPad上尝试相同的代码时,它无法正常工作。 - PoKoBros
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接