math
This package extends Asymptote
's mathematical capabilities with
radian/degree conversion routines, point-in-polygon and intersection
algorithms, matrix arithmetic and inversion, and a linear
equation solver (via Gauss-Jordan elimination).
Unlike MetaPost
, Asymptote
does not implicitly solve
linear equations and therefore does not have the notion of a
whatever
unknown. The following routine provides a useful
replacement for a common use of whatever
: finding the
intersection point of the lines through P
, Q
and p
, q
, respectively:
pair extension(pair P, pair Q, pair p, pair q);
PQ
and pq
.
Here are some additional routines provided in the math
package:
void drawline(picture pic=currentpicture, pair P, pair Q, pen p=currentpen);
P
and Q
, without altering the size of picture pic
,
using pen p
.
real intersect(triple P, triple Q, triple n, triple Z);
PQ
with the plane perpendicular to n
and passing through Z
.
triple intersectionpoint(triple n0, triple P0, triple n1, triple P1);
n0
and n1
passing through points P0
and P1
,
respectively. If the planes are parallel, return
(infinity,infinity,infinity)
.
real[] solve(real[][] a, real[] b)
a
x=b
by Gauss-Jordan
elimination, returning the solution x, where a
is an
n \times n matrix and b
is an array of length n.
For example:
import math; real[][] a={{1,-2,3,0},{4,-5,6,2},{-7,-8,10,5},{1,50,1,-2}}; real[] b={7,19,33,3}; real[] x=solve(a,b); write(a); write(); write(b); write(); write(x); write(); write(a*x);If the matrix
a
is tridiagonal, the routine tridiagonal
provides
a more efficient algorithm (see tridiagonal).
real[][] solve(real[][] a, real[][] b)
a
x=b
returning the
solution x, where a
is an n \times n matrix and
b
is an n \times m matrix.
bool straight(path p)
true
iff the path p
is straight.