我试图沿着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轴均匀分布,你也不是彼此等距的.
这有点伪代码 - 我只是在寻找数学函数来做到这一点.
我怎么解决这个问题?
根据math.stackexchange.com 上的这个答案,计算沿正弦波的弧长的解决方案是椭圆积分,难以分析计算.
幸运的是,您可以随意使用计算机,使用数值积分来应用相同的公式,以获得所需曲线的近似值.
给定sin(x)is 的导数cos(x),如果你x非常缓慢地增加你的变量(每步增量dx),那么在每一步你ds都会dx * sqrt(1 + cos(x)^2).继续累积ds值,直到达到(或超过)您想要的间距,然后绘制一个点.
有关演示,请参见http://jsfiddle.net/alnitak/fp7aknoc/.
| 归档时间: |
|
| 查看次数: |
581 次 |
| 最近记录: |