TH ARITH3 2
SH NAME
add3, sub3, neg3, div3, mul3, eqpt3, closept3, dot3, cross3, len3, dist3, unit3, midpt3, lerp3, reflect3, nearseg3, pldist3, vdiv3, vrem3, pn2f3, ppp2f3, fff2p3, pdiv4, add4, sub4 \- operations on 3-d points and planes
SH SYNOPSIS
B
#include <draw.h>
br
B
#include <geometry.h>
PP
B
Point3 add3(Point3 a, Point3 b)
PP
B
Point3 sub3(Point3 a, Point3 b)
PP
B
Point3 neg3(Point3 a)
PP
B
Point3 div3(Point3 a, double b)
PP
B
Point3 mul3(Point3 a, double b)
PP
B
int eqpt3(Point3 p, Point3 q)
PP
B
int closept3(Point3 p, Point3 q, double eps)
PP
B
double dot3(Point3 p, Point3 q)
PP
B
Point3 cross3(Point3 p, Point3 q)
PP
B
double len3(Point3 p)
PP
B
double dist3(Point3 p, Point3 q)
PP
B
Point3 unit3(Point3 p)
PP
B
Point3 midpt3(Point3 p, Point3 q)
PP
B
Point3 lerp3(Point3 p, Point3 q, double alpha)
PP
B
Point3 reflect3(Point3 p, Point3 p0, Point3 p1)
PP
B
Point3 nearseg3(Point3 p0, Point3 p1, Point3 testp)
PP
B
double pldist3(Point3 p, Point3 p0, Point3 p1)
PP
B
double vdiv3(Point3 a, Point3 b)
PP
B
Point3 vrem3(Point3 a, Point3 b)
PP
B
Point3 pn2f3(Point3 p, Point3 n)
PP
B
Point3 ppp2f3(Point3 p0, Point3 p1, Point3 p2)
PP
B
Point3 fff2p3(Point3 f0, Point3 f1, Point3 f2)
PP
B
Point3 pdiv4(Point3 a)
PP
B
Point3 add4(Point3 a, Point3 b)
PP
B
Point3 sub4(Point3 a, Point3 b)
SH DESCRIPTION
These routines do arithmetic on points and planes in affine or projective 3-space.
Type
B Point3
is
IP
EX
ta 6n
typedef struct Point3 Point3;
struct Point3{
       double x, y, z, w;
};
EE
PP
Routines whose names end in
B 3
operate on vectors or ordinary points in affine 3-space, represented by their Euclidean
B (x,y,z)
coordinates.
(They assume
B w=1
in their arguments, and set
B w=1
in their results.)
TF reflect3
TP
Name
Description
TP
B add3
Add the coordinates of two points.
TP
B sub3
Subtract coordinates of two points.
TP
B neg3
Negate the coordinates of a point.
TP
B mul3
Multiply coordinates by a scalar.
TP
B div3
Divide coordinates by a scalar.
TP
B eqpt3
Test two points for exact equality.
TP
B closept3
Is the distance between two points smaller than
IR eps ?
TP
B dot3
Dot product.
TP
B cross3
Cross product.
TP
B len3
Distance to the origin.
TP
B dist3
Distance between two points.
TP
B unit3
A unit vector parallel to
IR p .
TP
B midpt3
The midpoint of line segment
IR pq .
TP
B lerp3
Linear interpolation between
I p
and
IR q .
TP
B reflect3
The reflection of point
I p
in the segment joining
I p0
and
IR p1 .
TP
B nearseg3
The closest point to
I testp
on segment
IR "p0 p1" .
TP
B pldist3
The distance from
I p
to segment
IR "p0 p1" .
TP
B vdiv3
Vector divide \(em the length of the component of
I a
parallel to
IR b ,
in units of the length of
IR b .
TP
B vrem3
Vector remainder \(em the component of
I a
perpendicular to
IR b .
Ignoring roundoff, we have
BR "eqpt3(add3(mul3(b, vdiv3(a, b)), vrem3(a, b)), a)" .
PD
PP
The following routines convert amongst various representations of points
and planes.  Planes are represented identically to points, by duality;
a point
B p
is on a plane
B q
whenever
BR p.x*q.x+p.y*q.y+p.z*q.z+p.w*q.w=0 .
Although when dealing with affine points we assume
BR p.w=1 ,
we can't make the same assumption for planes.
The names of these routines are extra-cryptic.  They contain an
B f
(for `face') to indicate a plane,
B p
for a point and
B n
for a normal vector.
The number
B 2
abbreviates the word `to.'
The number
B 3
reminds us, as before, that we're dealing with affine points.
Thus
B pn2f3
takes a point and a normal vector and returns the corresponding plane.
TF reflect3
TP
Name
Description
TP
B pn2f3
Compute the plane passing through
I p
with normal
IR n .
TP
B ppp2f3
Compute the plane passing through three points.
TP
B fff2p3
Compute the intersection point of three planes.
PD
PP
The names of the following routines end in
B 4
because they operate on points in projective 4-space,
represented by their homogeneous coordinates.
TP
pdiv4
Perspective division.  Divide
B p.w
into
IR p 's
coordinates, converting to affine coordinates.
If
B p.w
is zero, the result is the same as the argument.
TP
add4
Add the coordinates of two points.
PD
TP
sub4
Subtract the coordinates of two points.
SH SOURCE
B /sys/src/libgeometry
SH "SEE ALSO
IR matrix (2)