Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma once
- #include "Fractal.h"
- class BarnsleyFern : public Fractal{
- public:
- BarnsleyFern(const float XWINDOW, const float YWINDOW);
- void CalculatePoints() ;
- void CalcProbability() ;
- float Map_pointX(float x)override;
- float Map_pointY(float y)override;
- void Func_1(int iteration);
- void Func_2(int iteration);
- void Func_3(int iteration);
- void Func_4(int iteration);
- };
- BarnsleyFern::BarnsleyFern(const float XWINDOW, const float YWINDOW)
- :Fractal(XWINDOW, YWINDOW)
- {
- CalculatePoints();
- MapAllPoints();
- }
- void BarnsleyFern::CalcProbability(){
- m_probability = rand()%100+1;
- //std::cout << "probability -> " << m_probability << std::endl;
- }
- void BarnsleyFern::Func_1(int iteration){
- //std::cout << " FUNC 1 " << std::endl;
- m_xy[iteration].first = 0 * m_xy[iteration-1].first + 0 * m_xy[iteration-1].second;
- m_xy[iteration].second = 0 * m_xy[iteration-1].first + 0.16 * m_xy[iteration-1].second;
- }
- void BarnsleyFern::Func_2(int iteration){
- //std::cout << " FUNC 2 " << std::endl;
- m_xy[iteration].first = 0.85 * m_xy[iteration-1].first + 0.04 * m_xy[iteration-1].second;
- m_xy[iteration].second = -0.04 * m_xy[iteration-1].first + 0.85 * m_xy[iteration-1].second + 1.2f;
- }
- void BarnsleyFern::Func_3(int iteration){
- //std::cout << " FUNC 3 " << std::endl;
- m_xy[iteration].first = 0.20 * m_xy[iteration-1].first + -0.26 * m_xy[iteration-1].second;
- m_xy[iteration].second = 0.23 * m_xy[iteration-1].first + 0.22 * m_xy[iteration-1].second + 1.6f;
- }
- void BarnsleyFern::Func_4(int iteration){
- //std::cout << " FUNC 4 " << std::endl;
- m_xy[iteration].first = -0.15 * m_xy[iteration-1].first + 0.28 * m_xy[iteration-1].second;
- m_xy[iteration].second = 0.26 * m_xy[iteration-1].first + 0.24 * m_xy[iteration-1].second + 0.44f;
- }
- void BarnsleyFern::CalculatePoints(){
- srand(time(NULL));
- for(int i = 1; i < ITERATION_MAX; ++i){
- CalcProbability();
- if(0 < m_probability && m_probability <= 1){
- Func_1(i);
- }
- else if(1 < m_probability && m_probability <= 86){
- Func_2(i);
- }
- else if(86 < m_probability && m_probability <= 93){
- Func_3(i);
- }
- else if(93 < m_probability && m_probability <= 100){
- Func_4(i);
- }
- }
- }
- float BarnsleyFern::Map_pointX(float x){
- return static_cast<float>(0.14 * m_xwindow * x + m_xwindow / 2.0 -30);
- }
- float BarnsleyFern::Map_pointY(float y){
- return static_cast<float>(0.135 * m_ywindow * y -20);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement