aboutsummaryrefslogtreecommitdiff
path: root/libgeometry/quaternion.c
diff options
context:
space:
mode:
authorrodri <rgl@antares-labs.eu>2020-04-17 11:37:10 +0000
committerrodri <rgl@antares-labs.eu>2020-04-17 11:37:10 +0000
commite77a34629060abfad8e463efda0c3ffc54379793 (patch)
tree9151e47fab853248f95594e6ef48999a1ff6255f /libgeometry/quaternion.c
parent263444216730830b712a4f8f3a087513c5ac93e9 (diff)
download3dee-e77a34629060abfad8e463efda0c3ffc54379793.tar.gz
3dee-e77a34629060abfad8e463efda0c3ffc54379793.tar.bz2
3dee-e77a34629060abfad8e463efda0c3ffc54379793.zip
roll everything back.
Diffstat (limited to 'libgeometry/quaternion.c')
-rw-r--r--libgeometry/quaternion.c90
1 files changed, 0 insertions, 90 deletions
diff --git a/libgeometry/quaternion.c b/libgeometry/quaternion.c
deleted file mode 100644
index b8eaa88..0000000
--- a/libgeometry/quaternion.c
+++ /dev/null
@@ -1,90 +0,0 @@
-#include <u.h>
-#include <libc.h>
-#include "../geometry.h"
-
-Quaternion
-Quat(double r, double i, double j, double k)
-{
- return (Quaternion){r, i, j, k};
-}
-
-Quaternion
-Quatvec(double s, Point3 v)
-{
- return (Quaternion){s, v.x, v.y, v.z};
-}
-
-Quaternion
-addq(Quaternion a, Quaternion b)
-{
- return (Quaternion){a.r+b.r, a.i+b.i, a.j+b.j, a.k+b.k};
-}
-
-Quaternion
-subq(Quaternion a, Quaternion b)
-{
- return (Quaternion){a.r-b.r, a.i-b.i, a.j-b.j, a.k-b.k};
-}
-
-Quaternion
-mulq(Quaternion q, Quaternion r)
-{
- Point3 qv, rv, tmp;
-
- qv = Vec3(q.i, q.j, q.k);
- rv = Vec3(r.i, r.j, r.k);
- tmp = addpt3(addpt3(mulpt3(rv, q.r), mulpt3(qv, r.r)), crossvec3(qv, rv));
- return (Quaternion){q.r*r.r - dotvec3(qv, rv), tmp.x, tmp.y, tmp.z};
-}
-
-Quaternion
-smulq(Quaternion q, double s)
-{
- return (Quaternion){q.r*s, q.i*s, q.j*s, q.k*s};
-}
-
-Quaternion
-sdivq(Quaternion q, double s)
-{
- return (Quaternion){q.r/s, q.i/s, q.j/s, q.k/s};
-}
-
-double
-dotq(Quaternion q, Quaternion r)
-{
- return q.r*r.r + q.i*r.i + q.j*r.j + q.k*r.k;
-}
-
-Quaternion
-invq(Quaternion q)
-{
- double len²;
-
- len² = dotq(q, q);
- if(len² == 0)
- return (Quaternion){0, 0, 0, 0};
- return (Quaternion){q.r/len², -q.i/len², -q.j/len², -q.k/len²};
-}
-
-double
-qlen(Quaternion q)
-{
- return sqrt(q.r*q.r + q.i*q.i + q.j*q.j + q.k*q.k);
-}
-
-Quaternion
-normq(Quaternion q)
-{
- return sdivq(q, qlen(q));
-}
-
-Point3
-qrotate(Point3 p, Point3 axis, double angle)
-{
- Quaternion qaxis, qr;
-
- angle /= 2;
- qaxis = Quatvec(cos(angle), mulpt3(axis, sin(angle)));
- qr = mulq(mulq(qaxis, Quatvec(0, p)), invq(qaxis));
- return Vec3(qr.i, qr.j, qr.k);
-}