aboutsummaryrefslogtreecommitdiff
path: root/include/geometry.h
diff options
context:
space:
mode:
authorrsc <devnull@localhost>2005-01-04 21:21:32 +0000
committerrsc <devnull@localhost>2005-01-04 21:21:32 +0000
commit5ba841dffa1f6cda712ebcff27c55c9d0a672c67 (patch)
tree53b6bbf68aabe02f01549c08425c8c797ef3e96f /include/geometry.h
parent94b5e3ff1dd81855814b66a88a2f8a9b984e90dd (diff)
downloadplan9port-5ba841dffa1f6cda712ebcff27c55c9d0a672c67.tar.gz
plan9port-5ba841dffa1f6cda712ebcff27c55c9d0a672c67.tar.bz2
plan9port-5ba841dffa1f6cda712ebcff27c55c9d0a672c67.zip
more include files.
Diffstat (limited to 'include/geometry.h')
-rw-r--r--include/geometry.h100
1 files changed, 100 insertions, 0 deletions
diff --git a/include/geometry.h b/include/geometry.h
new file mode 100644
index 00000000..274d5b03
--- /dev/null
+++ b/include/geometry.h
@@ -0,0 +1,100 @@
+#ifndef _GEOMETRY_H_
+#define _GEOMETRY_H_ 1
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+
+AUTOLIB(geometry)
+
+typedef double Matrix[4][4];
+typedef struct Point3 Point3;
+typedef struct Quaternion Quaternion;
+typedef struct Space Space;
+struct Point3{
+ double x, y, z, w;
+};
+struct Quaternion{
+ double r, i, j, k;
+};
+struct Space{
+ Matrix t;
+ Matrix tinv;
+ Space *next;
+};
+/*
+ * 3-d point arithmetic
+ */
+Point3 add3(Point3 a, Point3 b);
+Point3 sub3(Point3 a, Point3 b);
+Point3 neg3(Point3 a);
+Point3 div3(Point3 a, double b);
+Point3 mul3(Point3 a, double b);
+int eqpt3(Point3 p, Point3 q);
+int closept3(Point3 p, Point3 q, double eps);
+double dot3(Point3 p, Point3 q);
+Point3 cross3(Point3 p, Point3 q);
+double len3(Point3 p);
+double dist3(Point3 p, Point3 q);
+Point3 unit3(Point3 p);
+Point3 midpt3(Point3 p, Point3 q);
+Point3 lerp3(Point3 p, Point3 q, double alpha);
+Point3 reflect3(Point3 p, Point3 p0, Point3 p1);
+Point3 nearseg3(Point3 p0, Point3 p1, Point3 testp);
+double pldist3(Point3 p, Point3 p0, Point3 p1);
+double vdiv3(Point3 a, Point3 b);
+Point3 vrem3(Point3 a, Point3 b);
+Point3 pn2f3(Point3 p, Point3 n);
+Point3 ppp2f3(Point3 p0, Point3 p1, Point3 p2);
+Point3 fff2p3(Point3 f0, Point3 f1, Point3 f2);
+Point3 pdiv4(Point3 a);
+Point3 add4(Point3 a, Point3 b);
+Point3 sub4(Point3 a, Point3 b);
+/*
+ * Quaternion arithmetic
+ */
+void qtom(Matrix, Quaternion);
+Quaternion mtoq(Matrix);
+Quaternion qadd(Quaternion, Quaternion);
+Quaternion qsub(Quaternion, Quaternion);
+Quaternion qneg(Quaternion);
+Quaternion qmul(Quaternion, Quaternion);
+Quaternion qdiv(Quaternion, Quaternion);
+Quaternion qunit(Quaternion);
+Quaternion qinv(Quaternion);
+double qlen(Quaternion);
+Quaternion slerp(Quaternion, Quaternion, double);
+Quaternion qmid(Quaternion, Quaternion);
+Quaternion qsqrt(Quaternion);
+void qball(Rectangle, Mouse *, Quaternion *, void (*)(void), Quaternion *);
+/*
+ * Matrix arithmetic
+ */
+void ident(Matrix);
+void matmul(Matrix, Matrix);
+void matmulr(Matrix, Matrix);
+double determinant(Matrix);
+void adjoint(Matrix, Matrix);
+double invertmat(Matrix, Matrix);
+/*
+ * Space stack routines
+ */
+Space *pushmat(Space *);
+Space *popmat(Space *);
+void rot(Space *, double, int);
+void qrot(Space *, Quaternion);
+void scale(Space *, double, double, double);
+void move(Space *, double, double, double);
+void xform(Space *, Matrix);
+void ixform(Space *, Matrix, Matrix);
+void look(Space *, Point3, Point3, Point3);
+int persp(Space *, double, double, double);
+void viewport(Space *, Rectangle, double);
+Point3 xformpoint(Point3, Space *, Space *);
+Point3 xformpointd(Point3, Space *, Space *);
+Point3 xformplane(Point3, Space *, Space *);
+#define radians(d) ((d)*.01745329251994329572)
+#if defined(__cplusplus)
+}
+#endif
+#endif