[grits] Add vector operations to utilities
- From: Andy Spencer <andys src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [grits] Add vector operations to utilities
- Date: Mon, 24 Jan 2011 05:30:05 +0000 (UTC)
commit a4cd6299ce7e513a68dc80d23fba56238337107f
Author: Andy Spencer <andy753421 gmail com>
Date: Sat Jan 22 19:57:15 2011 +0000
Add vector operations to utilities
src/grits-util.c | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
src/grits-util.h | 8 ++++++
2 files changed, 76 insertions(+), 0 deletions(-)
---
diff --git a/src/grits-util.c b/src/grits-util.c
index a792014..2613596 100644
--- a/src/grits-util.c
+++ b/src/grits-util.c
@@ -235,3 +235,71 @@ gdouble lon_avg(gdouble a, gdouble b)
}
return avg;
}
+
+/**
+ * crossd3:
+ * @a: the left point
+ * @b: the center point
+ * @c: the right point
+ * @out: the cross product
+ *
+ * Calculate the cross product of three points
+ */
+void crossd3(gdouble *a, gdouble *b, gdouble *c, gdouble *out)
+{
+ double ba[3], bc[3];
+
+ ba[0] = a[0] - b[0];
+ ba[1] = a[1] - b[1];
+ ba[2] = a[2] - b[2];
+
+ bc[0] = c[0] - b[0];
+ bc[1] = c[1] - b[1];
+ bc[2] = c[2] - b[2];
+
+ crossd(ba, bc, out);
+}
+
+/**
+ * crossd:
+ * @a: the first vector
+ * @b: the second vector
+ * @c: the cross product
+ *
+ * Calculate the cross product of two vectors
+ */
+void crossd(gdouble *a, gdouble *b, gdouble *out)
+{
+ out[0] = a[1] * b[2] - a[2] * b[1];
+ out[1] = a[2] * b[0] - a[0] * b[2];
+ out[2] = a[0] * b[1] - a[1] * b[0];
+}
+
+/**
+ * lengthd:
+ * @a: the vector
+ *
+ * Calculate the length (magnitude) of a vector.
+ *
+ * Returns: the length
+ */
+gdouble lengthd(gdouble *a)
+{
+ return sqrt(a[0] * a[0] +
+ a[1] * a[1] +
+ a[2] * a[2]);
+}
+
+/**
+ * normd:
+ * @a: the first longitude
+ *
+ * Normalize a vector to a mangitude of 1
+ */
+void normd(gdouble *a)
+{
+ gdouble total = lengthd(a);
+ a[0] = a[0] / total;
+ a[1] = a[1] / total;
+ a[2] = a[2] / total;
+}
diff --git a/src/grits-util.h b/src/grits-util.h
index 0771541..3c331f0 100644
--- a/src/grits-util.h
+++ b/src/grits-util.h
@@ -202,6 +202,14 @@ gdouble ll2m(gdouble lon_dist, gdouble lat);
gdouble distd(gdouble *a, gdouble *b);
+void crossd(gdouble *a, gdouble *b, gdouble *out);
+
+void crossd3(gdouble *a, gdouble *b, gdouble *c, gdouble *out);
+
+gdouble lengthd(gdouble *a);
+
+void normd(gdouble *a);
+
gdouble lon_avg(gdouble a, gdouble b);
#endif
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]