-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDatapoint.cpp
More file actions
93 lines (56 loc) · 1.83 KB
/
Datapoint.cpp
File metadata and controls
93 lines (56 loc) · 1.83 KB
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include "Datapoint.h"
extern char metric;
Datapoint::Datapoint(const vector<double> &coordinates, string id) : coordinates(coordinates), id(id) {}
void Datapoint::print() {
cout << "@" << id << "<" << coordinates[0] << "," << coordinates[1] << ">";
}
double Datapoint::dist(vector<double> &d2) {
double d = 0;
if (metric == 'c') {
double norm_d2 = 0, norm_d1 = 0, product = 0;
for (int i = 0; i < coordinates.size(); i++)
{
norm_d1 += coordinates[i] * coordinates[i];
norm_d2 += d2[i] * d2[i];
product += coordinates[i] * d2[i];
}
norm_d1 = sqrt(norm_d1);
norm_d2 = sqrt(norm_d2);
d = 1 - product / (norm_d1 * norm_d2) ;
} else {
for (int i = 0; i < coordinates.size(); i++)
d += (coordinates[i] - d2[i]) * (coordinates[i] - d2[i]);
d = sqrt(d);
}
//cout<<"D(dp,v)->" << d<<endl;
return d;
}
double Datapoint::dist(Datapoint &d2) {
double d = 0;
if (metric == 'c') {
double norm_d2 = 0, norm_d1 = 0, product = 0;
for (int i = 0; i < coordinates.size(); i++)
{
norm_d1 += coordinates[i] * coordinates[i];
norm_d2 += d2.coordinates[i] * d2.coordinates[i];
product += coordinates[i] * d2.coordinates[i];
}
norm_d1 = sqrt(norm_d1);
norm_d2 = sqrt(norm_d2);
d = 1 - product / (norm_d1 * norm_d2) ;
}
else
{
for (int i = 0; i < coordinates.size(); i++)
d += (double) (coordinates[i] - d2.coordinates[i]) * (coordinates[i] - d2.coordinates[i]);
d = sqrt(d);
}
// cout<<"D(dp,v)->" << d<<endl;
return d;
}
vector<double> Datapoint::get_coordinates() {
return coordinates;
}
string Datapoint::getId() const {
return id;
}