4 ms·
Quats can be represented with (x, y, z, w). Rotors require a vector, bivector and angle (vec_x, vec_y, vec_z, bivec_x, bivec_y, bivec_z, theta). If you are stor
by palisade 8y ago
Quats can be represented with (x, y, z, w). Rotors require a vector, bivector and angle (vec_x, vec_y, vec_z, bivec_x, bivec_y, bivec_z, theta). If you are storing or transmitting a quaternion it consumes less space and in 3D simulations or games a quaternion is therefore advantageous. 3D file formats would explode in size if rotors were used. And, more network packet fragments would be needed to encapsulate a world state update of moving objects, npc and players. That would waste bandwidth (therefore $), cause "rubberbanding" and increase latency.
- Rusky 8y agoNo. 3D rotors are represented exactly the same way as quaternions- 4 scalars. The operations are the same as well, only the explanation is different.
- palisade 8y agoPartially true, internally libraries represent the rotor as just four scalars and can convert these to a quaternion. However, to actually make use of the rotor to do anything useful, e.g. interpolate, which is a power quaternion math has innately, you need to provide a lot more external information; plane origin vector, bivector, angle. A 3D file format storing the transformations between joints of the skeleton of a character for example would have to provide these extra bits of information in order to store the frames to perform inverse kinematics. Likewise, if you needed to store or transmit spherical camera interpolations or non-player or player character transitions over a network this information would also have to be provided. You could perhaps do some optimization, e.g. only sometimes transmitting the origin once and then only sending the bivectors and angles in some cases which still would waste bytes and increase complexity. And, sometimes you couldn't so you'd have to send the whole thing. But, with a quaternion you get this for free without any logical gymnastics via the previous four scalars to the next four scalars between delta frames. And, in the case of slerp only the lambda of time. Now you can argue that a rotor could be used locally and then when storage/transmission is required you could convert to and use quaternion math to perform the necessary interpolations and thereby get the space savings. However, this article is specifically asking for the complete removal of quaternions from the field of computer science. Unless I'm misunderstanding. Though I haven't seen a code example where rotors don't require this extra information. For example, in libvsr they have examples that require all these pieces for each frame. However, maybe that is an inefficient or naive implementation. I did find this: http://geometry.mrao.cam.ac.uk/wp-content/uploads/2015/02/01ApplicationsI.pdf http://geometry.mrao.cam.ac.uk/wp-content/uploads/2015/02/01... Which provided a formula for rotor slerp: R(lambda) = (1.0 / sin(theta)) * (sin((1 - lambda) * theta) * R0 + sin(lambda * theta) * R1) If that is the case, then the bare minimum information required is still more than a quaternion. We'd require the lambda, theta, and R0 (4 scalars), R1 (4 scalars).
- jacobolus 8y agoYou are misunderstanding. A quaternion literally is a scalar + bivector (“imaginary”) rotor. We are talking about the same 4 numbers. It lives inside a geometric algebra which also includes vectors and trivectors, but those are not part of the rotor. If you store a rotor as a general 3D multivector, it will have 8 entries 4 of which are always 0; this could be done to simplify your code (then you only need one multivector type), but is not a good idea for efficiency of computation/transmission if you need to represent large numbers of rotations and their transmission might be a bottleneck.
- palisade 8y agoAccording to the formula I provided, to slerp for example, rotors require lambda and theta. Whereas quaternions only require the lambda. Is there an alternative I'm missing?
- jacobolus 8y agoWhich formula are you talking about? The arithmetic is literally exactly the same. “Slerp” just means follow a path on a circle at uniform speed (i.e. “use trigonometry”). In this case, we are talking about a circle on the conceptual unit 4-sphere. It doesn’t really matter what names we call the basis elements.