diff options
author | rodri <rgl@antares-labs.eu> | 2020-04-12 23:52:43 +0000 |
---|---|---|
committer | rodri <rgl@antares-labs.eu> | 2020-04-12 23:52:43 +0000 |
commit | fc201ec63c3a98b34bf8abb1b9e72e1551e81d55 (patch) | |
tree | 5f0cdf6d186b86df1724c6f8d2bd775ef6ebbe8a /rframe.c | |
download | libgeometry-fc201ec63c3a98b34bf8abb1b9e72e1551e81d55.tar.gz libgeometry-fc201ec63c3a98b34bf8abb1b9e72e1551e81d55.tar.bz2 libgeometry-fc201ec63c3a98b34bf8abb1b9e72e1551e81d55.zip |
standalone version release.
Diffstat (limited to 'rframe.c')
-rw-r--r-- | rframe.c | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/rframe.c b/rframe.c new file mode 100644 index 0000000..2f7c682 --- /dev/null +++ b/rframe.c @@ -0,0 +1,51 @@ +#include <u.h> +#include <libc.h> +#include <geometry.h> + +Point2 +rframexform(Point2 p, RFrame rf) +{ + Matrix m = { + rf.bx.x, rf.bx.y, -dotvec2(rf.bx, rf.p), + rf.by.x, rf.by.y, -dotvec2(rf.by, rf.p), + 0, 0, 1, + }; + return xform(p, m); +} + +Point3 +rframexform3(Point3 p, RFrame3 rf) +{ + Matrix3 m = { + rf.bx.x, rf.bx.y, rf.bx.z, -dotvec3(rf.bx, rf.p), + rf.by.x, rf.by.y, rf.by.z, -dotvec3(rf.by, rf.p), + rf.bz.x, rf.bz.y, rf.bz.z, -dotvec3(rf.bz, rf.p), + 0, 0, 0, 1, + }; + return xform3(p, m); +} + +Point2 +invrframexform(Point2 p, RFrame rf) +{ + Matrix m = { + rf.bx.x, rf.bx.y, -dotvec2(rf.bx, rf.p), + rf.by.x, rf.by.y, -dotvec2(rf.by, rf.p), + 0, 0, 1, + }; + invm(m); + return xform(p, m); +} + +Point3 +invrframexform3(Point3 p, RFrame3 rf) +{ + Matrix3 m = { + rf.bx.x, rf.bx.y, rf.bx.z, -dotvec3(rf.bx, rf.p), + rf.by.x, rf.by.y, rf.by.z, -dotvec3(rf.by, rf.p), + rf.bz.x, rf.bz.y, rf.bz.z, -dotvec3(rf.bz, rf.p), + 0, 0, 0, 1, + }; + invm3(m); + return xform3(p, m); +} |