Math 如何沿圆移动点?

Math 如何沿圆移动点?,math,cocos2d-iphone,trigonometry,Math,Cocos2d Iphone,Trigonometry,我想通过使用圆半径和移动角度以圆周运动移动精灵 例如,我知道精灵在一个半径为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

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

例如,我知道精灵在一个半径为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?

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

我之所以给cocos2d加上标签,是因为我正在使用cocos2d,有时游戏框架会提供一些函数来帮助处理三角函数。

试试这个:

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。

计算原点,然后使用沿圆移动点。

您可以使用“锚定点魔法”以一种非常简单的方式完成它=)任何节点的所有变换都是相对于其锚定点完成的。旋转也是一种变换。所以,你可以这样做

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

fwiw,你所描述的方式就是我要做的。在我的火车运动演示项目中,我就是这样做的,即将线速度转换为角速度,以使轨道车围绕给定中心点和半径的曲线旋转。你可以从这里得到这个项目:我想我也尝试过类似的东西,我会尝试一下,看看效果如何。这有帮助吗?它假设你在原点的中心。如果你不是,你需要弄清楚你在哪里。这就是计算中心。这是问题特别要求避免的。没错,它将以圆周运动的方式移动,但不在正确的位置。@MrAzulay-原点需要知道或计算。不要更改锚点,而是将精灵添加到常规CCNode,并通过位置将其从CCNode偏移,以便CCNode是圆的中心。然后可以更改CCNode的旋转以旋转精灵。这更容易,并确保例如精灵碰撞仍然是直接的。