vrecko
virtual reality framework
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
ComputeStrategy.h
Go to the documentation of this file.
1 #pragma once
2 #include <osg\Vec3>
3 #include <string>
4 #include <vector>
5 #include <osg\Referenced>
6 
7 #include "Parameters.h"
8 
9 namespace APDYNAMICART
10 {
12 //Interface
14 
15 class IComputeStrategy : public osg::Referenced
16 {
17 public:
18  virtual osg::Vec3 getNextPoint( double x, double y, double z, const Parameters& params ) = 0;
19  virtual double getDefaultSize() = 0;
20  virtual ~IComputeStrategy() {};
21 
22  virtual std::string const AttractorName() = 0;
23 };
24 
25 typedef osg::ref_ptr<IComputeStrategy> IComputeStrategyPtr;
26 
28 //Strategy classes
30 
32 {
33  std::string const AttractorName() { return "Null"; }
34 
35  virtual osg::Vec3 getNextPoint( double x, double y, double z, const Parameters& params )
36  {
37  return osg::Vec3();
38  }
39 
40  virtual double getDefaultSize()
41  {
42  return 0.0;
43  }
44 };
45 
47 {
48  std::string const AttractorName() { return "Lorenz"; }
49 
50  virtual osg::Vec3 getNextPoint( double x, double y, double z, const Parameters& params )
51  {
52  return osg::Vec3(x + params[0].value * params[3].value * (y - x),
53  y + params[3].value * (params[1].value * x - y - z*x),
54  z + params[3].value * (x*y - params[2].value * z));
55  }
56 
57  virtual double getDefaultSize()
58  {
59  return 0.5;
60  }
61 };
62 
64 {
65  std::string const AttractorName() { return "Lorenz84"; }
66 
67  virtual osg::Vec3 getNextPoint( double x, double y, double z, const Parameters& params )
68  {
69  return osg::Vec3(x + params[4].value * (-params[0].value*x -y*y - z*z + params[0].value * params[2].value),
70  y + params[4].value * (-y + x*y -params[1].value*x*z + params[3].value),
71  z + params[4].value * (-z + params[1].value*x*y +x*z));
72  }
73 
74  virtual double getDefaultSize()
75  {
76  return 1.5;
77  }
78 
79 };
80 
82 {
83  std::string const AttractorName() { return "Pickover"; }
84 
85  virtual osg::Vec3 getNextPoint( double x, double y, double z, const Parameters& params )
86  {
87  return osg::Vec3(sin(params[0].value * y) - z * cos(params[1].value * x),
88  z * sin(params[2].value * x) - cos(params[3].value * y),
89  /*params[4].value * */ sin(x));
90  }
91 
92  virtual double getDefaultSize()
93  {
94  return 5.0;
95  }
96 
97 };
98 
100 {
101  std::string const AttractorName() { return "Rossler"; }
102 
103  virtual osg::Vec3 getNextPoint( double x, double y, double z, const Parameters& params )
104  {
105  return osg::Vec3(x - params[3].value * (y + z),
106  y + params[3].value * (params[1].value + (x*y) - (params[2].value*y)),
107  z + params[3].value * (x + (params[0].value*z)));
108  }
109 
110  virtual double getDefaultSize()
111  {
112  return 0.1;
113  }
114 
115 };
116 
118 {
119  std::string const AttractorName() { return "Polynomial"; }
120 
121  virtual osg::Vec3 getNextPoint( double x, double y, double z, const Parameters& params )
122  {
123  return osg::Vec3(params[0].value + y - y*z,
124  params[1].value + z - x*z,
125  params[2].value + x - x*y);
126  }
127 
128  virtual double getDefaultSize()
129  {
130  return 1.0;
131  }
132 
133 };
134 
136 {
137  std::string const AttractorName() { return "Ikeda"; }
138 
139  virtual osg::Vec3 getNextPoint( double x, double y, double z, const Parameters& params )
140  {
141  return osg::Vec3(params[0].value + params[1].value * (x * cos(z) - y * sin(z)),
142  params[1].value * (x * sin(z) + y * cos(z)),
143  params[2].value - params[3].value / (1 + x * x + y * y));
144  }
145 
146  virtual double getDefaultSize()
147  {
148  return 2.5;
149  }
150 
151 };
152 }