如何沿圆移动点?

Jon*_*lay 3 math trigonometry cocos2d-iphone

我想通过使用圆半径和移动角度以圆周运动移动精灵。

例如,我知道精灵在半径为 10 的圆圈中移动,它的当前位置是 (387,38),角度是 28 度。现在我不想移动它说,沿圆周长 100 像素。

描述场景的图片

p1 = x&y coordinate, known (387,38) in example with movingangle 28 degrees
r = radius, known (10 in example)
l = distance to move along bend, known (100px in example)
p2 = new point, what is this x and y value?
Run Code Online (Sandbox Code Playgroud)

我有一个有效的解决方案,但我不太喜欢它。这对我来说没有意义,它需要比我认为需要的更多的计算。它的工作原理是首先使用 p1 计算中心点,然后向后做同样的事情,可以说得到 p2(使用余弦和正弦)。我相信应该有一种更快的方法,但我找不到任何人这样做。

我标记 cocos2d 的原因是因为这就是我正在使用的内容,有时游戏框架会提供函数来帮助处理三角函数。

ja7*_*a72 5

尝试这个:

a1 = 28*(?/180)
cen.x = p1.x - r*SIN(a1)
cen.y = p2.y - r*COS(a1)
a2 = a1 + l/r
p2.x = cen.x + r*SIN(a2)
p2.y = cen.y + r*COS(a2)
Run Code Online (Sandbox Code Playgroud)

没有比这更简单的了。从 p1 移动到圆心,然后移动到 p2。


Mor*_*ion 3

您可以通过一种非常简单的方式利用锚点的魔力来做到这一点=)任何节点的所有变换都是相对于它的锚点完成的。旋转也是一种变换。所以,你可以做这样的事情

CGFloat anchorY = neededRadius / spriteHeight;
[yourSprite setAnchorPoint:ccp(0.5f, anchorY)];
[yourSprite setPosition:neededPosition]; //remember that position is also for anchor point
[self addChild: yourSprite];
[yourSprite runAction:anyRotateAction]; // i mean, CCRotateBy or CCRotateTo
Run Code Online (Sandbox Code Playgroud)