VABinauralCluster.cpp 1.19 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
#include "VABinauralCluster.h"

VABinauralCluster::VABinauralCluster()
{
}

VABinauralCluster::VABinauralCluster(const VABinauralCluster& cluster) :
	maxError(cluster.maxError),
	_numSources(cluster._numSources),
	_clusterSourcePos(cluster._clusterSourcePos)
{

}


VABinauralCluster::~VABinauralCluster()
{
}

void
VABinauralCluster::init(VABinauralSoundSource* source)
{
	_clusterSourcePos = _clusterSourcePos + source->predPos;
	maxError = getDistError(source);

	++_numSources;
}

double
VABinauralCluster::getDistError(VABinauralSoundSource* source)
{
	double dotp = _clusterSourcePos.Dot(source->predPos);

	return ((dotp * dotp) / (_clusterSourcePos.Dot(_clusterSourcePos)) * (source->predPos.Dot(source->predPos)));
}

void 
VABinauralCluster::addSource(VABinauralSoundSource* source)
{
	double err = getDistError(source);

	_clusterSourcePos = (source->predPos + _clusterSourcePos * _numSources) / (_numSources + 1);
	maxError = std::max(err, maxError);

	++_numSources;
}

void
VABinauralCluster::addSource(VABinauralSoundSource* source, double error)
{
	_clusterSourcePos = (source->predPos + _clusterSourcePos * _numSources) / (_numSources + 1);
	maxError = std::max(error, maxError);

	++_numSources;
}