plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

geometry.h (2792B)


      1 #ifndef _GEOMETRY_H_
      2 #define _GEOMETRY_H_ 1
      3 #if defined(__cplusplus)
      4 extern "C" { 
      5 #endif
      6 
      7 
      8 AUTOLIB(geometry)
      9 
     10 typedef double Matrix[4][4];
     11 typedef struct Point3 Point3;
     12 typedef struct Quaternion Quaternion;
     13 typedef struct Space Space;
     14 struct Point3{
     15 	double x, y, z, w;
     16 };
     17 struct Quaternion{
     18 	double r, i, j, k;
     19 };
     20 struct Space{
     21 	Matrix t;
     22 	Matrix tinv;
     23 	Space *next;
     24 };
     25 /*
     26  * 3-d point arithmetic
     27  */
     28 Point3 add3(Point3 a, Point3 b);
     29 Point3 sub3(Point3 a, Point3 b);
     30 Point3 neg3(Point3 a);
     31 Point3 div3(Point3 a, double b);
     32 Point3 mul3(Point3 a, double b);
     33 int eqpt3(Point3 p, Point3 q);
     34 int closept3(Point3 p, Point3 q, double eps);
     35 double dot3(Point3 p, Point3 q);
     36 Point3 cross3(Point3 p, Point3 q);
     37 double len3(Point3 p);
     38 double dist3(Point3 p, Point3 q);
     39 Point3 unit3(Point3 p);
     40 Point3 midpt3(Point3 p, Point3 q);
     41 Point3 lerp3(Point3 p, Point3 q, double alpha);
     42 Point3 reflect3(Point3 p, Point3 p0, Point3 p1);
     43 Point3 nearseg3(Point3 p0, Point3 p1, Point3 testp);
     44 double pldist3(Point3 p, Point3 p0, Point3 p1);
     45 double vdiv3(Point3 a, Point3 b);
     46 Point3 vrem3(Point3 a, Point3 b);
     47 Point3 pn2f3(Point3 p, Point3 n);
     48 Point3 ppp2f3(Point3 p0, Point3 p1, Point3 p2);
     49 Point3 fff2p3(Point3 f0, Point3 f1, Point3 f2);
     50 Point3 pdiv4(Point3 a);
     51 Point3 add4(Point3 a, Point3 b);
     52 Point3 sub4(Point3 a, Point3 b);
     53 /*
     54  * Quaternion arithmetic
     55  */
     56 void qtom(Matrix, Quaternion);
     57 Quaternion mtoq(Matrix);
     58 Quaternion qadd(Quaternion, Quaternion);
     59 Quaternion qsub(Quaternion, Quaternion);
     60 Quaternion qneg(Quaternion);
     61 Quaternion qmul(Quaternion, Quaternion);
     62 Quaternion p9qdiv(Quaternion, Quaternion);
     63 Quaternion qunit(Quaternion);
     64 Quaternion qinv(Quaternion);
     65 double qlen(Quaternion);
     66 Quaternion slerp(Quaternion, Quaternion, double);
     67 Quaternion qmid(Quaternion, Quaternion);
     68 Quaternion qsqrt(Quaternion);
     69 void qball(Rectangle, Mouse *, Quaternion *, void (*)(void), Quaternion *);
     70 /*
     71  * Matrix arithmetic
     72  */
     73 void ident(Matrix);
     74 void matmul(Matrix, Matrix);
     75 void matmulr(Matrix, Matrix);
     76 double determinant(Matrix);
     77 void adjoint(Matrix, Matrix);
     78 double invertmat(Matrix, Matrix);
     79 /*
     80  * Space stack routines
     81  */
     82 Space *pushmat(Space *);
     83 Space *popmat(Space *);
     84 void rot(Space *, double, int);
     85 void qrot(Space *, Quaternion);
     86 void scale(Space *, double, double, double);
     87 void move(Space *, double, double, double);
     88 void xform(Space *, Matrix);
     89 void ixform(Space *, Matrix, Matrix);
     90 void look(Space *, Point3, Point3, Point3);
     91 int persp(Space *, double, double, double);
     92 void viewport(Space *, Rectangle, double);
     93 Point3 xformpoint(Point3, Space *, Space *);
     94 Point3 xformpointd(Point3, Space *, Space *);
     95 Point3 xformplane(Point3, Space *, Space *);
     96 #define	radians(d)	((d)*.01745329251994329572)
     97 
     98 #ifndef NOPLAN9DEFINES
     99 #define	qdiv	p9qdiv	/* for NetBSD */
    100 #endif
    101 
    102 #if defined(__cplusplus)
    103 }
    104 #endif
    105 #endif