【问题标题】:cocos2d help find points on a circlecocos2d 帮助在圆上找点
【发布时间】:2009-04-18 10:47:55
【问题描述】:
【问题讨论】:
标签:
iphone
math
cocos2d-iphone
trigonometry
【解决方案1】:
如果我理解正确:
首先检查精灵与轮盘中心之间的距离。这会告诉你精灵是否在轮子的边缘。 (如果没有,什么都不会发生,对吧?)
然后,求精灵与轮盘“x 轴”的夹角。
spriteAngle = atan2(sprite.x - rouletteCentre.x, sprite.y - rouletteCentre.y)
您需要找到atan2() 函数的等效项。它通常以弧度返回答案;如果您愿意,您可能需要将其转换为度数或四分之一圈或其他值。
然后,减去轮盘本身旋转的角度(如果轮盘本身正在旋转,如果没有,那么您已经完成了)。确保您的角度测量值一致。
actualAngle = spriteAngle - rouletteRotationAngle
请注意,actualAngle 可能在 0-360 度范围之外,您需要使其“环绕”。
最后,您需要允许可接受的小范围值(例如,98 度到 102 度可能算作“北”)。
【解决方案2】:
所以你有一个半径为 r 的圆,圆心为 (x0,y0)。
一个点位于圆外,坐标为 (x,y)。你的问题是在圆上找到离点 (x,y) 最近的点。
解决方案很简单。点到圆上的最接近投影是通过简单的缩放来完成的。因此,
d = sqrt((x-x0)^2 + (y-y0)^2)
xp = x0 + (x - x0)*r/d
yp = y0 + (y - y0)*r/d
新点 (xp,yp) 将位于圆本身上。老实说,你最好在极坐标中工作,原点在圆的中心。然后一切都会变得容易得多。
您的下一个问题将是它在圆圈上的哪个位置?不要忘记圆上的罗盘点会随着时间旋转。 atan2 函数将为您提供点 (xp-x0,yp-y0) 所在的角度。大多数工具集都具有该功能。看到这里我已经减去了原点。