My old project for strange attractors
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.
 
 
 

40 lines
1023 B

#ifndef UNRAVELHEART3D_HPP
#define UNRAVELHEART3D_HPP
#include "../AttractorKernel.hpp"
#include <cmath>
class UnravelHeart3D : public AttractorKernel {
public:
UnravelHeart3D():
AttractorKernel(3, 8) {}
virtual std::string type() { return "unravel heart"; };
virtual void operator()() {
std::swap(vectorNew, vectorOld);
vectorNew[0] = parameters[0]*(vectorOld[2] + parameters[1]);
vectorNew[1] = parameters[2]*(vectorOld[0] + parameters[3]);
vectorNew[2] = parameters[4]*(vectorOld[1] + parameters[5]);
const double x = vectorNew[0] / parameters[6];
const double y = vectorNew[1] / parameters[6];
const double z = vectorNew[2] / parameters[6];
const double dist = x*x + y*y + 2.0*z*z;
if(parameters[7] * dist - parameters[7] > x*x*y*y*y) {
const double sqrtDist = std::sqrt(dist);
const double p = 1.0 - parameters[6] * (static_cast<int>(sqrtDist / parameters[6]) + 1.0) / sqrtDist;
vectorNew[0] *= p;
vectorNew[1] *= p;
vectorNew[2] *= p;
}
}
};
#endif // UNRAVEL_HPP