JK2eA
 All Classes Functions Variables
CurveGraphCatmullRom.h
00001 #pragma once
00002 
00003 #include "CurveGraph.h"
00004 #include "Interpolators.h"
00005 
00010 template<class T>
00011 class CCurveGraphCatmullRom : public CCurveGraph<T> {
00012 public:
00016         CCurveGraphCatmullRom()
00017         {
00018         }
00024         virtual T Interpolate(float time)
00025         {
00026                 //time musi by 0, 1 !! o OOR se stara controller
00027 
00028                 //TESTOVACI
00029                 int i;
00030                 for(i = 0; i < (int)m_nodes.size(); i++) {
00031                         //t je mezi last a next
00032                         if(m_nodes[i].t > time) {
00033                                 break;
00034                         }
00035                 }
00036                 
00037                 float local_time = (m_nodes[i].t - m_nodes[i-1].t);
00038                 local_time =  (time -  m_nodes[i-1].t) / local_time;
00039 
00040 
00041                 // FIXME - tento zpusob je spatny, viz FirstControllerTest = spravne reseni
00042         
00043                 if(i-2 >= 0 && i+1 < (int)m_nodes.size()) {
00044                         return CatmulRomInterpolation(local_time, m_nodes[i - 2].value, m_nodes[i - 1].value, m_nodes[i].value, m_nodes[i + 1].value);
00045                 } else if(i-2 < 0 && i+1<(int) m_nodes.size()){
00046                         return CatmulRomInterpolation(local_time, m_nodes[i - 1].value, m_nodes[i - 1].value, m_nodes[i].value, m_nodes[i+1].value);
00047                 } else{
00048                         return CatmulRomInterpolation(local_time, m_nodes[i - 1].value, m_nodes[i - 1].value, m_nodes[i].value, m_nodes[i].value);
00049                 }
00050                 return 0;
00051         }
00052 
00053 };