`make-quaternion``X``Y``Z``W``#!optional``NON-GC?`procedure`quaternion-x``POINT`procedure`quaternion-y``POINT`procedure`quaternion-z``POINT`procedure`quaternion-w``POINT`procedure`quaternion-x-set!``POINT`procedure`quaternion-y-set!``POINT`procedure`quaternion-z-set!``POINT`procedure`quaternion-w-set!``POINT`procedureQuaternion constructor, getters, and setters. If

`NON-GC`is`#t`, the quaternion is created in a non-garbage-collected area (the memory will still be freed when there are no more references to the quaternion).