groff 1.23.0 added .MR to its -man macro package. The NEWS file states
that the inclusion of the macro "was prompted by its introduction to
Plan 9 from User Space's troff in August 2020." From d32deab it seems
that the name for Plan 9 from User Space's implementation was suggested
by groff maintainer G. Brandon Robinson.
Not sure if the intention was to make these definitions compatible, but
it would be nice if they were.
Currently, Plan 9 from User Space's .MR expects its second argument to
be parenthesized. groff's .MR does not. This results in extra
parentheses appearing in manual references when viewing Plan 9 from User
Space's manual pages on a system using groff.
77 lines
2.0 KiB
Groff
77 lines
2.0 KiB
Groff
.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
|
|
.MR quaternion 3
|
|
.br
|
|
Ken Shoemake,
|
|
``Animating Rotation with Quaternion Curves'',
|
|
.I
|
|
SIGGRAPH '85 Conference Proceedings.
|