|
JK2eA
|
00001 #pragma once 00002 00003 #include "CurveGraph.h" 00004 #include "Interpolators.h" 00005 00006 00010 template<class T> 00011 class CCurveGraphPolynom : public CCurveGraph<T> { 00012 public: 00016 CCurveGraphPolynom() 00017 { 00018 } 00024 virtual T Interpolate(float time) 00025 { 00026 // LAGRANGE 00027 00028 00029 T dd1(1.0f); 00030 T dd2(1.0f); 00031 T sum(0.0f); 00032 00033 if(time > m_nodes.back().t) { 00034 m_currIndex = -1; 00035 return sum; 00036 } 00037 00038 m_currIndex = 0; 00039 for(int i = 0; i < (int)m_nodes.size(); i++) { 00040 dd1 = 1.0f; dd2 = 1.0f; 00041 for(int j = 0; j < (int)m_nodes.size(); j++) { 00042 if(j == i) continue; 00043 00044 dd1 *= time - m_nodes[j].t; 00045 dd2 *= m_nodes[i].t - m_nodes[j].t; 00046 } 00047 sum += m_nodes[i].value * (dd1 / dd2); 00048 } 00049 00050 return sum; 00051 } 00052 00053 };
1.8.0