summaryrefslogtreecommitdiffstats
path: root/include/astra
diff options
context:
space:
mode:
authorWillem Jan Palenstijn <Willem.Jan.Palenstijn@cwi.nl>2019-04-05 16:07:21 +0200
committerWillem Jan Palenstijn <Willem.Jan.Palenstijn@cwi.nl>2019-09-25 14:10:10 +0200
commit2e334ee443a8fd3ce0a6218dd877117a67163533 (patch)
tree9fa93a5b5ef89cf9d77367168c2b68ca4aeecc14 /include/astra
parentb595d260193b39981834211682ff41fd1a91e398 (diff)
downloadastra-2e334ee443a8fd3ce0a6218dd877117a67163533.tar.gz
astra-2e334ee443a8fd3ce0a6218dd877117a67163533.tar.bz2
astra-2e334ee443a8fd3ce0a6218dd877117a67163533.tar.xz
astra-2e334ee443a8fd3ce0a6218dd877117a67163533.zip
Adjust par3d adjoint scaling, and clean up
Diffstat (limited to 'include/astra')
-rw-r--r--include/astra/cuda/3d/util3d.h47
1 files changed, 47 insertions, 0 deletions
diff --git a/include/astra/cuda/3d/util3d.h b/include/astra/cuda/3d/util3d.h
index 0146d2d..200abfc 100644
--- a/include/astra/cuda/3d/util3d.h
+++ b/include/astra/cuda/3d/util3d.h
@@ -64,6 +64,53 @@ float dotProduct3D(cudaPitchedPtr data, unsigned int x, unsigned int y, unsigned
int calcNextPowerOfTwo(int _iValue);
+struct Vec3 {
+ double x;
+ double y;
+ double z;
+ Vec3(double x_, double y_, double z_) : x(x_), y(y_), z(z_) { }
+ Vec3 operator+(const Vec3 &b) const {
+ return Vec3(x + b.x, y + b.y, z + b.z);
+ }
+ Vec3 operator-(const Vec3 &b) const {
+ return Vec3(x - b.x, y - b.y, z - b.z);
+ }
+ Vec3 operator-() const {
+ return Vec3(-x, -y, -z);
+ }
+ double norm() const {
+ return sqrt(x*x + y*y + z*z);
+ }
+};
+
+static double det3x(const Vec3 &b, const Vec3 &c) {
+ return (b.y * c.z - b.z * c.y);
+}
+static double det3y(const Vec3 &b, const Vec3 &c) {
+ return -(b.x * c.z - b.z * c.x);
+}
+
+static double det3z(const Vec3 &b, const Vec3 &c) {
+ return (b.x * c.y - b.y * c.x);
+}
+
+static double det3(const Vec3 &a, const Vec3 &b, const Vec3 &c) {
+ return a.x * det3x(b,c) + a.y * det3y(b,c) + a.z * det3z(b,c);
+}
+
+static Vec3 cross3(const Vec3 &a, const Vec3 &b) {
+ return Vec3(det3x(a,b), det3y(a,b), det3z(a,b));
+}
+
+static Vec3 scaled_cross3(const Vec3 &a, const Vec3 &b, const Vec3 &sc) {
+ Vec3 ret = cross3(a, b);
+ ret.x *= sc.y * sc.z;
+ ret.y *= sc.x * sc.z;
+ ret.z *= sc.x * sc.y;
+ return ret;
+}
+
+
}
#endif