VABinauralCluster.cpp 1.37 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "VABinauralCluster.h"

VABinauralCluster::VABinauralCluster()
{
}

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

}


VABinauralCluster::~VABinauralCluster()
{
}

void
Lucas Moesch's avatar
WIP    
Lucas Moesch committed
21
VABinauralCluster::init(int sourceID, VABinauralSoundSource* source)
22
23
24
25
{
	_clusterSourcePos = _clusterSourcePos + source->predPos;
	maxError = getDistError(source);

Lucas Moesch's avatar
WIP    
Lucas Moesch committed
26
27
	_sources.insert(std::pair<int, VABinauralSoundSource*>(sourceID, source));

28
29
30
31
32
33
34
35
36
37
38
39
	++_numSources;
}

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

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

void 
Lucas Moesch's avatar
WIP    
Lucas Moesch committed
40
VABinauralCluster::addSource(int sourceID, VABinauralSoundSource* source)
41
42
43
44
45
46
{
	double err = getDistError(source);

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

Lucas Moesch's avatar
WIP    
Lucas Moesch committed
47
48
	_sources.insert(std::pair<int, VABinauralSoundSource*>(sourceID, source));

49
50
51
52
53
54
55
56
57
58
59
60
	++_numSources;
}

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

	++_numSources;
}