diff options
author | Samuel Fadel <samuelfadel@gmail.com> | 2015-09-29 14:59:59 -0300 |
---|---|---|
committer | Samuel Fadel <samuelfadel@gmail.com> | 2015-09-29 14:59:59 -0300 |
commit | 30f327b2fd25104916bffe6fe76823f0dbe35a72 (patch) | |
tree | 3ceb449cbd3b6e8965e891efe3ea6b36183a6b10 /geometry.cpp | |
parent | 56c9ebb2e41bd0487199ed95838cd9e1c1d9dd8d (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.cpp | 39 |
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); +} |