URI: 
       tqball.3 - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
       tqball.3 (1999B)
       ---
            1 .TH QBALL 3
            2 .SH NAME
            3 qball \- 3-d rotation controller
            4 .SH SYNOPSIS
            5 .PP
            6 .B
            7 #include <draw.h>
            8 .PP
            9 .B
           10 #include <geometry.h>
           11 .PP
           12 .B
           13 void qball(Rectangle r, Mouse *mousep,
           14 .br
           15 .B
           16         Quaternion *orientation,
           17 .br
           18 .B
           19         void (*redraw)(void), Quaternion *ap)
           20 .SH DESCRIPTION
           21 .I Qball
           22 is an interactive controller that allows arbitrary 3-space rotations to be specified with
           23 the mouse.  Imagine a sphere with its center at the midpoint of rectangle
           24 .IR r ,
           25 and diameter the smaller of
           26 .IR r 's
           27 dimensions.  Dragging from one point on the sphere to another specifies the endpoints of a
           28 great-circle arc.  (Mouse points outside the sphere are projected to the nearest point
           29 on the sphere.)  The axis of rotation is normal to the plane of the arc, and the
           30 angle of rotation is twice the angle of the arc.
           31 .PP
           32 Argument
           33 .I mousep
           34 is a pointer to the mouse event that triggered the interaction.  It should
           35 have some button set.
           36 .I Qball
           37 will read more events into
           38 .IR mousep ,
           39 and return when no buttons are down.
           40 .PP
           41 While
           42 .I qball
           43 is reading mouse events, it calls out to the caller-supplied routine
           44 .IR redraw ,
           45 which is expected to update the screen to reflect the changing orientation.
           46 Argument
           47 .I orientation
           48 is the orientation that
           49 .I redraw
           50 should examine, represented as a unit Quaternion (see
           51 .IR quaternion(9.2)).
           52 The caller may set it to any orientation.
           53 It will be updated before each call to
           54 .I redraw
           55 (and on return) by multiplying by the rotation specified with the mouse.
           56 .PP
           57 It is possible to restrict
           58 .I qball's
           59 attention to rotations about a particular axis.
           60 If
           61 .I ap
           62 is null, the rotation is unconstrained.
           63 Otherwise, the rotation will be about the same axis as
           64 .IR *ap .
           65 This is accomplished by projecting points on the sphere to
           66 the nearest point also on the plane through the sphere's center
           67 and normal to the axis.
           68 .SH SOURCE
           69 .B \*9/src/libgeometry/qball.c
           70 .SH SEE ALSO
           71 .MR quaternion (3)
           72 .br
           73 Ken Shoemake,
           74 ``Animating Rotation with Quaternion Curves'',
           75 .I
           76 SIGGRAPH '85 Conference Proceedings.