-
Notifications
You must be signed in to change notification settings - Fork 0
/
ThreeDGridMap.cpp
109 lines (98 loc) · 3.19 KB
/
ThreeDGridMap.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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#include "ThreeDGridMap.h"
#include "DepthCamera.h"
ThreeDGridMap::ThreeDGridMap()
{
// Bu fonksiyon ThreeDGripMap için constructor fonksiyonu
}
ThreeDGridMap::ThreeDGridMap(int depth)
{
// Bu fonksiyon ThreeDGripMap için constructor fonksiyonu
// Depth x,y ve z ekseni doğrultularındaki küp sayısını belirtmektedir.
// bu küpleri map temsil etmektedir istersek map[3][3] şeklinde de tanımlayabiliriz
map = new bool[depth * depth * depth];
for (int i = 0; i < depth * depth * depth; i++)
{
*(map + i) = false;
}
}
ThreeDGridMap::~ThreeDGridMap()
{
// Bu fonksiyon ThreeDGripMap için destructor fonksiyonu
}
void ThreeDGridMap::setThreeDGridMap(float gridSize, int depth)
{
// bu fonksiyon 3d ızgara için depth ile x y z eksenlerindeki küp sayısını,
// gridSize ile küpleri kenar uzunluğunu belirtmekte ve set etmektedir.
// ve depthe göre bir map oluşturup içinin boş olduğunu belirtmek için false ile doldurduk.
this->gridSize = gridSize;
this->depth = depth;
map = new bool[depth * depth * depth];
for (int i = 0; i < depth * depth * depth; i++)
{
*(map + i) = false;
}
}
void ThreeDGridMap::getThreeDGridMap(float& gridSize, int& depth)
{
// bu fonksiyonda gridSize ve depth alınır.
gridSize = this->gridSize;
depth = this->depth;
}
void ThreeDGridMap::insertPoint(Point& p)
{
// bu fonksiyonda gridmap de noktalarımız false durumundan true durumuna getirilir
// yani grid mapimizdeki noktalar boşken doldurulur.
//insert fonksiyonları ile, her bir noktanın hangi küpün içinde kaldığını belirlenip, o küpün değerini true yapmaktadır
double x, y, z;
x = p.getX();
y = p.getY();
z = p.getZ();
int index = ((int)(((z + 3) / gridSize)) * depth * depth + (int)(((y + 3) / gridSize)) * depth + (int)((x + 3) / gridSize));
map[(int)index] = true;
}
void ThreeDGridMap::insertPointCloud(PointCloud& pc)
{
// bu fonksiyonda nokta bulutları noktalar halinde insertpointe gönderilir yani tek tek true yapılır
// nokta bulutları true döndürür gridmapimiz doldurulur
// insert fonksiyonları ile, her bir noktanın hangi küpün içinde kaldığını belirlenip, o küpün değerini true yapmaktadır
std::list<Point> p;
for (int i = 0; i < pc.getPointNumber(); i++)
{
/*p = pc.getPointCloud();
insertPoint(p);*/
}
}
bool ThreeDGridMap::getGrid(int x, int y, int z) const
{
//getGrid fonksiyonu ilgili grid için değer döndürmektedir.
int index = ((int)(((z + 3) / gridSize)) * depth * depth + (int)(((y + 3) / gridSize)) * depth + (int)((x + 3) / gridSize));
return this->map[index];
}
bool ThreeDGridMap::loadMap(string fileName)
{
DepthCamera dC;
dC.setFileName(fileName);
PointCloud pC = dC.capture();
insertPointCloud(pC);
return true;
}
bool ThreeDGridMap::saveMap(string fileName)
{
std::fstream file(fileName, std::ios::app);
string tmp;
double x, y, z;
if (file.is_open()) {
for (int i = 0; i < depth * depth * depth; ++i) {
if (*(map + i)) {
x = i % depth;
y = (i % (depth * depth) - x) / depth;
z = (i - (y * depth + x)) / (depth * depth);
file << x << " " << y << " " << z << endl;
}
}
return true;
}
else {
cout << "file cannot opened!" << endl;
} return false;
}