27 #include "WDataSetDipoles.h"
34 m_maxMagnitude( 0.0f )
39 size_t firstTimeStep,
size_t lastTimeStep ) :
40 m_maxMagnitude( 0.0f )
42 WAssert( mags.size() == times.size(),
"There has to be a magnitude for every time and vice versa." );
43 for(
size_t id = 0;
id < times.size() - 1; ++id )
45 WAssert( times[
id] < times[
id+1],
"Times need to be ascending." );
47 addDipole( dipPos, mags, times, firstTimeStep, lastTimeStep );
65 size_t firstTimeStep,
size_t lastTimeStep )
75 for(
size_t id = 0u;
id < mags.size(); ++id )
88 return m_dipoles[dipoleId].m_dipolePosition;
104 const std::vector<float>::const_iterator& begin = dipole.
m_times.begin();
112 const std::vector<float>::const_iterator& begin = dipole.
m_magnitudes.begin();
129 std::vector<float>& times =
m_dipoles[dipoleId].m_times;
130 std::vector<float>& magnitudes =
m_dipoles[dipoleId].m_magnitudes;
132 if( time < times[0] || time > times.back() )
138 size_t upperBoundId = 1u;
139 for( ; upperBoundId < times.size() - 1u; ++upperBoundId )
141 if( time < times[upperBoundId] )
146 float scale = ( time - times[upperBoundId-1] ) / ( times[upperBoundId] - times[upperBoundId-1] );
147 float magnitude = magnitudes[upperBoundId-1] + scale * ( magnitudes[upperBoundId] - magnitudes[upperBoundId-1] );