diff --git a/src/ActivityAnimation.cpp b/src/ActivityAnimation.cpp index 04039dd..51de794 100644 --- a/src/ActivityAnimation.cpp +++ b/src/ActivityAnimation.cpp @@ -4,32 +4,25 @@ #include #include "Range.hpp" #include "ActivityAnimation.hpp" -#include "utils.hpp" +using namespace std; using namespace fmri; -static inline float correct_timescale(float original) +ActivityAnimation::ActivityAnimation(const vector>> &interactions, + const float *aPositions, const float *bPositions, float xDist) : + bufferLength(3 * interactions.size()) { - float ignore; - return std::modf(original, &ignore); -} + startingPos.reserve(bufferLength); + delta.reserve(bufferLength); -ActivityAnimation::ActivityAnimation(std::size_t count, const float *aPos, const float *bPos, const float xDist) : - bufferLength(3 * count), - startingPos(bufferLength), - delta(bufferLength), - offset(bufferLength) -{ - memcpy(startingPos.data(), aPos, sizeof(aPos[0]) * bufferLength); - for (auto i : Range(bufferLength)) { - delta[i] = bPos[i] - aPos[i]; - } + for (auto &entry : interactions) { + auto *aPos = &aPositions[entry.second.first]; + auto *bPos = &bPositions[entry.second.second]; - auto& random = rng(); - std::uniform_real_distribution rd; - for (auto i : Range(count)) { - offset[i] = rd(random); - delta[3 * i] += xDist; + for (auto i : Range(3)) { + startingPos.emplace_back(aPos[i]); + delta.emplace_back(bPos[i] - aPos[i] + (i % 3 ? 0 : xDist)); + } } } diff --git a/src/ActivityAnimation.hpp b/src/ActivityAnimation.hpp index 3513195..369e88d 100644 --- a/src/ActivityAnimation.hpp +++ b/src/ActivityAnimation.hpp @@ -4,6 +4,7 @@ #include #include #include "Animation.hpp" +#include "utils.hpp" namespace fmri { @@ -11,13 +12,13 @@ namespace fmri : public Animation { public: - ActivityAnimation(std::size_t count, const float* aPos, const float* bPos, const float xDist); + ActivityAnimation(const std::vector>> &interactions, + const float *aPositions, const float *bPositions, float xDist); void draw(float timeScale) override; private: std::size_t bufferLength; std::vector startingPos; std::vector delta; - std::vector offset; }; } \ No newline at end of file diff --git a/src/visualisations.cpp b/src/visualisations.cpp index 7435f57..2d68faf 100644 --- a/src/visualisations.cpp +++ b/src/visualisations.cpp @@ -72,16 +72,6 @@ Animation * fmri::getActivityAnimation(const fmri::LayerData &prevState, const f } const auto entries = computeActivityStrengths(prevState, layer); - const auto bufferSize = 3 * entries.size(); - unique_ptr startingPositions(new float[bufferSize]); - unique_ptr endingPositions(new float[bufferSize]); - - LOG(INFO) << "Creating position buffers for interaction in " << layer.name() << endl; - for (auto i : Range(entries.size())) { - memcpy(startingPositions.get() + 3 * i, prevPositions.data() + 3 * entries[i].second.first, 3 * sizeof(float)); - memcpy(endingPositions.get() + 3 * i, curPositions.data() + 3 * entries[i].second.second, 3 * sizeof(float)); - } - - return new ActivityAnimation(entries.size(), startingPositions.get(), endingPositions.get(), 2.0); + return new ActivityAnimation(entries, prevPositions.data(), curPositions.data(), 2); }