I’ve been looking into quaternions a bit and tried to use the Rhino Quaternion class, and I’m not claiming that I have grasped the quaternions concept in full, but it seems that Rhino Quaternions doesn’t support rotating other Rhino classes directly, like transform does.

Although Rhino quaternions supports arithmetics with other quaternions, it seems that the only way to apply rotations to other classes is via rotations retreived from the quaternins as Angle-Axis values or by quaternions yielding rotated Planes after some pure q (only) arithmethics (or by creating Transform from those results).

For example, I have noticed that in plethora of documentation for quanternions out there, there’s often assumed that multiplication (rotation) of quaternions with vectors can be done directly with quaternions, i.e. “v1 = q * v”. It simplifies life if one can use “std formulae” as documented in scientific papers etc.

Q: Also, is there any chance that extended support for quaternions arithmetics be added to the RhinoCommon Quaternion class, as well as a few more “essential” methods like;

Well, any compentent game engine provides these (above examples from Unity).

And in addition to arithmetic “compatibility” with other relevant Rhino classes, perhaps some overload equivalents yielding Transforms for relevant similar quaternion operations.

That would be gold.

Problem is that quaternions are not the kind of thing that you deal with intuitively, math abstractyions as they are, therefore it’s easy to forget the reasoning about them from time to time. I guess this is why you pad classes with methods hidning complex reasoning.

Although Rhino quaternions supports arithmetics with other quaternions, it seems that the only way to apply rotations to other classes is via rotations retreived from the quaternins as Angle-Axis values or by quaternions yielding rotated Planes after some pure q (only) arithmethics (or by creating Transform from those results).

Correct, as far as I can tell, if you want to transform anything using Quaternions, you’d have to first convert a quaternion into a 4x4 transform using MatrixForm().

Looking at the docs now, it seems Qs have become a lot more mature since I last saw them, but I’m sure at least some of those methods can be added. I’ll add some YT issues for these:

Many of us has struggled with them, and it just keeps haunting us - Planes which doesn’t really know which way to orient itself. But wasn’t it exactly this that Quaternions was good for, avoiding singularities and all that stuff?
LookAt Focus Point
Any way, I’m defining Quaternions based on a Plane which “LookAt” a focus point in 3D space. The direction from the Plane.Origin to the focal Point defines a vector. And based on that vector I create a new perpendicular Plane. This new Plane is then…