I am trying to position sprites (visually circlular with, say radius 50) evenly along a sin curve.
Currently, the function I am using for x and y are:
for(int i=0; i<number_of_sprites; i++){
x = sprite_index*60
y = sin(sprite_index)*60
sprite.position = CGPointMake(x, y)
}
Even though the sprites are all evenly spaced along the x axis, you are not all equidistant from each other.
This is somewhat pseudocode - I'm simply looking for the mathematical function to do this.
How can I solve this problem?
According to this answer on math.stackexchange.com, the solution for calculating the arc length along a sine wave is an elliptic integral which is difficult to calculate analytically.
Fortunately you have a computer at your disposal that can apply the same formula using numerical integration to achieve an approximation of the desired curve.
Given the derivative of sin(x)
is cos(x)
, if you increment your x
variable very slowly (with a per-step increment of dx
) then at each step your ds
will be dx * sqrt(1 + cos(x)^2)
. Keep accumulating the ds
values until it reaches (or exceeds) your desired spacing and only then draw a point.
See http://jsfiddle.net/alnitak/fp7aknoc/ for a demo.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With