ACloudViewer
3.9.4
A Modern Library for 3D Data Processing
Universe.cpp
Go to the documentation of this file.
1
// ----------------------------------------------------------------------------
2
// - CloudViewer: www.cloudViewer.org -
3
// ----------------------------------------------------------------------------
4
// Copyright (c) 2018-2024 www.cloudViewer.org
5
// SPDX-License-Identifier: MIT
6
// ----------------------------------------------------------------------------
7
#include "
Universe.h
"
8
9
namespace
cloudViewer
{
10
11
Universe::Universe
(
int
elements) {
12
elts
=
new
uni_elt
[
static_cast<
unsigned
long
>
(elements)];
13
allelems
= elements;
14
num
= elements;
15
initialize
();
16
}
17
18
void
Universe::initialize
() {
19
num
=
allelems
;
20
for
(
int
i = 0; i <
allelems
; i++) {
21
elts
[i].
rank
= 0;
22
elts
[i].
size
= 1;
23
elts
[i].
p
= i;
// initialized to the index
24
}
25
}
26
27
Universe::~Universe
() {
delete
[]
elts
; }
28
29
int
Universe::find
(
int
x
) {
30
int
y
=
x
;
31
while
(
y
!=
elts
[
y
].p)
// follow the index stored in p if not the same that
32
// the index
33
y
=
elts
[
y
].
p
;
34
elts
[
x
].
p
=
y
;
// update x element to the final value (instead of keeping
35
// multiple indirections), so next time we will access it
36
// directly.
37
return
y
;
38
}
39
40
void
Universe::join
(
int
x
,
int
y
) {
41
// join elements in the one with the highest rank
42
if
(
elts
[
x
].rank >
elts
[
y
].rank) {
43
elts
[
y
].
p
=
x
;
44
elts
[
x
].
size
+=
elts
[
y
].
size
;
45
}
else
{
46
elts
[
x
].
p
=
y
;
47
elts
[
y
].
size
+=
elts
[
x
].
size
;
48
if
(
elts
[
x
].rank ==
elts
[
y
].rank)
elts
[
y
].
rank
++;
49
}
50
num
--;
// the number of elements has been reduced by one
51
}
52
53
void
Universe::addEdge
(
int
x
,
int
y
) {
54
int
a
=
find
(
x
);
55
int
b =
find
(
y
);
56
if
(
a
!= b) {
57
join
(
a
, b);
58
}
59
}
60
61
}
// namespace cloudViewer
Universe.h
cloudViewer::Universe::addEdge
void addEdge(int x, int y)
Definition:
Universe.cpp:53
cloudViewer::Universe::find
int find(int x)
Definition:
Universe.cpp:29
cloudViewer::Universe::elts
uni_elt * elts
Definition:
Universe.h:39
cloudViewer::Universe::join
void join(int x, int y)
Definition:
Universe.cpp:40
cloudViewer::Universe::initialize
void initialize()
Initialize all elements to the default values.
Definition:
Universe.cpp:18
cloudViewer::Universe::num
int num
Definition:
Universe.h:40
cloudViewer::Universe::allelems
int allelems
Definition:
Universe.h:40
cloudViewer::Universe::Universe
Universe(int elements)
Definition:
Universe.cpp:11
cloudViewer::Universe::~Universe
~Universe()
Definition:
Universe.cpp:27
a
a[190]
Definition:
essential_matrix_poly.h:19
y
normal_z y
Definition:
my_point_types.h:168
x
normal_z x
Definition:
my_point_types.h:165
cloudViewer
Generic file read and write utility for python interface.
Definition:
CloudViewerConfig.cpp:12
cloudViewer::uni_elt
Definition:
Universe.h:15
cloudViewer::uni_elt::size
int size
Definition:
Universe.h:18
cloudViewer::uni_elt::rank
int rank
Definition:
Universe.h:16
cloudViewer::uni_elt::p
int p
Definition:
Universe.h:17
core
src
Universe.cpp
Generated on Tue Feb 3 2026 07:12:06 for ACloudViewer by
1.9.1