-
Notifications
You must be signed in to change notification settings - Fork 4
/
point.cpp
81 lines (68 loc) · 1.33 KB
/
point.cpp
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
#include "point.h"
#include "header.h"
//constructor/destructor
Point::Point()
{
}
Point::Point(const int a_dimen, const float* a_coor) : m_dimen(a_dimen)
{
if (a_coor != 0)
memcpy(m_coor, a_coor, sizeof(float)*m_dimen);
else
memset(m_coor, 0, sizeof(float)*m_dimen);
}
Point::Point(const Point& a_pt) : m_dimen(a_pt.m_dimen)
{
memcpy(m_coor, a_pt.m_coor, sizeof(float)*m_dimen);
}
Point::~Point()
{
}
// operation
Point& Point::operator=(const Point& a_pt)
{
if (this != &a_pt)
memcpy(m_coor, a_pt.m_coor, sizeof(float)*m_dimen);
return *this;
}
Point Point::midpoint(const Point& a_p0, const Point& a_p1)
{
float m[MAXDIMEN];
for (int i = 0; i<a_p0.m_dimen; i++)
m[i] = (a_p0[i] + a_p1[i]) / 2;
return Point(a_p0.m_dimen, m);
}
// search
float Point::operator[](const int a_i) const
{
return m_coor[a_i];
}
// update
void Point::set(const int a_i, const float a_c)
{
m_coor[a_i] = a_c;
}
// measures
float Point::distance(const Point& a_pt) const
{
float dist = 0;
for (int d = 0; d<m_dimen; d++)
{
float diff = (a_pt.m_coor[d] - m_coor[d]);
dist += diff*diff;
}
return sqrt(dist);
}
// comparison
bool Point::operator==(const Point& a_pt) const
{
for (int d = 0; d<m_dimen; d++)
if (m_coor[d] != a_pt.m_coor[d])
return false;
return true;
}
// info
int Point::size(const int a_dimen)
{
return sizeof(float)*a_dimen;
}