Orientation and angular velocity of particle cloud

Started by
22 comments, last by raigan 6 years, 11 months ago

Hello folks,

For a cloud or group of particles it is possible to find the global linear state (average position and velocity "as if" the particles were one body) by summing up particle position and velocity multiplied by particle mass and then dividing the sums with global mass. Something like this:


for each particle p
    global_position += p->position * p->mass
    global_Velocity += p->velocity * p->mass
next p

global_position *= global_inverse_mass
global_velocity *= global_inverse_mass

Is there a similar unambiguous way to determine rotational or angular state for a group of particles? I have managed to determine angular velocity by summing up angular momentum and dividing by global moment of inertia, but I still miss a good way to determine orientation. Simply computing angle as


angle += angular_velocity * time_step

will quickly drift away from the correct value. Thanks in advance!

Cheers,

Mike

Advertisement

This seems related to "shape matching"; this recent paper should have lots of useful references (and itself presents a method to extract rotation from a point cloud): http://matthias-mueller-fischer.ch/publications/stablePolarDecomp.pdf

Note that AFAICT you'll need some sort of "rest pose" defined for the points or the concept of orientation doesn't make a lot of sense.

Thanks, I'll take a look at it. Like you suggest, I have implemented a method, where each particle has a "rest position" which is translated and rotated like a regular rigid body with explicit angular properties. What I'm looking for is a method that works without the hidden points.

Cheers, Mike

What do "forward" or "right" or "up" mean for your point cloud? What are you going to use those values for after you've found them? If you can describe what you want, we can think about a method to produce it.

If each particle is allowed to move in arbitrary ways, then you could have one half moving clockwise around an axis, and the other moving counter-clockwise around that axis. You could have some particles which aren't moving. You could have some particles which are yo-yoing along a line. Orientation doesn't make sense for those cases.

So you're just trying to track orientation? Can the particles drift from their original positions relative to the reference frame of the particles? Have you heard of principal component analysis?

What do "forward" or "right" or "up" mean for your point cloud? What are you going to use those values for after you've found them? If you can describe what you want, we can think about a method to produce it.

If each particle is allowed to move in arbitrary ways, then you could have one half moving clockwise around an axis, and the other moving counter-clockwise around that axis. You could have some particles which aren't moving. You could have some particles which are yo-yoing along a line. Orientation doesn't make sense for those cases.

In the linear motion case, any particle can move freely relative to the rest of the particles, including "yo-yoing". Still, the global position and velocity are incredibly useful for analyzing the behavior and properties of the cloud as a whole. For instance, this is used in orbital mechanics to analyze anything from asteroid belts over gas clouds to entire clusters of galaxies. The same goes for the rotational properties of a body of particles. The linguistic terms of "forward" and "up" have no meaning here, it's an entirely abstract mathematical description.


So you're just trying to track orientation? Can the particles drift from their original positions relative to the reference frame of the particles? Have you heard of principal component analysis?

I am trying to keep track of angular orientation and velocity. Yes, the individual particles can in principle move freely relative to the body of particles as a whole. Haven't heard of principal component analysis, will take a look at it.


It is possible to use PCA to find a basis that represents the "orientation" of the cloud. However as particles deviate from their past positions PCA can possibly yield a wildly different basis. However, this is unlikely if timesteps are small enough. Just thinking about it, it seems some kind of iterative refinement would work pretty well given an initial basis found with PCA, then after each timestep the frame can be nudged to find a minimum fit with the new positions. Anyways, that's all I know, so I can't give any more advice.

Thanks for the feedback, you have given me two good clues to follow.

Just a random idea: If you've found the global average angular velocity, that means you should have an average axis of rotation. From there, take one easy-identifiable particle in the cloud which is orbiting individually as close to that average as possible and compare its current position to a fixed point in its orbit (perhaps one of its maxima along a specific axis) and that average axis of rotation. As long as that one particle is a good representative for the cloud's overall rotation, that should give you noise-free orientation information for a 'representative' case in your cloud and you can just ignore the erratic particles.

Though this wouldn't even work for orbits if different particles orbit at different distances from the center, because angular velocity is lower the further you are from the barycenter (making your "years" longer). If the Earth is your representative particle, that has nothing to do with the angle that any of the other planets are at.

If you are interested in the overall "bulge" direction(s) of your cloud, then PCA will be a better bet.
Another idea would be to do a least square fit to find the average line representing the cloud,
then project all particles to the plane normal to that line and repeat the process go get a second line orthonormal to the first.
Like any other method this will be unstable, but may suffice and is easy to implement.

This topic is closed to new replies.

Advertisement