如何沿圆圈移动点?

时间:2012-07-12 23:36:49

标签: math cocos2d-iphone trigonometry

我想通过使用圆半径和移动角来移动圆形运动中的精灵。

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

Pic describing the scenario

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?

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

我标记cocos2d的原因是因为我正在使用它,有时游戏框架提供了帮助三角函数的函数。

3 个答案:

答案 0 :(得分:4)

试试这个:

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)

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

答案 1 :(得分: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

答案 2 :(得分:1)

计算原点,然后使用polar co-ordinates沿圆圈移动点。