00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
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
00024
00025
00033 PhaseSpace::PhaseSpace(
unsigned int reserve)
00034 : m_position(0)
00035 {
00036
if(reserve > 0)
00037 m_values.reserve(reserve);
00038
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
00052
00053
00054
00055
00056
00057
00058 PhaseSpace::~PhaseSpace()
00059 {
00060 }
00061
00062
00063
00064
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
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
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
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
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 }