沿着sin曲线均匀的空间圆圈

max*_*hud 4 javascript math

我试图沿着sin曲线均匀地定位精灵(视觉上是圆形的,例如半径50).

目前,我用于x和y的函数是:

for(int i=0; i<number_of_sprites; i++){
    x = sprite_index*60
    y = sin(sprite_index)*60

    sprite.position = CGPointMake(x, y)
}
Run Code Online (Sandbox Code Playgroud)

即使精灵沿x轴均匀分布,你也不是彼此等距的.

这有点伪代码 - 我只是在寻找数学函数来做到这一点.

我怎么解决这个问题?

Aln*_*tak 7

根据math.stackexchange.com 上的这个答案,计算沿正弦波的弧长的解决方案是椭圆积分,难以分析计算.

幸运的是,您可以随意使用计算机,使用数值积分来应用相同的公式,以获得所需曲线的近似值.

给定sin(x)is 的导数cos(x),如果你x非常缓慢地增加你的变量(每步增量dx),那么在每一步你ds都会dx * sqrt(1 + cos(x)^2).继续累积ds值,直到达到(或超过)您想要的间距,然后绘制一个点.

有关演示,请参见http://jsfiddle.net/alnitak/fp7aknoc/.