I have a particle where I know:
- position (either in euclidean or spherical coordinates)
- direction (360°/2 pi radians)
- speed (linear distance).
How do one calculate next position for the particle?
Subscribe to GameDev.net Direct to receive the latest updates and exclusive content.
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.
Posted 24 February 2014 - 08:40 AM
I have a particle where I know:
How do one calculate next position for the particle?
Posted 24 February 2014 - 10:33 AM
Weird. I just answered a question about quaternions that is essentially the same question.
If your time step is small, move the particle in R^3, forgetting about the sphere for a moment, then project back to the sphere. If that approximation is not good enough, there is a formula you can use that involves computing cosine and sine. I'll figure it out and post it, if you really need it.
Posted 24 February 2014 - 11:50 AM
I don't know how to calculate forward in R^3 either. One solution I thought of is to rotate particle direction around sphere normal at particle position. Sound simple but I find matrix rotations hard. I don't understand how to write a "vector3.rotateAround(vector axis, float angle)"-function.
My velocities are probably small but I don't know yet, I trying to simulate fluids and they have a tendency to blow up if not correct.
Right now I would settle for any algorithm that would help me progress.
Posted 24 February 2014 - 12:14 PM
If (x,y,z) is a point on the surface of the unit sphere centered at the origin, the East vector is something like (z, 0, -x) and the North vector is something like (-xy/S, S, -yz/S), with S:=sqrt(1-y^2). You can then express your direction as North * cos(angle) + East * sin(angle).
I kind of rushed through the Math, so I am not 100% certain that the formulas are correct, but you can try to reproduce them yourself.
Posted 24 February 2014 - 12:20 PM
I don't understand how to write a "vector3.rotateAround(vector axis, float angle)"-function.
It's very easy to do with quaternions. You just need to know how to construct the quaternion that represents the rotation you want, which is cos(angle/2) + sin(angle/2)*x*i + sin(angle/2)*y*j + sin(angle/2)*z*k, and how to rotate a point by the rotation represented by a unit-length quaternion, which is q' = q * v * conj(q).
Posted 24 February 2014 - 12:31 PM
If (x,y,z) is a point on the surface of the unit sphere centered at the origin, the East vector is something like (z, 0, -x) and the North vector is something like (-xy/S, S, -yz/S), with S:=sqrt(1-y^2). You can then express your direction as North * cos(angle) + East * sin(angle).
I kind of rushed through the Math, so I am not 100% certain that the formulas are correct, but you can try to reproduce them yourself.
Really, thanks a lot!
I tried it and it works.
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.
GameDev.net™, the GameDev.net logo, and GDNet™ are trademarks of GameDev.net, LLC.