| .TH QBALL 3 |
| .SH NAME |
| qball \- 3-d rotation controller |
| .SH SYNOPSIS |
| .PP |
| .B |
| #include <draw.h> |
| .PP |
| .B |
| #include <geometry.h> |
| .PP |
| .B |
| void qball(Rectangle r, Mouse *mousep, |
| .br |
| .B |
| Quaternion *orientation, |
| .br |
| .B |
| void (*redraw)(void), Quaternion *ap) |
| .SH DESCRIPTION |
| .I Qball |
| is an interactive controller that allows arbitrary 3-space rotations to be specified with |
| the mouse. Imagine a sphere with its center at the midpoint of rectangle |
| .IR r , |
| and diameter the smaller of |
| .IR r 's |
| dimensions. Dragging from one point on the sphere to another specifies the endpoints of a |
| great-circle arc. (Mouse points outside the sphere are projected to the nearest point |
| on the sphere.) The axis of rotation is normal to the plane of the arc, and the |
| angle of rotation is twice the angle of the arc. |
| .PP |
| Argument |
| .I mousep |
| is a pointer to the mouse event that triggered the interaction. It should |
| have some button set. |
| .I Qball |
| will read more events into |
| .IR mousep , |
| and return when no buttons are down. |
| .PP |
| While |
| .I qball |
| is reading mouse events, it calls out to the caller-supplied routine |
| .IR redraw , |
| which is expected to update the screen to reflect the changing orientation. |
| Argument |
| .I orientation |
| is the orientation that |
| .I redraw |
| should examine, represented as a unit Quaternion (see |
| .IR quaternion(9.2)). |
| The caller may set it to any orientation. |
| It will be updated before each call to |
| .I redraw |
| (and on return) by multiplying by the rotation specified with the mouse. |
| .PP |
| It is possible to restrict |
| .I qball's |
| attention to rotations about a particular axis. |
| If |
| .I ap |
| is null, the rotation is unconstrained. |
| Otherwise, the rotation will be about the same axis as |
| .IR *ap . |
| This is accomplished by projecting points on the sphere to |
| the nearest point also on the plane through the sphere's center |
| and normal to the axis. |
| .SH SOURCE |
| .B \*9/src/libgeometry/qball.c |
| .SH SEE ALSO |
| .IR quaternion (3) |
| .br |
| Ken Shoemake, |
| ``Animating Rotation with Quaternion Curves'', |
| .I |
| SIGGRAPH '85 Conference Proceedings. |