代码之家  ›  专栏  ›  技术社区  ›  Genericrich

cocos2d帮助查找圆上的点

  •  2
  • Genericrich  · 技术社区  · 17 年前

    我试图在iphone的cocos2d环境中解决一个棘手的数学问题。

    我想在某些点(如指南针顺序点N、S、E、W)将Sprite闩锁在轮子上,并在所有其他点反弹。

    我认为这个问题正朝着正确的方向发展,但我无法理解。有人能帮我解释一下吗?

    Best way to find a point on a circle closest to a given point

    2 回复  |  直到 9 年前
        1
  •  1
  •   user85109 user85109    17 年前

    如果我理解正确:

    然后,找到角色与轮盘的“x轴”所成的角度。

    spriteAngle = atan2(sprite.x - rouletteCentre.x, sprite.y - rouletteCentre.y)
    

    你需要找到与 atan2() 功能。它通常以弧度为单位返回答案;如果你愿意,你可能想把它转换成度数、四分之一圈或其他什么。

    然后,减去轮盘本身旋转的角度(如果轮盘本身正在旋转,如果没有,那么你已经完成了)。确保你的角度测量是一致的。

    actualAngle = spriteAngle - rouletteRotationAngle
    

    请注意,actualAngle可能在0-360度的范围之外,您需要使其“环绕”。

        2
  •  1
  •   Artelius    17 年前

    所以你有一个半径为r的圆,圆心为(x0,y0)。

    解决方案很简单。点在圆上的最接近投影是通过简单的缩放来实现的。因此,

    d = sqrt((x-x0)^2 + (y-y0)^2)
    xp = x0 + (x - x0)*r/d
    yp = y0 + (y - y0)*r/d
    

    你的下一个问题是,它在圆圈的哪个位置?别忘了指南针在圆上的点是随着时间旋转的。atan2函数将为您提供点(xp-x0,yp-y0)所处的角度。大多数工具集都具有此功能。看,我把原点减去了。