Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | Related Pages

PhaseSpace.cpp

00001 /*************************************************************************** 00002 * This file is part of OpenCAL: Open Computer Animation Library * 00003 * I created OpenCAL as my master's thesis Computer Science (multimedia) * 00004 * at the tUL university in Diepenbeek, Belgium * 00005 * * 00006 * Copyright (C) 2003-2004 by Jeroen Dierckx * 00007 * jeroen.dierckx@student.luc.ac.be * 00008 * * 00009 ***************************************************************************/ 00010 00011 // Includes 00012 #include "PhaseSpace.h" 00013 using namespace OpenCAL; 00014 00015 #include <OpenCAL/Vector3.h> 00016 #include <OpenCAL/Quaternion.h> 00017 using namespace OpenCAL::Utils; 00018 00019 using namespace std; 00020 00021 00022 /****************************** 00023 * Constructors and destructor * 00024 ******************************/ 00025 00033 PhaseSpace::PhaseSpace(unsigned int reserve) 00034 : m_position(0) 00035 { 00036 if(reserve > 0) 00037 m_values.reserve(reserve); 00038 //m_values.resize(size, 0.0f); 00039 } 00040 00041 PhaseSpace::PhaseSpace(const float *values, unsigned int size) 00042 : m_position(0) 00043 { 00044 m_values.reserve(size); 00045 00046 for(unsigned int i = 0; i < size; ++i) 00047 m_values[i] = values[i]; 00048 } 00049 00050 /* 00051 PhaseSpace::PhaseSpace(const PhaseSpace &source) 00052 { 00053 cout << "Copying a phasespace..." << endl; 00054 m_values = source.m_values; 00055 } 00056 */ 00057 00058 PhaseSpace::~PhaseSpace() 00059 { 00060 } 00061 00062 00063 /************************ 00064 * Get and set functions * 00065 ************************/ 00066 00067 void PhaseSpace::setValues(const float *values, unsigned int size) 00068 { 00069 m_values.resize(size); 00070 00071 for(unsigned int i = 0; i < size; ++i) 00072 m_values[i] = values[i]; 00073 } 00074 00075 00076 /************************** 00077 * Concatenation functions * 00078 **************************/ 00079 00080 void PhaseSpace::concat(const PhaseSpace &p) 00081 { 00082 m_values.reserve(m_values.size() + p.getSize()); 00083 00087 m_values.insert(m_values.end(), p.m_values.begin(), p.m_values.end()); 00088 } 00089 00090 void PhaseSpace::concat(const Vector3 &v) 00091 { 00098 m_values.reserve(m_values.size() + 3); 00099 00100 m_values.push_back(v.getX()); 00101 m_values.push_back(v.getY()); 00102 m_values.push_back(v.getZ()); 00103 } 00104 00105 void PhaseSpace::concat(const Quaternion &q) 00106 { 00107 m_values.reserve(m_values.size() + 4); 00108 00109 m_values.push_back(q.getScalar()); 00110 m_values.push_back(q.getVector().getX()); 00111 m_values.push_back(q.getVector().getY()); 00112 m_values.push_back(q.getVector().getZ()); 00113 } 00114 00115 00116 /********************* 00117 * Operator functions * 00118 *********************/ 00119 00120 void PhaseSpace::operator+=(const PhaseSpace &p) 00121 { 00123 00124 for(unsigned int i = 0; i < m_values.size(); ++i) 00125 m_values[i] += p[i]; 00126 } 00127 00128 PhaseSpace PhaseSpace::operator+(const PhaseSpace &p) 00129 { 00131 00132 PhaseSpace result(m_values.size()); 00133 00134 for(unsigned int i = 0; i < m_values.size(); ++i) 00135 result.concat(m_values[i] + p[i]); 00136 00137 return result; 00138 } 00139 00140 PhaseSpace PhaseSpace::operator*(float value) 00141 { 00142 PhaseSpace result(m_values.size()); 00143 00144 for(unsigned int i = 0; i < m_values.size(); ++i) 00145 result.concat(m_values[i] * value); 00146 00147 return result; 00148 } 00149 00150 00151 /******************* 00152 * Friend functions * 00153 *******************/ 00154 00155 PhaseSpace OpenCAL::operator*(float value, const PhaseSpace &p) 00156 { 00157 PhaseSpace result(p.getSize()); 00158 00159 for(unsigned int i = 0; i < p.getSize(); ++i) 00160 result.concat(value * p[i]); 00161 00162 return result; 00163 } 00164 00165 00166 /****************** 00167 * Other functions * 00168 ******************/ 00169 00170 void PhaseSpace::add(const PhaseSpace &p, float scale) 00171 { 00172 for(unsigned int i = 0; i < m_values.size(); ++i) 00173 m_values[i] += scale * p[i]; 00174 }

Generated on Sun Aug 15 19:19:22 2004 for OpenCAL: Open Computer Animation Library by doxygen 1.3.8