aboutsummaryrefslogtreecommitdiff
path: root/geometry.cpp
diff options
context:
space:
mode:
authorSamuel Fadel <samuelfadel@gmail.com>2015-09-29 14:59:59 -0300
committerSamuel Fadel <samuelfadel@gmail.com>2015-09-29 14:59:59 -0300
commit30f327b2fd25104916bffe6fe76823f0dbe35a72 (patch)
tree3ceb449cbd3b6e8965e891efe3ea6b36183a6b10 /geometry.cpp
parent56c9ebb2e41bd0487199ed95838cd9e1c1d9dd8d (diff)
Inital history graph implementation and using linear scales where applicable.
- geometry.h for geometry calculation functions - scale.h for implementations of scales (currently only the linear scale) - updated main_view.qml for the new HistoryGraph component - HistoryGraph displays each subsample used as a mini scatterplot (no colors currently) - Scatterplot now uses scale.h for transformations - Code cleanup and some bug fixes
Diffstat (limited to 'geometry.cpp')
-rw-r--r--geometry.cpp39
1 files changed, 39 insertions, 0 deletions
diff --git a/geometry.cpp b/geometry.cpp
new file mode 100644
index 0000000..3a4a861
--- /dev/null
+++ b/geometry.cpp
@@ -0,0 +1,39 @@
+#include "geometry.h"
+
+static const float PI = 3.1415f;
+
+int calculateCircleVertexCount(float radius)
+{
+ // 10 * sqrt(r) \approx 2*pi / acos(1 - 1 / (4*r))
+ return int(10.0 * sqrt(radius));
+}
+
+void updateCircleGeometry(QSGGeometry *geometry, float radius, float cx, float cy)
+{
+ int vertexCount = geometry->vertexCount();
+
+ float theta = 2 * PI / float(vertexCount);
+ float c = cosf(theta);
+ float s = sinf(theta);
+ float x = radius;
+ float y = 0;
+
+ QSGGeometry::Point2D *vertexData = geometry->vertexDataAsPoint2D();
+ for (int i = 0; i < vertexCount; i++) {
+ vertexData[i].set(x + cx, y + cy);
+
+ float t = x;
+ x = c*x - s*y;
+ y = s*t + c*y;
+ }
+}
+
+void updateRectGeometry(QSGGeometry *geometry, float x, float y, float w, float h)
+{
+ QSGGeometry::Point2D *vertexData = geometry->vertexDataAsPoint2D();
+
+ vertexData[0].set(x, y);
+ vertexData[1].set(x + w, y);
+ vertexData[2].set(x + w, y + h);
+ vertexData[3].set(x, y + h);
+}