-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsasiedzi.cpp
134 lines (108 loc) · 3.38 KB
/
sasiedzi.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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#include "sasiedzi.h"
sasiedzi::sasiedzi ()
{
}
std::vector<pary> sasiedzi::wzajemni_najblizsi_sasiedzi ( obraz obraz1, obraz obraz2 )
{
std::vector <pary> wzajemni_sasiedzi;
double ** maciez_odleglosci = new double *[obraz1.liczba_punktow_kluczowych];
for ( int i = 0; i < obraz1.liczba_punktow_kluczowych; i++ )
{
maciez_odleglosci[i] = new double[obraz2.liczba_punktow_kluczowych] ();
for ( int j = 0; j < obraz2.liczba_punktow_kluczowych; j++ )
{
maciez_odleglosci[i][j] = obraz1.punkty[i].odlegosc_cech ( obraz2.punkty[j] );
}
}
for ( int i = 0; i < obraz1.liczba_punktow_kluczowych; i++ )
{
double najblizszy_b = maciez_odleglosci[i][0];
int index_b = 0;
for ( int j = 1; j < obraz2.liczba_punktow_kluczowych; j++ )
{
if ( najblizszy_b > maciez_odleglosci[i][j] )
{
najblizszy_b = maciez_odleglosci[i][j];
index_b = j;
}
}
/*
double najblizszy_c = maciez_odleglosci[0][index_b];
int index_c = 0;
for ( int k = 0; k < obraz1.liczba_punktow_kluczowych; k++ )
{
if ( najblizszy_c > maciez_odleglosci[k][index_b] )
{
najblizszy_c = maciez_odleglosci[k][index_b];
index_c = k;
}
}
if ( index_c == i )
{
wzajemni_sasiedzi.push_back ( pary ( obraz1.punkty[i], obraz2.punkty[index_b] ) );
}
*/
bool najbl = true;
for ( int k = 0; k < obraz1.liczba_punktow_kluczowych && najbl; k++ )
{
if ( maciez_odleglosci[k][index_b] < najblizszy_b )
{
najbl = false;
}
}
if ( najbl )
{
wzajemni_sasiedzi.push_back ( pary ( obraz1.punkty[i], obraz2.punkty[index_b] ) );
}
}
return wzajemni_sasiedzi;
}
std::vector<pary> sasiedzi::spojnosc_sasiedztwa ( std::vector<pary> wzajemni_sasiedzi, int ilosc_sasiadow, double prog )
{
std::cout << "spojni sasiedzi in progres\n";
std::vector <pary> spojni_sasiedzi;
for ( auto &element : wzajemni_sasiedzi )
{
pary para = element;
double * odleglosci = new double[wzajemni_sasiedzi.size ()] ();
ograniczona_posortowana_lista dziwna_lista ( ilosc_sasiadow );
for ( int i = 0; i < wzajemni_sasiedzi.size (); i++ )
{
odleglosci[i] = element.pierwszy.odleglosc ( wzajemni_sasiedzi[i].pierwszy );
dziwna_lista.dodaj ( odleglosci[i], i );
}
double * odleglosci2 = new double[wzajemni_sasiedzi.size ()] ();
ograniczona_posortowana_lista dziwna_lista2 ( ilosc_sasiadow );
for ( int i = 0; i < wzajemni_sasiedzi.size (); i++ )
{
odleglosci2[i] = element.drugi.odleglosc ( wzajemni_sasiedzi[i].drugi );
dziwna_lista2.dodaj ( odleglosci2[i], i );
}
/*dziwna_lista.debug_print ();
std::cout << '\n';
dziwna_lista2.debug_print ();
std::getchar ();
*/
if ( dziwna_lista.ilosc_indexow_wspolnych ( dziwna_lista2 ) > prog )
{
spojni_sasiedzi.push_back ( element );
}
}
return spojni_sasiedzi;
}
//Moze zmieniac kolejnosc w vektorze wejsciowym, ale czy to wazne?
std::vector<pary> sasiedzi::kilka_losowych_punktow ( std::vector<pary> wzajemni_sasiedzi, int ilosc )
{
random_unique ( wzajemni_sasiedzi.begin (), wzajemni_sasiedzi.end (), ilosc );
std::vector<pary> punkty;
for ( int i = 0; i < ilosc; i++ )
{
//std::cout << wzajemni_sasiedzi[i].pierwszy.wspolrzedna_x << " " << wzajemni_sasiedzi[i].pierwszy.wspolrzedna_y << " ";
//std::cout << wzajemni_sasiedzi[i].drugi.wspolrzedna_x << " " << wzajemni_sasiedzi[i].drugi.wspolrzedna_y << "\n";
punkty.push_back ( wzajemni_sasiedzi[i] );
}
return punkty;
}
sasiedzi::~sasiedzi ()
{
}