aboutsummaryrefslogtreecommitdiff
path: root/rframe.c
diff options
context:
space:
mode:
authorrodri <rgl@antares-labs.eu>2020-04-12 23:52:43 +0000
committerrodri <rgl@antares-labs.eu>2020-04-12 23:52:43 +0000
commitfc201ec63c3a98b34bf8abb1b9e72e1551e81d55 (patch)
tree5f0cdf6d186b86df1724c6f8d2bd775ef6ebbe8a /rframe.c
downloadlibgeometry-fc201ec63c3a98b34bf8abb1b9e72e1551e81d55.tar.gz
libgeometry-fc201ec63c3a98b34bf8abb1b9e72e1551e81d55.tar.bz2
libgeometry-fc201ec63c3a98b34bf8abb1b9e72e1551e81d55.zip
standalone version release.
Diffstat (limited to 'rframe.c')
-rw-r--r--rframe.c51
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);
+}