12 ms·
How Quaternions encode rotations: derivation and sample code
- duiker101 10y agoThis seems a very good and in-depth. I recently had to learn a bit of this stuff and coming from very basic math Quats are a bit of funny concept at first. This video does an amazing job at explaining what they are https://www.youtube.com/watch?v=4mXL751ko0w https://www.youtube.com/watch?v=4mXL751ko0w and the pro/cons over euler angles. The whole channel has some pretty good resources for anyone looking for a "soft approach" at math.
- jacobolus 10y agoAnyone interested in such topics should check out geometric algebra, a.k.a. Clifford algebra. Start with http://geocalc.clas.asu.edu/pdf/OerstedMedalLecture.pdf http://geocalc.clas.asu.edu/pdf/OerstedMedalLecture.pdf Matrices and trigonometry are in my opinion a pedagogically, conceptually, and practically poor way of understanding and using quaternions; furthermore, cross products (and the associated confusion about a right hand rule and polar vs. axial vectors and so on, not to mention a total failure to generalize to higher dimensions) need to vanish from the earth. More generally, this is a topic that should be explained first using pictures, ideally interactive ones. The algebraic manipulations to formally prove what the pictures explain visually should just fill in the bookkeeping details. Finally, perhaps the most important reason geometric (Clifford) algebras should be used for pedagogy, even if you plan to write code which only uses quaternions per se, is that they make the “sandwich” multiplication of versors as operators on vectors completely obvious as composition of reflections.
- grondilu 10y agoSay what you want about geometric algebra, if it has a least one merit, it's that it makes rotations in 3D space and their link with quaternions very simple to understand. Also check out my implementation in Perl 6: https://github.com/grondilu/clifford https://github.com/grondilu/clifford With it, quaternions become: use Clifford; constant I = @e[1]*@e[2]; constant J = @e[2]*@e[3]; constant K = @e[1]*@e[3]; say I² == J² == K² == I*J*K == -1;
- logfromblammo 10y agoThe subalgebra of 3D Clifford using the scalar and the 2-blades represents quaternions. The subalgebra using the pseudoscalar and the 1-blades can also represent quaternions. You have to be careful using other people's implementations, because certain operations are anticommutative, so sign conventions and operand ordering matters a lot more. For instance, choosing whether K is defined as e3 * e1 rather than e1 * e3 depends on whether your base vectors square to 1 or -1. Geometric Algebra is cool. It lets you say things like "the intersection of two spheres that don't touch is a circle with negative radius." You can't even represent a circle with negative radius in regular geometry.
- grondilu 10y ago> You have to be careful using other people's implementations, because certain operations are anticommutative, so sign conventions and operand ordering matters a lot more. For instance, choosing whether K is defined as e3 * e1 rather than e1 * e3 depends on whether your base vectors square to 1 or -1. Sure. For my implementation I thought a lot about how to deal with signatures and stuff. It's technically easy but making it simple and elegant is not obvious. I first thought about defining a @signature array, but then it occurred to me that it's much simpler to create two infinite spaces : one euclidean and one anti-euclidean. Later I've learned that Hestenes and others have considered this as well, they called it the mother of all geometric algebras, or universal geometric algebra[1]. Conveniently, Perl 6 deals with infinite lists very well, so it was very appropriate. So in my implementation, @e[$i]² is +1 for all $i. If you want vectors with negative squares, use the @ē basis. With geometric algebra, there are indeed several ways to represent quaternions. In fact there are several ways to represent complex numbers as well. I don't think it's a pitfall. As long as notations are clear and simple, it should be fine, I think. 1. https://en.wikipedia.org/wiki/Universal_geometric_algebra https://en.wikipedia.org/wiki/Universal_geometric_algebra
- logfromblammo 10y agoNo, not a pitfall. it is more like a small pothole in the road: the problem is easily avoided if you already know that it exists.
- ColinWright 10y agoI am told that in some modules in the Cambridge undergraduate mathematics degree there are always questions that are trivial to solve using Clifford Algebras, but a complete pig in the usual formulations. I didn't take such a module so I can't comment from first-hand experience, but knowing some of the lecturers I can well believe it. The take-away is that they are a powerful tool in the right circumstances. Whether they can replace the usual formulations in toto is another question, but they are certainly interesting.
- jacobolus 10y agoAnyone trying to study rotating objects (precession, fictitious forces in rotating reference frames, complicated problems about angular momentum, collisions of rigid objects etc.) will find that the geometric algebra approach cuts the work and conceptual overhead by an order of magnitude. Here’s the book to work through for anyone who wants to deeply understand rotation in classical mechanics problems: http://geocalc.clas.asu.edu/html/NFCM.html http://geocalc.clas.asu.edu/html/NFCM.html
- jules 10y agoDo you have a link to a worked out example that is made much easier by this?
- jacobolus 10y agoUnfortunately Hestenes’s book is not online. I don’t know of any comparative examples online to link to. I do still have vivid memories of working such problems out painfully using matrix/tensor methods in a college mechanics course 12 years ago though. :-)
- tostitos1979 10y agoIs there a video lecture one can watch? What background is required to understand this?
- blux 10y agoSome years ago Wildberger gave some excellent lectures explaining quaternions using rational geometry, which, if I am not mistaken, is related to Clifford algebra in the way it is presented. Lectures start out by explaining the relation between complex numbers and rotations in the 2D plane, then discuss rotations in 3D using quaternions. https://www.youtube.com/watch?v=uRKZnFAR7yw https://www.youtube.com/watch?v=uRKZnFAR7yw https://www.youtube.com/watch?v=0_XoZc-A1HU https://www.youtube.com/watch?v=0_XoZc-A1HU https://www.youtube.com/watch?v=g22jAtg3QAk https://www.youtube.com/watch?v=g22jAtg3QAk https://www.youtube.com/watch?v=MkNfQtINEjo https://www.youtube.com/watch?v=MkNfQtINEjo
- imglorp 10y agoI've noticed Wildberger getting some grief about some of his unconventional ideas. I very much enjoy his lecture style, but as a layperson I'm never sure when he's straying away from accepted areas into controversial ones. Any feedback there?
- blux 10y agoYes, he sure is controversial. He does not acknowledge the existence of irrational numbers for example. In his lectures he avoids the use of any transcendental functions for the same reason, so no square roots, sine, or cosine. I'm no mathematician, so I'm not qualified to comment on this either. Would love to hear other opinions on this too. My personal opinion on this is that his rational approach does produce beautiful math, in the sense that it is really simple and intuitive.
- nabla9 10y ago>the existence of irrational numbers for example. I think most of cases of "non acknowledging" are deeply personal aesthetic considerations. One likes to play with one set of objects and only with them. In the widest sense existence in mathematics means that mathematical object is well-defined and the system used is consistent (you can't derive contradictions). Of course mathematicians are free do limit themselves into any subset of axioms or concepts they feel is "natural" or "real" and work only with them. But if they make philosophical arguments against other using irrational numbers, axiom of choice etc. I think they should argue that they are not consistent or well defined.
- edwintorok 10y agoAlso worth reading: http://geocalc.clas.asu.edu/pdf/SpacetimePhysics.pdf http://geocalc.clas.asu.edu/pdf/SpacetimePhysics.pdf https://slehar.wordpress.com/2014/03/18/clifford-algebra-a-visual-introduction/ https://slehar.wordpress.com/2014/03/18/clifford-algebra-a-v...
- drostie 10y agoThanks for that first link, it looks very promising. My problem is that I already idiosyncratically try to understand spacetime in terms of spin-vectors,* so this is going to take a bunch of trying to map out a Rosetta stone to translate between them! * In brief, you can convert a world vector v^μ into a Hermitian 2D complex matrix V by adjoining σ_0 = I to the standard Pauli matrices σ_{1,2,3} and then V = σ_μ v^μ, when you do this you find that actually det V = v_μ v^μ under the (+ − − −) signature. This means that for nullvectors det V = 0 and therefore V is a projection V = φ φ^†, else V is merely Hermitian with eigenvalues v_0 ± √(v_1² + v_2² + v_3²) (because it has trace 2v_0) and there's not much more you can say. Lorentz transforms are linear and preserve Hermitianness and the determinant, with the parity-reversing stemming from V → -V and V → (det V) V^{-1} and the rest being V → L V L^† for some L such that det(L) = 1. The special case where L^† L = 1 (which is SU(2)) of course corresponds to 3D rotations because it preserves trace hence v_0, so if it's also preserving det V then it must be preserving the eigenvalues and hence the Euclidean metric √(v_1² + v_2² + v_3²). In turn L can be seen to act directly on the φ of the null vectors, φ → L φ, so call those "spin vectors" and confirm that they are spinors by finding out that L = -I for any 360-degree rotation. This is the most direct way I know of to see that the Lorentz transforms are the group SL(2, C) with this nice SU(2) group embedded in there. Then you can square-root the metric into an orientation tensor on the C^2 vector space as [0, -1; 1, 0] and build up the rest of the algebra in reverse from that starting point.
- jacobolus 10y agoYou might find this clearer than other sources: http://arxiv.org/abs/1205.5935 http://arxiv.org/abs/1205.5935 Also check out http://geocalc.clas.asu.edu/pdf/LGasSG.pdf http://geocalc.clas.asu.edu/pdf/LGasSG.pdf
- happy4crazy 10y agoFor another resource, Alan Macdonald has some nice videos that accompany his books, "Linear and Geometric Algebra" and "Vector and Geometric Calculus": https://www.youtube.com/channel/UCymE67THrWoeTABxzJm1wdg/playlists https://www.youtube.com/channel/UCymE67THrWoeTABxzJm1wdg/pla...
- contravariant 10y agoCross products likely won't vanish, precisely because they're heavily linked to the Clifford algebra, and are essentially all you need for the most common case. By the way, it is possible to generalize the cross product to higher dimensions, it just won't be a nice binary product, in n dimensions you need n-1 vectors to uniquely determine one orthogonal to all of them. Of course you can achieve pretty much the same thing with the Clifford algebra, or with wedge products.
- ittekimasu 10y agoThis is a question of what it "means". It's origins can be traced to problems dealing with SO(n), and in this sense it's uniquely defined by the Lie-algebra of \mathfrak{so}(n), but in the Clifford-algebra world they become blades (more appropriate for CG). I consider the cross-product to be one of the most abused objects in Physics; my first course in Newtonian mechanics was a nightmare, filled as it were, with the ghosts of all the characters killed so as to make the plot ostensibly "simple".
- spuz 10y agoNumberphile did a good simple explanation of quaternions: https://www.youtube.com/watch?v=3BR8tK-LuB0 https://www.youtube.com/watch?v=3BR8tK-LuB0
- Sharlin 10y agoI haven't thought about it before but once you start thinking of complex numbers as "numbers that want to turn" (every unit complex number is isomorphic to a rotation on R^2), the concept of quaternions analoguously representing rotations in R^3 becomes pretty intuitive even if you don't quite grok the details.
- Bootvis 10y agoHmm, but I would think that a quaternion represents a rotation in R^4 (for which I lack intuition).
- uryga 10y ago===== EDIT: this is mostly wrong - see jblow's reply. Sorry for misleading you into thinking I know what I'm talking about :D ===== I think of it like this: a complex number represents a rotation in a plane. You need two "coordinates" to do that. 2d has one plane, but 3d has two planes - think about how an anti-air cannon rotates left-right and up-down. So, if we've got two rotations to represent, you must need two complex numbers - that's four "coordinates", or one quaternion.
- chombier 10y ago> but 3d has two planes Why not 3 planes?
- uryga 10y agoOkay, my wording wasn't the best here. 3d doesn't "have" 2 planes. But, for some reason, you can look in any direction in 3d by turning in two planes. Test it yourself: turning your head left-right is rotation in one plane, turning it up-down is rotation in the other plane. here's my shot at illustrating this: https://goo.gl/photos/Cxt7KPbos5o2QnkD9 https://goo.gl/photos/Cxt7KPbos5o2QnkD9 to be completely honest, I'm not sure if this intuition is correct. But it seems to make sense
- 10y ago
- chombier 10y agoQuaternions are much easier to grasp once you are familiar with basic Lie group theory, in particular the adjoint representation of the group over its Lie algebra. Then the link with rotations becomes obvious and it gets very easy to transport geometric operations from the unit sphere to the rotation group (spherical linear interpolation, averaging, etc...)
- munchbunny 10y agoUnless I'm missing something, this feels like trying to understand a less complicated thing by first understanding a more complicated thing?
- chombier 10y agoSometimes this is the math way ;) More seriously, Lie group theory puts the light exactly on the shared structure between quaternions and rotations (both are smooth groups related in some way) and ignore the secondary details, so you spend time understanding what matters. It may be more abstract, but you get more from your efforts in my opinion.
- na85 10y agoSo much js on that page that it took almost a minute to finish loading, and then my phone's browser froze.
- wmil 10y agoHe's using MathJax to display equations. There are a lot of equations. https://www.mathjax.org/ https://www.mathjax.org/
- keyboardwarrior 10y agoNot just your phone, my 4790k froze. Like jesus.
- EllipticCurve 10y agoNice, lots of detailed explanation! For people interested, to use them in a C/C++ context, feel free to have a look at my Quaternion-Library. https://github.com/MauriceGit/Quaternion_Library https://github.com/MauriceGit/Quaternion_Library
- jordigh 10y agoThis looks like C. Why do you call it "C/C++"? It could just as well be C/ObjC, right?
- generic_user 10y agoC and C++ share the same memory model and can be called quite easily form each other with the use of an 'extern "C"'. It's a common practice to write libraries in C for flexibility, (many languages can ingest C) and use the 'extern "C"' for use in C++ code. You can also write a thin C++ class wrapper for a more native object oriented interface.
- jordigh 10y agoBut all of this is true for ObjC too. How come people write C/C++ to describe pure C code but not C/ObjC? C is as much of a subset of ObjC as it is a subset of C++. It's funny people don't do this as much with other languages. For example, nobody describes pure Javascript as "js/html" even though you can have lots of js inside HTML code.
- EllipticCurve 10y agoTrue. I'll skip the C++ mentioning, as it is clear for any C++ developer, that you could just use it as extern C.
- generic_user 10y agoIf you intend for your library to be used in both C and C++ then your doing yourself a favor by using C/C++ for the simple fact that this is marketing to C++ programmers that they can use the library who may not be aware that that is the case. so at the bare minimum C/C++ will possibly increase your user base. (edit) You should not assume that C++ programmers are going to wade through your library code and rewrite your library with the proper signatures. You as the library writer should have done that and tested it, then advertised to prospective users that your library is ready for use with C++.
- gravypod 10y agoFor anyone who hasn't been exposed to this problem before, like me, there are countless applications for this sort of mathematical operations in game development. Back a few years ago a friend and I were attempting to write a game engine. We hit many road blocks but what often killed us was fixing gimble lock. This isn't an issue for many things like FPSs or side scroller but when you get into the realm that we wanted to tackle (first person space flight) it becomes a challenge. Quaternions, from my position as the ultimate laymen, take up the slack that Euler coordinates/angles have. The issue comes from rotating an object. Once the object is upside down, it's coordinate system stops working as you would expect. If you are head-to-floor upside down then your up relative to the world is down. When applying rotations that are based on shifts in pitch, yaw, and roll it is difficult to have correct behavior. If instead of this, you implement quaternion rotations for all objects, this entire class of headache melts away. The problem is finding a good explanation of how this works or even yet how to implement it. It's what's stopped me dead in my tracks many times as the implementations often available still have many bugs (when in Space Engineers if you rotate your cursor a circle quickly you'll slowly rotate your character, this is a common bug in many implementations I've found) I'm definitely going to read through all of this when I get back from uni today. PS: Mathematicians/dark arts practicers, if I'm incorrect about anything I've said here please let me know and point me to where I can learn more
- devbug 10y agoHow familiar are you with the complex plane? It helped me a lot to be explained quaternions starting from the complex plane. More specifically, by constructively inspecting their properties. There's a great interactive article that gets the pedagogy of teaching such a complex concept (pun definitely intended). Unfortunately, I can't seem to dig it up. I recall the author's blog using all kinds of CSS and/or WebGL trickery to make 3d backgrounds – anyone know which blog I'm referring to?
- kalid 10y agoSteven Wittens: https://acko.net/blog/animate-your-way-to-glory/ https://acko.net/blog/animate-your-way-to-glory/ https://acko.net/blog/animate-your-way-to-glory-pt2/ https://acko.net/blog/animate-your-way-to-glory-pt2/
- OliverJones 10y agoThe Evans and Sutherland graphics rendering pipeline has been doing this for almost two generations. Dr. Sutherland's clipping divider depends on it. https://www.google.com/patents/US3639736 https://www.google.com/patents/US3639736
- ipunchghosts 10y agoYou will eventually regret any use of Euler angles. - John Carmack
- Coincoin 10y agoI would agree if it said "most" instead of "any". Euler angles are useful. Just be very careful with them. Convert to quaternion as soon as possible and convert back to euler as late as possible when needed. However, you will never entirely avoid them because they are just too practical. Under careful constraints, they make code interfaces simpler. This is especially important if you are to expose that code to a multidisciplinary team. There is no way you're going to teach an artist how quaternions work just so they can rotate their stuff around the up axis, when simple yaw-pitch angles cover 99% of their use cases.
- deleted 10y ago[deleted]