Cuprins ………………………….. ………………………….. ………………………….. ………………………….. ….. 1… [603530]

1
Cuprins
Cuprins ………………………….. ………………………….. ………………………….. ………………………….. ….. 1
1. Summary ………………………….. ………………………….. ………………………….. ………………………… 3
1.1 About CAD/CAM system s ………………………….. ………………………….. ………………………….. ……………….. 3
1.2 Software architecture ………………………….. ………………………….. ………………………….. …………………….. 3
1.3 FILE READER Module ………………………….. ………………………….. ………………………….. ……………………… 4
1.3.1 STL fi les ………………………….. ………………………….. ………………………….. ………………………….. …………….. 4
1.3.2 OBJ files ………………………….. ………………………….. ………………………….. ………………………….. ……………. 4
1.3.3 OFF files ………………………….. ………………………….. ………………………….. ………………………….. ……………. 5
1.4 RENDER Module ………………………….. ………………………….. ………………………….. ………………………….. .. 5
1.4.1 Projection ………………………….. ………………………….. ………………………….. ………………………….. …………. 5
1.4.2 Scaling into view ………………………….. ………………………….. ………………………….. ………………………….. … 5
1.4.3 Rota tion ………………………….. ………………………….. ………………………….. ………………………….. ……………. 5
1.4.4 Lightning and texture ………………………….. ………………………….. ………………………….. ……………………… 5
1.4.5 Polygon clipping ………………………….. ………………………….. ………………………….. ………………………….. … 6
1.5 MOMENTS CALCULATOR Module ………………………….. ………………………….. ………………………….. ……. 6
1.6 COMPARISON Module ………………………….. ………………………….. ………………………….. ……………………. 7
1.7 Conclusi on ………………………….. ………………………….. ………………………….. ………………………….. ……….. 9
2. Planificarea activităților ………………………….. ………………………….. ………………………….. ….. 10
3. Stadiul actual ………………………….. ………………………….. ………………………….. …………………. 11
3.1 Tehnologia CAD/CAM ………………………….. ………………………….. ………………………….. …………………… 11
3.1.1 Avantajele tehnologiei CAD/CAM ………………………….. ………………………….. ………………………….. …… 12
3.1.2 Dezavantajele tehn ologiei CAD/CAM ………………………….. ………………………….. ………………………….. . 12
3.2 Tehnica de manufacturare digitală ………………………….. ………………………….. ………………………….. …. 12
3.2.1 Sisteme de manufacturare substractive ………………………….. ………………………….. ……………………….. 12
3.2.2 Sisteme de manufacturare aditive ………………………….. ………………………….. ………………………….. ….. 12
3.3 Detecția și compararea obiectelor în spațiul 3D ………………………….. ………………………….. …………… 13
4. Fundamentare teoretică ………………………….. ………………………….. ………………………….. …… 15
4.1 Momente statistice în spațiul 3D ………………………….. ………………………….. ………………………….. …… 15
4.1.1 Momente geometrice ………………………….. ………………………….. ………………………….. ……………………. 15
4.1.2 Mo mente centrale ………………………….. ………………………….. ………………………….. ………………………… 16
4.1.3 Momente normalizate ………………………….. ………………………….. ………………………….. …………………… 17
4.1.4 Normalizarea gradului de rotație ………………………….. ………………………….. ………………………….. ……. 17
4.2 Distanța euclidiană ………………………….. ………………………….. ………………………….. ………………………. 18

2
4.3 Formatul fișierelor ………………………….. ………………………….. ………………………….. ……………………….. 20
4.3.1 Formatul fișierelor STL ………………………….. ………………………….. ………………………….. …………………… 20
4.3.2 Formatul fișierelor OBJ ………………………….. ………………………….. ………………………….. ………………….. 21
4.3.3 Formatul fișierelor OFF ………………………….. ………………………….. ………………………….. ………………….. 22
4.4 Randarea obiectului ………………………….. ………………………….. ………………………….. …………………….. 22
4.4.1 Proiecția modelului ………………………….. ………………………….. ………………………….. ………………………. 22
4.4.2 Translația și scalarea modelului ………………………….. ………………………….. ………………………….. ……… 23
4.4.3 Rotația modelului ………………………….. ………………………….. ………………………….. …………………………. 24
4.4.4 Culoarea și textura modelului ………………………….. ………………………….. ………………………….. ………… 25
4.4.5 Tăierea poligoanelor ………………………….. ………………………….. ………………………….. ……………………… 25
5. Implementarea soluției adoptate ………………………….. ………………………….. …………………… 26
5.1 Limbajul de programare Java ………………………….. ………………………….. ………………………….. ………… 26
5.2 Mediul de dezvoltare IntelliJ ………………………….. ………………………….. ………………………….. …………. 26
5.3 Arhitectura sistemului implementat ………………………….. ………………………….. ………………………….. . 27
5.3.1 Clasa Vector3 D ………………………….. ………………………….. ………………………….. ………………………….. …. 27
5.3.2 Clasa Polygon3D ………………………….. ………………………….. ………………………….. ………………………….. . 28
5.3.3 Clasa Vector2D ………………………….. ………………………….. ………………………….. ………………………….. …. 28
5.3.4 Clasa Texture ………………………….. ………………………….. ………………………….. ………………………….. …… 29
5.3.5 Clasa Mat4x4 ………………………….. ………………………….. ………………………….. ………………………….. …… 29
5.3.6 Clasa FileReader3D ………………………….. ………………………….. ………………………….. ……………………….. 30
5.3.7 Clasa ModelVi ewer ………………………….. ………………………….. ………………………….. ……………………….. 30
5.3.8 Clasa ControlPanel ………………………….. ………………………….. ………………………….. ………………………… 31
5.3.9 Clasa DataPanel ………………………….. ………………………….. ………………………….. ………………………….. .. 32
5.3.10 Clasa Scene ………………………….. ………………………….. ………………………….. ………………………….. ……. 33
5.3.11 Clasa WorldPanel ………………………….. ………………………….. ………………………….. ………………………… 35
5.3.12 Clasa Draw ………………………….. ………………………….. ………………………….. ………………………….. …….. 37
5.3.14 Clasa Moments ………………………….. ………………………….. ………………………….. ………………………….. . 38
5.3.15 Clasa MomentsByOrder ………………………….. ………………………….. ………………………….. ……………….. 39
5.3.16 Clasa Main ………………………….. ………………………….. ………………………….. ………………………….. …….. 39
6. Rezultate experimentale ………………………….. ………………………….. ………………………….. ….. 40
7. Concluzii ………………………….. ………………………….. ………………………….. ………………………. 41
8. Bibliografie ………………………….. ………………………….. ………………………….. …………………… 43
9. Anexe ………………………….. ………………………….. ………………………….. ………………………….. . 44
9.1 Lista tabelelor ………………………….. ………………………….. ………………………….. ………………………….. …. 44
9.2 Lista figurilor ………………………….. ………………………….. ………………………….. ………………………….. …… 44
9.3 Lista formulelor ………………………….. ………………………….. ………………………….. ………………………….. . 45
9.4 Codul sursă ………………………….. ………………………….. ………………………….. ………………………….. …….. 45

3

1. Summary
1.1 About CAD/CAM systems
Over the last couple of years, the 3D acquisition devices industry in the dental industry has
been growing rapidly. T o acquire the complete scan of the oral cavity, the bigger companies
started implementing the CAD/CAM (Computer Aided Design/Computer Aided Manufacturing)
technolo gy into their line of field.
A CAD/CAM system consists of three main components:
• The scanne r: by using a digital camera the conventional intraoral print is replaced by an
optical print. The extracted information is then converted into sets of digital dat a. The
main benefit of using an optical print is giving the medic the ability to review the f iner
details on a screen.
• The software: the acquired information is recorded and serves as a guide for processing
the digital model. The package is latter sent to the screen or to the laboratory to help in
preparing the real -life mesh. Data is stored as a STL (Standard Transformation Language)
file but because many providers prefer to use their ow n systems, a simple STL file is not
compatible with every software.
• The milling machine: by using a special type of clay and the acquired data as input it
creates the desired product. [1]

This paper aims to remove the incompatibility between different types of CAD/CAM systems
by offering an alternative software to the dentist which can interpret multiple types of files and
offer the additional feature of comparin g multiple scans. This featu re is of utmost importance to a
medic who intends to keep track of the healing process of the gums after a medical intervention.
By using this software, the medic is also able to give the patient a better prognosis.
1.2 Software architecture
The software is broken down in to lesser modules , each resolving a part of the problem :
reading the files, rendering the object, calculating the statistic moments and computing the
comparison criterium. All the modules rely on the file reader module as they both need th e data
extracted from the files. The rendering module is independent to the other two modules as it only
requires the data extracted from the files.

Figura 1 – Software architecture

4
1.3 FILE READER Mo dule
The main problem with this STL type of file is that it doesn’t hold any additional information
about color or lightning, usually leaving the render to handle those two parts. Another problem
with this type of file is the inefficient way of storing da ta having the s oftware make extra
iterations over the input data until it has all the required information . That is why it is preferred to
convert our STL files before processing. This problem is described in the next section together
with the different ty pes of files th e software can read.
1.3.1 STL files
A STL ( Stereolithography) file contains data about the triangular representation of a 3D
surface geometry. The said surface is tessellated (tiling a surface with general geometric shapes
such as there ar e no gaps and n o overlaps) into a series of smaller polygons. Each polygon takes
up the form of a triangle. A polygon is called a facet. STL files are available in two formats:
• The ASCII format: every facet is described by using four lines of plain ASCII t ext. The
first line contains the normal to the triangle and the next three lines contain the
coordinates for the three points forming the triangle. This way of storing data is very
inefficient as the file size increases very much if the tessellation contai ns lots of smal ler
triangles.
• The binary format: although it makes debugging harder as the file is unreadable, the size
problem is resolved by using this type of format. The first 80 bytes represent a series of
characters which form the header of the file. This is mostly discarded as it contains no
additional data. The next 4 bytes are an integer which represents the number of the facets
in the file. Next comes a frame of 48 bytes, each describing the facet (12 bytes for the
normal to the triangle and 12 by tes for e ach of the three points forming the triangle). Each
frame is followed by 2 empty bytes which mostly act as a spacer between triangles, but
some software make use of them by storing additional data. [2]
1.3.2 OBJ files
An OBJ (Object) file defines the geom etry and other properties for objects and was
developed by Wavefront Technologies for their Advanced Visualizer animation package. The file
was later adopted by other 3D graphics applications. The data is stored in plain ASCII text as
following:
• Each line starting with the “v” character contains the 3D coordinates for a point forming
the mesh separated by an empty space .
• Each line starting with the “vn” string contains the 3D coordinates specifying the normal
vector for every point separated by an empty space.
• Each line starting with the “f” character contains the row number where every point which
forms the facet is stored within the file separated by an empty space.

Only the data the software needs to interpret is mentioned even if the file can c ontain more
additional data like information about color, lightning, custom polygons or even information
about custom material which wrap around the mesh. [3]
For the computation part, a list of all distinct points is needed. When using STL files as inpu t,
the software needs to look for the distinct points as the information focuses on the facets. This
process is very computational heavy as thousands of polygons must be iterated over to extract the
distinct polygons. The OBJ file fo rmat is far superior as we are given the list of all distinct points
from the start sparing the software of the extra iterations.

5
1.3.3 OFF files
An OFF (Object File Format) file is used to represent the model by specifying the polygons
of the model's ge ometrical surface. The polygons can have any number of vertices. Just like OBJ
files, the data is stored in plain ASCII text. The file begins with the OFF keyword. The second
line states the number of points inside the mesh, the number of facets and the nu mber of edges.
This num ber can be safely ignored as the software doesn’t need to interpret it.
The points are listed as their X, Y and Z axis coordinates, written one per line, separated by a
blank space. The lines containing information about the facets contain four integers: the first one
indicating how many points form the said facets and the other ones state the row number where
the point is stored within the given list.
This file format is also superior to the STL one, as the list of all distinct poi nts needed for the
comp utation part is given from the start. In other words, it is preferred the STL be converted to
the OBJ or OFF file format for faster computation. [4]
1.4 RENDER Module
1.4.1 Projection
The extracted data from the read file cannot simply be used to draw t he mesh on the screen.
For the rendering of 3D objects, a planar view needs to be generated. This means that we need to
convert the 3D coordinates to 2D ones. This operation is called projection and it ’s realized by
creating a matrix which takes into consi deration the position of the viewer, its orientation and
field o f view. After the matrix is created, each vertex (point forming the mesh) is multiplied by
the matrix. The resulting vertex represents its 2D projection, thus ha ving the data need for
renderin g the mesh .
1.4.2 Scaling into view
Because the screen space is normalized and the projected vertex has coordinates in the
interval [ -1;1], the results need to be scaled into view. The problem is resolved by multiplying
each of the vertexes coordinates on the X axis by half of the screen width and each of the
vertexes coordinates on the Y axis by half of the screen height.
If it were for the mesh to be drawn now not much of it would be visible because both the
translated objec t and the viewpoint share the s ame origin. This problem is fixed by pushing the
object backwards, by adding into the Z coordinate value of the vertexes.
1.4.3 Rotation
To implement rotation in the renderer, a rotation matrix around each of the three main a xes
must be defined. After that , the rotation matrix is calculated by multiplying all the three rotation
matrices around each axis in reverse order. The object is rotated by multiplying its vertices with
the calculated matrix.
1.4.4 Lightning and texture
Given the fact that the input f iles contain no data about the lightning or the texture, the
renderer implements a simple algorithm of omnidirectional lightning, its source being the
position of the camera viewpoint. As such, the closest polygon to the camera is colored with the
brightes t shade of white and the farthest polygon to the camera is colored with the darkest shade

6
of white. The renderer also supports a gradient type of coloring where every point of the trian gle
is colored based on the value in the depth buffer corresponding to it.
Texture can also be loaded separately on the read objects but because the fact that there is no
information to link the position of texture on the geometrical mesh, for better results it is
recommended to load only seamless texture.
1.4.5 Polygon clip ping
When drawing the object on the screen, problems can arise if the screen can’t fit all the mesh.
These prob lems come from the fact that the renderer cannot interpret anything out the screen. For
example, it cannot be told to draw a 600 pixels wide lin e if the screen is only 300 pixels in width.
These problems are resolved by either zooming out of the object w ith the camera until it all
fits in the screen space or by implementing polygon clipping operations. The polygons are tested
against the four bo undaries of the screen and against the plane formed by the camera on the Z
axis. If the polygon overlaps with th e tested plane, then it will be clipped into smaller polygons
which fit into the boundaries, thus preventing drawing outside of the screen. [5]

Figura 2 – Scan of the bite taken after the surgery

1.5 MOMENTS CALCULATOR Module
Most of the 3D image processing algorithms are just extensions of the same 2D algorithms.
This extension consists in taking into consideration a new dimension. In 2D, to compare two sets
of images a simple image moment (scalar quantities which characterize a function and capture its

7
features) algorithm can be applied. This algorithm is used to compute the geometric moments of
the images which need to be compared. The moments contain important data about the image
(mass, rotation) and are used as input data for the Euclidian distance. The resulting value gives
the similarity between the images. By having a data base of different shapes and moments
calculated for each shape, this algorithm because a basic shape recognition algorithm.
To compare different obje cts in 3D the exact same principles have been used. The only
difference is taking into consideration the additional Z axis which is not present in the 2D space.
The module computes the 3D image moments based on the data read from the file by the file
reade r module. The results are later passed to comparison module to finally compute the
symmetry between the input files.
1.6 COMPARISON Module
This module receives the image moments computed previously and applies the Euclidean
distance by using the data to c alculate the degree of symmetry between scans. Results are
displayed on the following tables, the first containing the moments of the scan taken before the
medical intervention and the second containing the moments of the scan taken after the medical
intervention.

Zero order normalized moments
N[0][j][k]
J=0 J=1 J=2
K=0 1.0 0.0 13.8316
K=1 0.0 -8.7648 0.0363
K=2 412.5128 -0.1233 -2.2935
First order normalized moments
N[1][j][k]
J=0 J=1 J=2
K=0 0.0 -27.5533 0.0036
K=1 116.2959 -0.0818 -0.375
K=2 0.6866 3.9951 14.4815
Second order normalized moments
N[2][j][k]
J=0 J=1 J=2
K=0 20.4655 0.0741 -0.0291
K=1 0.588 -1.4667 -5.7951
K=2 9.1427 36.7275 -0.0055
Tabelul 1 – The normalized image moments up until the third order of the lower jaw of a patient
taken before surgery

8
Zero order normalized moments
N[0][j][k]
J=0 J=1 J=2
K=0 1.0 0.0 44.7521
K=1 0.0 -78.6105 -0.0579
K=2 136.8881 0.274 -3.3518
First order normalized moments
N[1][j][k]
J=0 J=1 J=2
K=0 0.0 26.4342 -0.0031
K=1 53.4851 -0.1381 1.3961
K=2 0.3275 -2.9372 23.9254
Second order normalized moments
N[2][j][k]
J=0 J=1 J=2
K=0 439.6496 -0.2011 -5.7846
K=1 1.0206 10.0598 12.7669
K=2 -16.3752 12.9964 0.3287
Tabelul 2 – The normalized image moments up until the third order of the lower jaw of a patient
taken after surgery

To accurately compute the symme try between the given scans, the module also takes into
consideration each of object inertia matrix which contains information about the object rotation.
The results are presented in the figure below.

Figura 3 – Comparison resul ts between the two scans of the lower jaw of a patient, first one taken
before the medical intervention and the second taken after the intervention

9
1.7 Conclusion
In conclusion, the software can compute the symmetry between a list of loaded scans by
firstly calculating each of the scan’s geometrical moments. A fter these moments are calculated,
the center of the object is determined to provide alignment around the origin of the axes, thus
calculating a new set of moments, the central moments. Also, the iner tia matrix is calculated by
using the geometric moments. Because every object has a certain volume, the moments need to
be normalized before the comparison by dividing each of the of the central moment by its
volume. In the end, the Euclidian distance is u sed to calculate the symmetry degree, telling us the
difference in screen units.
Each object loaded into the software can be rendered on the screen by implementing
projection, scaling, rotation, lightning and clipping upon the scan in a pipeline sort of p rocessing.
As such, by using this software, a dentist is also able to both view the taken scans and analyze
their symmetry over the course of time until the end of the treatment period is reached.
If the program was given a database of basic objects to tr ain with, it would be able to be used
as an object recog nition software, by telling which object from the data based the input scan
resembles most.

10
2. Planificarea activităților
Specificații proiect Perioada Durata (zile)
Alegerea temei 05.10.2018 – 06.10.2018 1
Studiu bibliografic și
familiarizarea cu tehnologia
CAD/CAM 20.10.2018 – 25.01.2019 97
Familiarizarea cu aplicarea
noțiunilor de grafica 3D 04.02.2019 – 11.03.2019 35
Familiarizarea cu aplicarea
noțiunilor de momente de
imagine în spațiul 3D 12.03.2019 – 19.03.2019 7
Crearea diagramelor de clasă
folosite în implementarea
proiectului 20.03.2019 – 25.03.2019 5
Crearea arhitecturii sistemului p e
baza diagramelor de clasă 26.03.2019 – 31.03.2019 5
Dezvoltare aplicației 08.04.2019 – 14.07.2019 97
Scrierea documentației 05.08.2019 – 25.08.2019 20
Printarea și legarea documentului 1
Predarea proiectului 1

11
3. Stadiul actual
Evoluția rapid ă a dispozitive lor de achiziție de date 3D a făcut ca acest tip de informație să
fie accesibilă oricui și să fie folosită în cât mai multe domenii. Datorită faptului că acest tip de
date nu poate fi interpretat la fel de ușor de către om precum cele din 2D , primite sub forma unei
simple imagini, prolema extragerii unor date relevante este rezolvată de cele mai multe ori de
către un software adițional. Toate software -urile de acest gen împărtășesc aceeași abordare când
vine vorba de redare a datelor achiziți onate. Pe partea de interpretare a acestor date încep să apară
diferențele datorită m ultitudinii de domenii care sunt acoperite de această tehnologie.
3.1 Tehnologia CAD/CAM
Domeniul în care se încadrează această lucrare este cel al medicinei dentare. Sco pul principal
al proiectului este de a înlătura neajunsurile pe care le au majoritate a software -urilor puse la
dispoziție medicilor dentiști de către companiile mari, neajunsuri ale căror soluție se află de cele
mai multe ori în spatele unei licențe scumpe cu o durată limitată.
În acest domeniu, dispozitivele de achiziție de date au la ba ză tehnologia CAD/CAM. Un
astfel de sistem este alcătuit din trei mari componente : scanner -ul, software -ul și mașina de
frezare.
Aparatul de scanare constă într -o camera digitală de rezoluție mare ce capturează o serie de
cadre ale cavității orale pentru realizarea unei amprente digitale a gurii pacientului. Astfel,
amprenta convențională luată cu ajutorul unui unei substanțe specială pe bază de silicon ce poarta
numele de material pentru amprentă. Imaginile preluate sunt apoi convertite într -o suprafață
geometrică ce descrie cavitatea orală a pacientului. Datele ce descriu această suprafață sunt apoi
trimise către software -ul dispozitivului cu care s -a luat amprenta.
Software -ul primește de la scanner informațiile ce redau amprenta digitală și le foloseșt e
pentru a reda pe ecran în timp real obiectul format în spațiul 3D. Cu cât medicul dentist
achiziționează mai multe cadre ale cavității orale cu atât va fi mai precis sof tware -ul în redarea
amprentei. Un prim avantaj este posibilitatea de a stoca astfel d e amprente în mod digital. Odată
ce medicul dentist decide că au fost achiziționate destul date de interes pentru luarea amprentei , îi
prezintă acestuia un ghid de configu rare în care se decide scopul în care va fi utilizata amprenta
pacientului (restaurar e, cosmetică, diagnostic ortodontic, implanturi).
Unitatea de frezare începe să sculpteze modelul dorit pe baza comenzilor primite de la
medicul dentist. Acest model poa te lua orice formă, de la un singur dinte, o zonă de interes sau
întreaga cavitate orală până la o proteza artificială care sa se potrivească pe suprafața ge ometrică
determinată de amprenta dentară. Dispozitivele de frezare se diferențiază prin numărul axe lor de
frezare, cu trei axe sau cu cinci axe. Cele cu tre i axe permit efectuarea mișcării în cele trei direcții
spațiale iar dispozitivele cu cinci axe aduc în plus posibilitatea rotirii axului de frezare, ceea ce
duce la un număr mai mare de tipuri de luc rări ce pot fi realizate. [6]
Calitatea restaurărilor este dată mai mult de modul de scanare, de procesare și de prelucrare a
datelor, decât de numărul mare de axe de frezare. Frezarea se poate efectua printr -un proces uscat
sau umed. Frezarea uscată este recomandată pentru blocurile de oxid de zirconiu cu un grad
scăzut de pre -sintetizare. În cazul procesului umed, frezele de prelucrare sunt protejate prin
pulverizarea lor cu un lichid rece pentru a evita supraîncălzirea materialului frezat. Frezarea
umed ă este folosită când ceramica de oxid de zirconiu prezintă un grad ridicat de pre -sintetizare.
Pentru sistemele de prelucrare folosite în cabinet, frezarea e ste umedă, utilizându -se un amestec
pe bază de apă distilată și lubrifiant. [7]

12
3.1.1 Avantajele te hnologiei CAD/CAM
• Restaurări integral ceramice/compozite în aceeași ședință
• Materiale de foarte bună calitate prefabricate industrial
• Diminuarea erorilor cee a ce duce la eliminarea etapelor suplimentare din laborator
• Design biogenetic
3.1.2 Dezavantajele t ehnologiei CAD/CAM
• Achiziția aparaturii implică un cost ridicat
• Artiștii ceramiști pot oferi rezultate superioare
3.2 Tehnica de manufacturare digitală
În domeniul medicinei dentare există posibilități nenumărate de exploatare a mijloacelor de
digitalizar e și tehnologizare, pornind de la mijloacele de comunicare cu pacientul, la realizarea
fișei digital e a pacientului, prin intermediul aplicațiilor specifice unde medicul are posibilitatea să
atașeze amprentele digitale, radiografiile digitale și fotografii le în format digital, la utilizarea de
arcuri faciale digitale și articulatoare virtuale utile în pl anificarea si fabricarea pieselor protetice,
fie la real izarea restaurărilor prin utilizarea tehnologiilor substractive sau aditive.
3.2.1 Sisteme de manufa cturare substractiv e
Reprezintă procesul de obținere a unui model fizic tridimensional, pe baza modelului digital
(CAD) al acelui obiect, prin frezare/înde părtare mecanică a unor straturi succesive dintr -un bloc
de material.
Fabricarea substractivă este cea mai frecvent întâlnită în domeniul medicinei dentare și este
bazată pe sistemele CNC (Computer Numeric Control = Mașini -unelte controlate numeric). [8]
Tehnologia substractivă este limitată de numărul de axe carteziene în care se execută frezarea.
Axa X reprezintă mișcarea față -spate, axa Y reprezintă mișcarea stânga -dreapta, axa Z reprezintă
mișcare a verticală, sus -jos.
3.2.2 Sisteme de manufacturare adi tive
Reprezintă procesul de obținere a unui model fizic tridimensional, pe baza modelului digital
(CAD) al acelui obiect, prin adiție succesivă de straturi de material.
Utilizarea tehnicilor de manufacturare digitală directă în medicina dentară se bazează pe
principiul fluxului de lucru digital “Scan -Plan-Manufacture ”. Fiecare parte a acestui flux de lu cru
se bazează pe tehnologii distincte :
• Scanarea : procesul tehnologic utilizat pentru a captura topografia câmpului de lucru.
• Designul digital : constituit d e aplicații software utilizate pentru prefigurarea viitoarei
piese protetice.
• Fabricarea : procesul t ehnologic de transpunere a designului într -un obiect fizic.
Piesele proiectate prin utilizarea unei aplicații CAD/CAM sunt fabricate printr -un dispozitiv
de manufacturare digitală directă. Fluxul de lucru posibil în manufacturarea digitală directă este
prezentat în figura următoare.

13

Figura 4 – Fluxul de lucru în procesul de manufacturare digitală directă

3.3 Detecția și compararea obiectelor în spațiul 3D
Odată ce a fost prezentată partea lucrării ce explică în ansamblu te hnologia din spatele
achizițiilor datelor 3D și industria în care se folosește aceasta tehnologia, cea a medicinei dentare,
poate fi discu tat si celălalt domeniu abordat de această lucrare. Acest domeniu este cel de
recunoaștere a obiectelor 3D.
Aceasta e ste o problemă bine studiată în viziunea computerizată. O soluție standard folosită
în vizualizarea computerizată pentru a rezolva diferit e probleme precum clasificarea, căutarea și
recunoașterea de obiecte sau caracteristici este calcularea momentelor sta tistice ale imaginilor.
Odată aduse în discuție imaginile, reiese utilitatea acestor tehnici în spațiul 2D. Dar cu trecerea
timpului și ac cesibilitatea la diferite scanări ce descriu suprafața geometrică a unui obiect,
utilitatea acestor momente statistice s-a extins rapid și la spațiul 3D.
Cele mai de bază momente de genul sunt momentele geometrice, ce pot fi extinse în orice
dimensiune. Sunt ușor de cuantificat, deci nu necesită o putere mare de calcul și de cele mai
multe ori servesc ca o fundație pent ru alte momente statistice, mult mai elaborate.
Algoritmii pentru calculul acestor momente au acoperit la început doar spațiu l 2D dar sunt
perfect valide și când vine vorba de extensia acestui spațiu la cel 3D prin adăugarea unei axe
suplimentare.
Repre zentarea digitalizată a unei imagini este făcută printr -o matrice bidimensională ce
conține pe fiecare poziție o pondere despre o anumită caracteristică ce se dorește a fi cuantificată
(ex. nivelul de luminanță al unui pixel). Când se realizează extensia l a următoarea dimensiune,

14
cea mai evidentă soluție pentru reprezentarea unui obiect este folosirea unei matrice
tridimensionale ce conține pe fiecare poziție o informație cantitativă despre obiectul în sine.
Aici intervine prima problemă, deoarece puterea de calcul necesară pentru aflarea
momentelor, cr ește exponențial. Pentru a facilita lucrurile, o alternativa ale acestei digitalizări
este foarte des întâlnită : reprezentarea obiectului sub forma unei suprafețe geometrice ce descrie
fiecare poligon care se afla în descrierea formei lui. Aceste informații vin de cele mai multe ori
sub forma unei liste de vectori si coordonatele acestora și încă o lista adiționala care asignează
unui poligon indicii vectorilor care îl formează. Cât despre cantitatea de inform ație ce trebuie
luată în considerare, volumul fie cărui poligon din suprafața geometrica este luat în considerare,
volum distribuit simetric pe fiecare punct ce îl formează.

Figura 5 – Modul de descriere a suprafeței geometrice a unui ceainic

În figura de mai sus este evidenț iat modul de reprezentare al unui obiect în spațiul 3D. Pe
baza listei ce conține coordonatele punctelor ce îl descriu, sunt formate poligoanele ce îi conferă
acestuia o forma. Odată formate aceste poligoane , ele pot primi si atribute de culoare. Cea mai
întâlnită formă de poligon este cea de triunghi deoarece cu ajutorul lui poate fi formata orice
formă geometrică.
Chiar dacă un obiect poate fi alcătuit din mai puține poligoane, aceste tot poate avea o form ă
asemănătoare cu alt obiect. Totodată, un obiect poate fi alcătuit din același număr de poligoane ca
și alt obiect, dar punctele ce îl descriu pot fi distanțate mai tare. În acest caz, obiectul este identic
cu cel de -al doilea, doar ca se află la o scală mai mare, deci ocupă mai mult volum. Prin urmare,
nu putem compara direct doua obiecte prin simpla utilizare a reprezentării lor geometrice.
Aici intervine soluția menționată, cea de folosire a momentelor statistice deoarece problemele
precum volumul sau orientarea unui obiect sunt rezolvate pentru a of eri un grad de simetrie cât
mai ridicat.
Prin urmare, folosind tehnologia CAD/CAM pentru achiziția datelor 3D si algoritmul
momentelor statistice extins la spațiul 3D pentru comparația obiectelor, unui medi c dentar i se pot
oferi niște rezultate cuantific abile pentru a urmări progresul de vindecare al gingiei în urma unei
intervenții medicale. Dentistul este ajutat astfel având în vedere ca singura estimare pe care o
putea face asupra rezultatelor este una v izuală dacă nu urmărește această implementare.
Programul poate fi extins și la alte domenii ale medicinei, nu doar cel dentar, cât timp nu este
necesar a se lua în considerare și alte caracteristici cum ar fi textura sau culoarea de pe un obiect,
rezult atele fiind aplicabile doar pe spațiul geometric .

15
4. Fundamentare teoretică
Analiza imaginii reprezintă la bază un proces alcătuit din mai multe etape în datele introduse
sunt reprezentate de către o imagine iar datele de ieșire sunt o informaț ie finală (de obicei
simbolică) sau un criteriu pe baza căruia se poate lua o decizie.
Exemple tipice de aplicabilitate ale acestui domeniu sunt localizarea fețelor umane în diferite
scene și recunoașterea (având un model antrenat sau o bază de date în sp ate, recunoașterea
semnelor rutiere în câmpul vizual al șoferului și identificarea țesut urilor suspecte într -o imagine
CT sau RMN. O diagramă generală ce reprezintă procesele de analiză a imaginilor este prezentată
în figura de mai jos :

Figura 6 – Etapele analizei imaginilor

Primii doi pași sunt realizați implicit de către aparatura CAD/CAM în timp ce medicul dentist
realizează amprenta digitală. Algoritmul prezentat în această lucrare abordează ultimele patru
etape în felul ur mător :
• Operații de detecție a obiectului : datele oferite de către apara tura CAD/CAM sunt
interpretate și convertite într -un format ce facilitează interpretarea datelor
• Calculul caracteristicilor : pe baza datelor primite sunt calculate momentele statistice
formând astfel baza informației ce va fi luată în considerare la etapa de comparare
• Clasificarea obiectului: funcția aleasă pentru a oferi un grad de simetrie pe baza căruia se
poate lua o decizie este cea de distanță Euclidiană
• Asignarea unei etichete : se calculează distanța Euclidiană dintre două obiecte obținând
astfel un parametru pe baza căruia se poate lua o decizie.
4.1 Momente statistice în spațiul 3D
Momentele statistice sunt valori scalare reale sau complexe ce sunt folosite pentru a descrie o
funcție primită. Dintr -un punct de vedere matematic, aceste momente repre zintă proiecțiile
funcției într -o bază polinomială.
4.1.1 Momente geometrice
Există mai multe tipuri de momente statistice dar majoritatea se bazează pe cel mai de bază
tip de momente, momentele geometrice ale unei funcții. Momentele geometrice ale funcției 𝑓(𝑥)
sunt date de formula următoare :

16
𝑚𝑝𝑞𝑟=∫∫∫𝑥𝑝+∞
−∞+∞
−∞+∞
−∞𝑦𝑞𝑧𝑟𝑓(𝑥,𝑦,𝑧)𝑑𝑥𝑑𝑦𝑑𝑧 ( 1 )

Unde p reprezintă ordi nul momentului pe axa X, q reprezintă ordinul momentului pe axa Y, r
reprezintă ordinul momentului pe axa Z iar tripletul (𝑥,𝑦,𝑧) reprezintă coordonatele vectorului
dat de către funcția 𝑓(𝑥). Informația returnată prin această funcție este volumul ocup at de
poligonul alcătuit de vec torul în cauză.
4.1.2 Momente centrale
Sub această formă, momentele geometrice nu pot fi folosite pentru a realiza comparația dintre
două obiecte întrucât acestea pot suferi de un grad diferit de translație asupra celor trei axe.
Pentru a elimina acest im pediment se calculează coordonatele centrului de greutate cu ajutorul
următoarelor formule :

𝑥𝑐=𝑚100
𝑚000 ( 2 )

Unde 𝑥𝑐 reprezintă poziția centrului de greutate pe axa X, 𝑚100 reprezintă cantitatea de
volum distribuită uniform pe axa X iar 𝑚000 reprezintă volumul total obiectului.

𝑦𝑐=𝑚010
𝑚000 ( 3 )

Unde 𝑦𝑐 reprezintă poziția centrului de greutate pe axa Y, 𝑚010 reprezintă cantit atea de
volum dis tribuită uniform pe axa Y iar 𝑚000 reprezintă volumul total obiectului.

𝑧𝑐=𝑚001
𝑚000 ( 4 )

Unde 𝑧𝑐 reprezintă poziția centrului de greutate pe axa Z, 𝑚001 reprezintă cantitatea de
volum d istribuită uniform pe axa Z iar 𝑚000 reprezintă volumul total obiectului.
Odată obținute coordonatele centrului de greutate, deplasare fată de origine poate fi eliminată
de pe cele trei axe. Ast fel se obțin momentele centrale. Aceste momente conferă un grad superior
de utilitate deoarece este luată în consi derare deplasarea obiectului față de origine plasând
obiectul în spațiu astfel încât coordonatele centrului său de greutate să corespundă cu cele ale
originii. Astfel tripletul (𝑥𝑐,𝑦𝑐,𝑧𝑐) devine (0,0,0). Astfel, momentele centrale ale funcției 𝑓(𝑥)
sunt date de formula următoare :
𝜇𝑝𝑞𝑟=∫∫∫(𝑥−𝑥𝑐)𝑝+∞
−∞+∞
−∞+∞
−∞(𝑦−𝑦𝑐)𝑞(𝑧−𝑧𝑐)𝑟𝑓(𝑥,𝑦,𝑧)𝑑𝑥𝑑𝑦𝑑𝑧 ( 5 )

Unde 𝑥𝑐 reprezintă poziția centrului de greutate pe axa X, 𝑦𝑐 reprezintă poziția centrului de
greutate pe axa Y, 𝑧𝑐 reprezintă poziția centrului de greutate pe axa Z, p reprezintă ordinul
momentului pe axa X, q reprezintă ordinul momentului pe axa Y , r reprezintă ordinul
momentului pe axa Z iar tripletul (𝑥,𝑦,𝑧) reprezintă coordonatele vectorului dat de către funcția
𝑓(𝑥). Informația returnată prin această funcție este v olumul ocupat de poligonul alcătuit de
vectorul în cauză.

17
4.1.3 Momente norm alizate
Pentru a putea fi folosite ca date de intrare în algoritmul de comparație trebuie eliminată
dependența momentelor față de factorul de scalare al acestora. Prin eliminarea acestei dependențe
se obțin astfel momentele normalizate care nu sunt afecta te nici de deplasarea față de origine nici
de mărimea acestora. Operația se realizează cu ajutorul următoarei formule :

𝑣𝑝𝑞𝑟=𝜇𝑝𝑞𝑟
𝜇000(𝑝+𝑞+𝑟
3)+1 ( 6 )

Unde 𝜇000 reprezintă volumul obiectului independe nt de deplasarea acestuia față de origi ne,
p reprezintă ordinul momentului pe axa X, q reprezintă ordinul momentului pe axa Y, iar r
reprezintă ordinul momentului pe axa Z. [9]
4.1.4 Normalizarea gradului de rotație
Odată obținute momentele normalizate, da că se trece direct la parte de comparați e a
obiectelor nu s-ar obține rezultatele dorite datorită faptului ca deși momentele normalizate nu
sunt afectate de deplasarea față de o rigine a obiectului sau de mărimea acestuia, ele încă sunt
influențate de gradu l de rotație al obiectului față de cele trei axe carteziene.
Prin urmare, un set adițional de date trebuie luat în considerare în aplicarea algoritmului de
comparație dintre ob iecte, și anume matricea de inerție a obiectului. Constrângerile pentru ca
obiectul să fie normalizat din punct de vedere al rotației sunt următoarele :

𝜇′110=𝜇′101=𝜇′011=0 ( 7 )

Unde 𝜇110, 𝜇101, 𝜇011 reprezintă valorile vectorilor proprii ale matrice i de rotație . Pentru
normalizare , mat ricea poate fi obținută prin calculul vectorilor proprii ale matricei momentelor de
ordinul doi , matricea de covarianță :

𝑀=(𝜇200𝜇110𝜇101
𝜇110𝜇020𝜇011
𝜇101𝜇011𝜇002) ( 8 )

Unde 𝜇𝑝𝑞𝑟 reprezintă momentele centrale ale obiectului . Obiectul trebuie rotit astfel încât
vectorii proprii ale matricei M să coincidă cu axa X, Y și Z. Astfel, vectorii proprii formează un
elipsoid de referință.

18

Figura 7 – Rotirea faț ă de fiecare a xă în parte dată de vectorii proprii

Există desigur o altă posibilitate de a defini constrângerile de normalizare și anume utilizarea
matricei de inerție:

𝐼=(𝑣200+𝑣200−𝑣110 −𝑣101
−𝑣110𝑣020+𝑣200−𝑣011
−𝑣101 −𝑣011𝑣002+𝑣200) ( 9 )

Unde 𝑣200+𝑣200 reprezintă gradul de rotație al obiectului față de axa X, 𝑣020+𝑣200
reprezintă gradul de rotație al obiectului față de axa Y iar 𝑣002+𝑣200 reprezintă gradul de r otație
al obiectului față de axa Z. Matricea de inerție apare sub aceeași formă și în mecanica clasică
unde conține informație despre gradul de rotație al unui o biect față de un punct de origine. [10]
4.2 Distanța euclidiană
Din punct de veder e matematic, distanța euclidiană sau metrica euclidiană reprezintă cea mai
scurtă cale dată de o linie dreapta dintre două puncte aflate în același spațiu Euclidian . Aplicând
această distanță, spațiul Euclidian devine astfel un spațiu metric în care distan ța dintre puncte
poate fi cuantificată. În figura de mai jos este prezentată distanța Euclidiană dintre două puncte
plasate aleatoriu în spațiul 3D.

19

Figura 8 – Distanța euclidiană dintre două puncte plasate în spațiul cartezian 3D

Fie două puncte p și q aflate în spațiul cartezian 3D, unde poziția punctului p este dată de
tripletul (𝑥𝑝,𝑦𝑝,𝑧𝑝) iar poziția punctului q este dată de tri pletul (𝑥𝑞,𝑦𝑞,𝑧𝑞). În acest caz, distanța
euclidiană dintre cele d ouă puncte se calculează astfel :

𝑑=√(𝑥𝑝−𝑥𝑞)2+(𝑦𝑝−𝑦𝑞)2+(𝑧𝑝−𝑧𝑞)2 ( 10 )

Când avem date similare de comparat, distanța Euclidiană e cel mai bun mod de a calcula
gradul de simetrie. Deoarece în cazul nostru datele de intrare pentru distanța euclidiană nu sunt
simple coordonate carteziene, ci momentele statistice normalizate și gradul de rotație în jurul
fiecărei axe, formula de calcul a distanței Euclidiene este următoarea :

𝑑=√∫∫∫(𝑣1𝑝𝑞𝑟−𝑣2𝑝𝑞𝑟)2+∞
−∞+∞
−∞+∞
−∞+𝐼002+𝐼112+𝐼222 ( 11 )

Unde 𝑣1𝑝𝑞𝑟 reprezintă momentele statistice normalizate ale primului obiect, 𝑣2𝑝𝑞𝑟 reprezintă
momentele statistice normalizate ale celui de-al doilea obiect iar tripletul (𝐼00,𝐼11,𝐼22) reprezintă
diferența dintre elementele aflate pe diagonala principală a matricei de inerție corespunzătoare
fiecărui obiect, astfel :

𝐼00= (𝑣1200+𝑣1200)−(𝑣2200+𝑣2200)
( 12 )
𝐼11= (𝑣1020+𝑣1200)−(𝑣2020+𝑣2200)
( 13 )
𝐼22= (𝑣1002+𝑣1200)−(𝑣2002+𝑣2200)
( 14 )

20
4.3 Formatul fișierelor
4.3.1 Formatul fișierelor STL

Figura 9 – Reprezentarea unui fișier STL

Un fișier cu extensia STL conține date despre reprezentarea triunghiulara a suprafeței
geometrice a obiectului. Suprafața este împărțită în mai multe poligoane astfel încât să nu existe
goluri sau suprapuneri. În cazul studiat, forma unui poligon este cea de triunghi. Fișierele STL
pot fi de două tipuri, ASCII sau binare.

solid name
………………………………………….. ………….
facet normal 𝑛𝑖 𝑛𝑗 𝑛𝑘
outer loop
vertex 𝑣1𝑥 𝑣1𝑦 𝑣1𝑧
vertex 𝑣2𝑥 𝑣2𝑦 𝑣2𝑧
vertex 𝑣3𝑥 𝑣3𝑦 𝑣3𝑧
endloop
endfacet
…………………………………………. …………..
endsolid name
Tabelul 3 – Structura unui fișier STL de format ASCII

Orice fișier STL de format ASCII începe cu antetul “solid name ” și se încheie cu subsolul
“end solid name ” unde name reprezintă numele obiectulu i. După antet, fișierul continuă cu datele
despre fiecare triunghi astfel : tripletul (𝑛𝑖 𝑛𝑗 𝑛𝑘) reprezintă normala la plan ul determinat de
triunghi iar tripletele de forma ( 𝑣𝑥 𝑣𝑦 𝑣𝑧) reprezintă coordonatele fiecărui punct ce f ormează
triunghiul. Acest format nu este cel mai eficient deoarece odată cu creșterea numărului de
triunghiuri va crește substanțial și mărimea fișierului. De aceea este preferată folosirea formatului
binar în locul formatului ASCII .

21
char_8[80] – Antet
int_32 – Număr de triunghiuri
……………………………………………………………………………
float_32[3] – Normala la planul determinat de triunghi
float_32[3] – Coordonatele primului punct al triunghiului
float_32[3] – Coordonatele celui de -al doilea punct al triunghiului
float_32[3] – Coordonatele celui de -al treilea punct al triunghiului
uint_16 – Atribut opțional al triunghiului
Tabelul 4 – Structura unui fișier STL de format binar

Orice fișier STL de format binar începe cu un cadru de 80 de valori pe 8 biți ce reprezintă un
șir de caractere în care se identifică antetul fi șierului. Acest antet este ignorat. După urmează o
valoare pe 32 de biți ce reprezintă un întreg care dă numărul de triunghiuri ce urmează a fi citite.
Fișierul continuă apoi cu 4 cadr e, fiecare conținând 3 valori pe 32 biți ce reprezintă o valoare
reală pentru normala la planul determinat de triunghi cât și coordonatele fiecărui punct al
triunghiului. După cele 4 c adre, urmează o valoare pe 16 biți ce reprezintă un întreg fără semn.
De cele mai multe ori, acest câmp nu este utilizat, rolul lui fiind acela de a delimita proprietățile
triunghiurilor între ele. Unele software -uri utilizează acest câmp pentru a stoca in formații despre
culoare dar această abordare este rar întâlnită.
4.3.2 F ormatul fișierelor OBJ
Un fișier OBJ definește geometria și alte proprietăți ale obiectelor în conținutul său.
Informația este stocată în format ASCII, fiind ușor de interpretat. Aces t tip de fișiere este superior
fișierelor de tip STL deoarece o listă cu punctele distincte ce formează suprafața geometrică este
deja oferita s pre deosebire de exemplul de mai sus unde trebuie executate operații suplimentare
pentru a obține această listă. Prin urmare, interpretarea acestui tip de fișiere nu cere o putere
comp utațională la fel de mare.

# Lista coordonatelor vectorilor
v 𝑥𝑛 𝑦𝑛 𝑧𝑛
v ……
# Lista coordonatelor corespunzătoare texturii
vt 𝑥𝑛 𝑦𝑛
vt ……
# List a coordonatelor vectorilor normalizați
vn 𝑥𝑛 𝑦𝑛 𝑧𝑛
vn ……
# Lista triunghiurilor și vectorilor care îi formează
f indice 𝑣1 indice 𝑣2 indice 𝑣3
f indice 𝑣1/indice 𝑣𝑡1 indice 𝑣2/indice 𝑣𝑡2 indice 𝑣3/indice 𝑣𝑡3
f indice 𝑣1//indice 𝑣𝑛1 indice 𝑣2//indice 𝑣𝑛2 indice 𝑣3//indice 𝑣𝑛3
f ……
Tabelul 5 – Structura unui fișier OBJ

Unde liniile precedate de caracterul “v” reprezintă coordonatele unui vector oarecare, liniile
precedate de șirul “vt” reprezintă coordonatele 2D ale texturii, liniile precedate de șirul “vn”
reprezintă coordonatele vectorilor normalizați iar liniile precedate de caracterul “f” reprezintă
inform ațiile despre un poligon date prin tipurile de vectori descrise mai sus.

22
4.3.3 Formatul fișierelor OFF
Un fișier OFF este folosit pentru a r eprezenta modelul unui obiect specificând coordonatele
poligoanelor ce formează suprafața geometrică. Un poligon po ate avea oricâte puncte, dar în
cazul prezentat, poligo anele sunt reprezentate prin triunghiuri. Ca și în cazul formatului OBJ,
informațiile sunt stocate în format ASCII și vectorii sunt deja aranjați într -o listă.
Fișierul începe cu cuvântul cheie “OFF” pe prima linie. A doua linie conține trei numere :
număru l total de vectori, numărul de poligoane formate din vectorii respectivi și numărul de
muchii. De cele mai multe ori, primele două numere sunt suficiente pentru a descrie modelul iar
al treilea paramet ru poate lipsi. Fișierul continuă apoi cu coordonatele pentru atâția vectori cât
sunt specificați în prima lin ie. După urmează triplete ce conține cei trei indici ai vectorilor
descriși anterior pentru a forma fiecare poligon.

OFF
vertices polygons e dges
𝑥1 𝑦1 𝑧1
𝑥2 𝑦2 𝑧2
……
𝑥𝑛 𝑦𝑛 𝑧𝑛
……
nr 𝑣1𝑖 𝑣1𝑗 𝑣1𝑘
nr 𝑣1𝑖 𝑣1𝑗 𝑣1𝑘
……
nr 𝑣𝑛𝑖 𝑣𝑛𝑗 𝑣𝑛𝑘
……
Tabelul 6 – Structura unui fișier OBJ

Unde “vertices ” reprezintă numărul de vectori, “polygons ” reprezintă numărul de poligoane
“edges ” reprezintă numărul de muchii iar “nr” reprezintă numărul de vectori din care este format
poligonul. Caracterul “#” la început de linie marchează prezența unui comentariu.
4.4 Randarea obiectului
4.4.1 Proiecția modelului
Modelul încărcat nu poate fi reprezentat pe ecran doar pe baza datelor interpretate deoarece
obiectul este definit în spațiul 3D iar ecranul pe care este redat obiectul este definit în spațiul 2D.
Prin urmare , trebuie efectuată o conversie între cele două spații. Acea sta operație poarta numele
de proiecție : se multiplică vectorul dat de coordonatele sale , cu matricea de proiecție și astfel se
obține p roiecția în 2D a punctului. [11]

𝑃4𝑥4=
( (ℎ
𝑤)∗1
tan(θ2⁄)0 0 0
01
tan(θ2⁄)0 0
0 0𝑍𝑓𝑎𝑟
𝑍𝑓𝑎𝑟−𝑍𝑛𝑒𝑎𝑟1
0 0−𝑍𝑓𝑎𝑟∗𝑍𝑛𝑒𝑎𝑟
𝑍𝑓𝑎𝑟−𝑍𝑛𝑒𝑎𝑟0
)
( 15 )

23
Unde h reprezintă înălțimea ecranului, w reprezintă lățimea ecranului, θ reprezintă unghiul
dat de lărgimea câmpului vizual, 𝑍𝑓𝑎𝑟 reprezintă cea mai îndepărtată poziție vizibilă pe axa Z iar
𝑍𝑛𝑒𝑎𝑟 reprezintă cea mai apropiată poziție vizibilă pe axa Z. Operație de înmulțire arata astfel :

[𝑥𝑜𝑙𝑑,𝑦𝑜𝑙𝑑,𝑧𝑜𝑙𝑑,1]∗ 𝑃4𝑥4=[𝑥𝑛𝑒𝑤,𝑦𝑛𝑒𝑤,𝑧𝑛𝑒𝑤,𝑧𝑜𝑙𝑑] ( 16 )

Unde tripletul [𝑥𝑜𝑙𝑑,𝑦𝑜𝑙𝑑,𝑧𝑜𝑙𝑑] reprezintă coordonatele punctului în spațiu 3D, tripletul
[𝑥𝑛𝑒𝑤,𝑦𝑛𝑒𝑤,𝑧𝑛𝑒𝑤] reprezintă coordonatele punctului în spațiul 2D. Rezultatul obținut trebuie apoi
normalizat la spațiul determinat de ecran astfel , unde tripletul [𝑥2𝐷,𝑦2𝐷,𝑧2𝐷] reprezint ă
coordonatele ce pot fi folosite pentru reprezentarea model ului:

[𝑥𝑛𝑒𝑤
𝑧𝑜𝑙𝑑,𝑦𝑛𝑒𝑤
𝑧𝑜𝑙𝑑,𝑧𝑛𝑒𝑤
𝑧𝑜𝑙𝑑]=[𝑥2𝐷,𝑦2𝐷,𝑧2𝐷] ( 17 )

Figura 10 – Reprezentarea spațiului vizibil

4.4.2 Translația și scalarea modelu lui
În stadiul actual, coordonatele obținute sunt normalizate, acestea având valori cuprinse în
intervalul [0;1] . Singurele valori de interes sunt componentele 2D, deci valorile corespunzătoare
axei Z pot fi ign orate acum că modelul este reprezentat în sp ațiul normalizat. Deoarece spațiul
normalizat își are originea în mijloc iar spațiul ecranului își are originea în colțul din stânga sus,
valorilor obținute li se va adăuga o deplasare cu o unitate pe fiecare axă pentru a avea aceeași
origine. După această operație de translație, obiectul va trebui mărit ținând cont de proprietățile
ecranului, și nume de înălțimea și lățimea acestuia. Această operație se face înmulțind fiecare
componentă aflată pe axa X cu jumătat e din lățimea ecranului și fiecare component a aflată pe axa
Y cu jumătate din înălțimea ecranului.

[𝑥2𝐷,𝑦2𝐷 ]+[1,1]=[𝑥2𝐷+1,𝑦2𝐷+1]=[𝑥𝑜𝑓𝑓𝑠𝑒𝑡,𝑦𝑜𝑓𝑓𝑠𝑒𝑡] ( 18 )
[𝑥𝑜𝑓𝑓𝑠𝑒𝑡,𝑦𝑜𝑓𝑓𝑠𝑒𝑡 ] * [𝑤𝑖𝑑𝑡ℎ
2,ℎ𝑒𝑖𝑔ℎ𝑡
2] = [𝑥𝑜𝑓𝑓𝑠𝑒𝑡∗𝑤𝑖𝑑𝑡ℎ
2,𝑦𝑜𝑓𝑓𝑠𝑒𝑡∗ℎ𝑒𝑖𝑔ℎ𝑡
2] = [𝑥𝑝𝑟𝑜𝑗,𝑦𝑝𝑟𝑜𝑗] ( 19 )

24

Figura 11 – Diferența dintre spațiul normalizat și spațiul determinat de ecran

4.4.3 Rotația modelul ui
Ca și în cazul operației de proiecție, pentru a se realiza rotirea modelului este suficient să
multiplicăm vectorul dat de coordonatele punctelor cu așa numita m atrice de rotație. Pentru a
obține matricea de rotație, se definesc alte trei matrice, fieca re caracterizând rotația în jurul unei
singure axe. [12]

𝐴4𝑥4=(100
0cos𝛼−sin𝛼
0sin𝛼cos𝛼) ( 20 )
𝐵4𝑥4=(cos𝛽0−sin𝛽
010
sin𝛽0cos𝛽) ( 21 )
𝐶4𝑥4=(cos𝛾−sin𝛾0
sin𝛾cos𝛾0
001) ( 22 )

Unde 𝐴4𝑥4reprezintă matricea de rotație a axei X, 𝛼 reprezintă gradul de rotație în jurul axei
X, 𝐵4𝑥4reprezintă matricea de rotație a axei Y, 𝛽 reprezintă gradul de rota ție în jurul axei Y,
𝐶4𝑥4reprezintă matricea de rotație a axei Z iar 𝛾 reprezintă gradul de rotație în jurul axei Z.
Matricea de rotație este dată de produsul celor trei matrice, în ur mătoarea ordine :

𝑅4𝑥4=𝐶4𝑥4∗𝐵4𝑥4∗𝐴4𝑥4 ( 23 )
[𝑥𝑝𝑟𝑜𝑗,𝑦𝑝𝑟𝑜𝑗,𝑧𝑝𝑟𝑜𝑗]∗ 𝑅4𝑥4=[𝑥𝑟𝑜𝑡,𝑦𝑟𝑜𝑡,𝑧𝑟𝑜𝑡] ( 24 )

Unde tripletul [𝑥𝑟𝑜𝑡,𝑦𝑟𝑜𝑡,𝑧𝑟𝑜𝑡] reprezintă noile coordonate ale punctului ținând con t de
rotația impusă în jurul fiecăr ei axe.

25
4.4.4 Culoarea și textura modelului
Modelul încărcat nu conține informație despre textură sau culoare, dar acestea pot fi create în
mod artificial. Textura este de obicei salva tă într -un fișier imagine separat c ea ce înseamnă că
informația legată de textura este dată de o listă de vectori 2D. Fiecărui poligon ce formează
modelul îi poate fi asignată o pereche de coordonate 2D ce îi spune care pixeli de culoare din
imagine îl aco peră.
Problema de iluminare a mod elului este rezolvată prin niște calcule adiționale. Odată ce
poligoanele modelului sunt trecute prin etapele de proiecție, translație și scalare, se calculează
produsul scalar dintre poligon și un vector dat de poziția observato rului în spațiul 3D. Produs ul
scalar reprezintă i ntensitatea nuanței de gri cu care va fi colorat poligonul unde zero reprezintă
culoarea neagră, unu reprezintă culoarea albă iar orice valoare intre zero și unu reprezintă o
nuanță de gri oarecare. Astfel, un poligon poate fi colorat în 256 de nuanțe de gri creând astfel
iluzia de iluminare a obiectului.

𝑆ℎ𝑎𝑑𝑒 𝑜𝑓 𝑔𝑟𝑎𝑦= 255∗(𝑃𝑜𝑙𝑋∗𝑉𝑖𝑒𝑤𝑋+𝑃𝑜𝑙𝑌∗𝑉𝑖𝑒𝑤𝑌+𝑃𝑜𝑙𝑍∗𝑉𝑖𝑒𝑤𝑍) ( 25 )

4.4.5 Tăierea poligoanelor
Ultima operaț ie care mai tr ebuie implementată este cea de taiere a poligoanelor. Cu alte
cuvinte, odată ce o parte dintr -un poligon depășește una din cele patru margini ale ecranului sau
ale planului definit de poziția observatorului se încea rcă desenarea poligonului î ntr-o zonă care
nu este viz ibilă în spațiul dat de ecran. Prin urmare, un astfel de poligon trebui redus fie într-un
poligon mai mic fie în alte doua poligoane ce-l formează pe cel mai mare. Procesul este ilustrat în
figura următ oare.

Figura 12 – Procesul de tăiere a poligoanelor

26
5. Implementarea soluției adoptate
5.1 Limbajul de programare Java
Java este un limbaj de programare bazat pe clase, metode și proprietăți fiind orientat pe
obiecte (deși nu este pur obiectul datorită incluziunii a unor primitive). Este proiectat astfel încât
să aibă cât mai puține dependențe posibile. Funcționează pe pri ncipiul “scrie o dată, rulează
oriunde ”: codul Java deja compilat rulează pe orice mașină ce suportă Java fără a fie nevoie de a
fi compilat din nou. Aplicațiile Java sunt compilate în cod mașină care este după interpretat de
mașina virtuală Java (JVM) indiferent de arhitectura sistemului pe care se află instanța.
Sintaxa limbajului este similară cu cea a limbajului C sau C++ cu excepț ia faptului că nu
oferă facilitățile unui limbaj de nivel scăzut precum c ele menționate. Este considerat unul dintre
cele mai populare limbaje de programare confor m GitHub, în special în rândul aplicațiilor web de
tip client -server.
La capitolul de admini strare al memoriei interne, în Java acest proces este executat automat
de către așa -zisul Colector de Gunoi (GC) care gestionează ciclul de viață al unui obiect.
Programul determină când un obiect este creat și când nu mai există nicio referință către obie ct,
memoria alocată pentru acesta este eliberată. [13]
5.2 Mediul de dezvoltare IntelliJ
IntelliJ este un mediu de dezvoltare și programare special proiectat pent ru Java. A fost creat
de către o companie pe nume JetBrains și este disponibil în două ediții : ediția Community aflată
sub licența Apache 2.0 și ediția comercializată, Ultimate. Ceea ce face ca IntelliJ să difere față de
celelalte opțiuni prezente pe piață sunt ușurința cu care poate fi folosit, flexibilitatea precum și
design -ul puternic.
Intell iJ este capabil să analizeze codul scris precum și contextul în care se află acesta și să
ofere sugestii de rezolvare a inconsistențelor. De asemenea, permite util izatorului să sară cu
ușurință la declararea unei clase sau a unei metode. Compilatorul vine cu sisteme de control a
versiunii precum Git, Mercurial, Perforce sau SVN deja integrate. Suportul pentru accesarea a
diferitor baze de date precum Microsoft SQL S erver, Oracle , PostgreSQL, SQLite și MySQL
este și el de asemenea deja integrat, dar doar în versiunea Ultimate. IntelliJ suportă și diferite
extensii ce aduc funcționalități în plus compilatorului care pot fi descărcate direct din bara de
opțiuni. Astfel de funcționalități pot include și suportul pentru alte limbaje de programare. [14]

Figura 13 – Mediul de dezvoltare IntelliJ

27
5.3 Arhitectura sistemului implementat
5.3.1 Clasa Vector3D

Figura 14 – Diagrama clasei Vector3D

Rolul clasei Vector3D este de a reprezenta un vector în spațiu l dat d e cele trei coordonatele
ale sale. Atribute le de tip double :
• X reprezintă poziția pe axa X a vectorului.
• Y reprezintă poziția pe axa Y a vectorului.
• Z reprezintă poziția pe axa Z a vectorului.
• W este un termen unitar utilizat în procesul de multiplicare cu o matrice patru pe patru .
• dArea salvează aria poligonului pe care îl descrie vectorul.
Metodele de tip Vector3D :
• add(Vector3D, Vector3D) returnează suma celor doi vectori primiți ca parametru.
• sub(Vector3D, Vector3D) returnează suma celor doi vectori primiți ca parametru.
• mul(Vector3D, double) returnează vectorul produs înmulțind coordonatele vectorului
primit ca parametru cu valoarea de tip double primită ca parametru.
• div(Vector3D, double) returnează vectorul cât împărțind coordonatele vectorului pr imit ca
parametru cu valoarea de tip double primită ca parametru.
• getCrossProduct primește ca parametri două obiecte de tip Vector3D și returnează
produsul scalar dintre cei do i vectori .
• multiplyVectorMatrix primește ca parametri un obiect de tip Vector3D și o matrice patru
pe patru și returnează rezultatul înmulțirii dintre vector și matrice .
• intersectPlane primește ca parametri o variabilă de tip double ce reprezintă factorul de
compresie al texturii asignate vectorului și încă două obiecte de tip Vector 3D și returnează
punctul de intersecție dintre direcțiile date de cei doi vectori .
Metodele de tip double :
• getDotProduct primește ca parametri două obiecte de tip Vector3D și returnează produsul
scalar dintre cei doi vectori .
• getLength returnează lungimea vectorului utilizată în procesul de normalizare .
• getMagnitude returnează amplitudinea vectorului .
• getScale primește ca parametri patru obiecte de tip Vector3D și anume planul, normala la
plan, originea vectorului și capătul acestuia și returnează raportul dintre produsele scalare
date de cei patru vectori , si anume distanța dintre ultimii doi parametri.
• getDistance primește ca param etri doua obiecte de tip Vector3D ce descriu un plan și
returnează cea mai scurtă cale de la vector la plan.
Metodele de tip void:
• updateArea primește ca parametru o variabilă de tip double și actualizează valoarea ariei.
• normalize normalizează coordonatele vectorului.
Metoda equals de tip boolean , este suprascrisă și apelată în cazul comparației a două obiecte
de tip Vector3D . Metoda clippingAgainstPlane de tip in, primește ca parametri două obiecte de

28
tip Vector3D ce descriu un plan, un obiect de tip Polygon3D ce urmează a fi verificat iar în
ultimul parametru, un tablou de tip Polygon3D în care sunt salvate poligoanele în care a fost
împărțit poligonul de intrare. Apoi, returnează numărul de poligoane în care a fost împărțit
poligonul.
5.3.2 Clasa Polygon3D

Figura 15 – Diagrama clasei Polygon3D

Rolul clasei Polygon3D este de a reprezenta un poligon în spațiu dat de trei obiecte de tip
Vector3D . Atributele de tip int reprezintă informații legate de culoarea poligonului. Tabloul de
obiecte tip Vector3D reprezintă cele trei puncte ale triunghiului iar tabloul de obiecte d e tip
Vector2D reprezintă coordonat ele texturii asignate fiecărui punct.
Metoda de tip Vector3D returnează un obiect de tip Vector3D ce reprezintă normala la planul
definit de către poligon . Metodele de tip void:
• setColorData prime șt ca parametru un obiect de tip Polygon3D căruia îi ia cul oarea .
• convertPositionToSpace primește ca parametru o matrice ce descrie spațiul în care va fi
reprezentat poligonul, apoi convertește coordonatele acestuia la acest spațiu .
• convertTextureToSpace realizează aceeași operație asupra coordonatelor de textură .
• scaleToView normalizează coordonatele poligonului în spațiul vizual .
• offsetToView translatează coordonatele poligonului în spațiul vizual .
• transformToView transformă coordonatele poligonului în spațiul ecranului .
• invert inversează axele pe care este definit poligonul .
Metodele de tip double :
• getArea returnează aria poligonului .
• getClosestValueToScreen returnează cea mai ap ropiata valoare de observator pe axa Z .
• getFarthestFromScreen returnează cea mai îndepărtată valoare de observator pe axa Z .
5.3.3 Clasa Vector2D

29
Figura 16 – Diagrama clasei Vector2D

Rolul clasei Vector2D este a reprezenta un vector în spațiul dat de cele două coordonate ale
sale. Cele doua variabile U și V de tip double reprezintă coordonatele sale iar W reprezintă nivelul
de adâncime în buffer al texturii. Aplicabilitatea acestei clase este de a modela c oordonatele 2D
ale texturilor .
5.3.4 Clasa Texture

Figura 17 – Diagrama clasei Texture

Rolul clasei Texture este de a reprez enta un fișier imagine ce poate fi încărcat în program pe
post de textură pentru orice model. Atributul de tip BufferedImage reprezintă fișierul imagine
încărcat. Atributul de tip Color reprezintă o matrice bidimensională de aceeași dimensiune ca și
imagin ea în care este salvată informația despre culoarea fiecărui pixel.
Metoda de tip Color primește ca parametri două valori de tip int ce reprezintă un indice de
coloană respectiv un indice de rând și returnează valoarea culorii salvată la poziția respectivă .
5.3.5 Clasa Mat4x4

Figura 18 – Diagrama clasei Mat4x4

Rolul clasei Mat4x4 este de a gestiona diverse operații cu matrice folosind metode statice.
Atributul project4x4 de tip double [ ][ ] reprezintă un tablou bidimensional ce joacă rolul ma tricei
de proiecție. Metoda generateProjectionMatrix de tip void primește ca parametri două valori de
tip int care reprezintă lățimea respectiv înălțimea ecranului și populează matricea de proiecție.
Metodele de tip double [ ][ ] :
• multiplyMatr ices primește ca parametri două tablouri bidimensionale și returnează
rezultatul înmulțirii celor două matrice.
• matrixPointAt primește ca parametri trei obiecte de tip Vector3D : poziția unui observator,
direcția spre care indică acesta și direcția sus apo i returnează o matrice care odată
înmulțită cu un vector îi schimbă acestuia direcția.
• quickInverse primește ca parametru un tablou bidimensional și returnează aceeași matrice
doar ca inversată.
• generateX_rotationMatrix primește ca parametru o valoare de t ip double ce reprezintă
gradul de rotație în jurul axei X și returnează matricea de rotație în jurul acestei axe.
• generateY_rotationMatrix primește ca parametru o valoare de tip double ce reprezintă
gradul de rotație în jurul axei Y și returnează matricea de rotație în jurul acestei axe.

30
• generateZ_rotationMatrix primește ca parametru o valoare de tip double ce reprezintă
gradul de rotație în jurul axei Z și returnează matricea de rotație în jurul acestei axe.
• generateTranslationMatrix primește ca parametri trei valori de tip double apoi returnează
o matrice care odată înmulțită cu un vector acesta se deplasează pe axe în funcție de
parametrii primiți de funcție.
5.3.6 Clasa FileReader3D

Figura 19 – Diagrama clasei FileReader3D

Rolul clasei FileReader3D este de a gestiona operațiile cu fișierele ce conțin informații
despre modelul încărcat. Tabloul de obiecte de tip Vector2D conține coordonatele ce descriu cum
este plasată un obiect de tip Texture pe un poligon. Lista de tip Arra yList conține elemente de tip
Vector3D în care sunt salvate toți vectorii unui model citit din fișier. Obiectul sFileName de tip
String reprezintă numele fișierului încărcat.
Metoda de tip Texture, openTexture, returnează textura modelului dacă fișierul în cărcat este
un fișier imagine. Metodele de tip ArrayList <Polygon3D> :
• loadSTL(File) primește ca parametru un obiect de tip File ce reprezintă fișierul citit cu
extensia STL și interpretează datele din acesta obți nându -se astfel modelul apoi
returnează o lis tă cu vectorii ce -l formează .
• loadOBJ(File) primește ca parametru un obiect de tip File ce reprezintă fișierul citit cu
extensia OBJ și interpretează datele din acesta obținându -se astfel modelul apoi
returnează o listă cu vectorii ce -l formează .
• loadOFF(F ile) primește ca parametru un obiect de tip File ce reprezintă fișierul citit cu
extensia OFF și interpretează datele din acesta obținându -se astfel modelul apoi
returnează o listă cu vectorii ce -l formează .
• openFile() verifică tipul fișierului citit și ap elează metoda corespunzătoare pentru
interpretarea acestuia .
5.3.7 Clasa ModelViewer

Figura 20 – Diagrama clasei ModelViewer

Rolul clasei ModelViewer este de a gestiona componentele grafice aflate în fereastra
principală prin m oștenirea clasei JFrame . Clasa implementează interfața Runnable pentru a

31
gestiona un fir de execuție care cere redesenarea modelului pe ecran la un interval de milisecunde
prin m etoda run de tip void implementată. Atributele de tip JCheckBoxMenuItem au rol ul de
semafor pentru modul de reprezentare al modelului (întreg, cu sau fără textura, doar muchii, sub
formă de puncte). Celelalte trei atribute de tip JPanel gestionează câte o zonă din fereastra
principală (panoul de date unde sunt prezente rezultatele c alculate , panoul de reprezentare a
obiectului și panoul de control unde sunt gestionate elemente precum poziția luminii, camerei sau
lista de modele încărcate).
5.3.8 Clasa Contr olPanel

Figura 21 – Diagrama clasei ControlPanel

Rolul clasei ControlPanel este de a gestiona panoul cu informații de control despre modelul
prezent în scenă prin moștenirea clasei JPanel . Atributul parent de tip ModelViewer salvează o
referință către fereastra principală din care face parte panoul curen t pentru a avea acces la
metodele ce controlează întreaga fereastră. Atributul table de tip JTable este un tabel populat cu
toate modelele încărcate ce se actualizează automat la adăugarea sau ștergerea unei scene.
Atributul tableModel de tip DefaultTableM odel este utilizat pentru a gestiona controlul la
elementele tabelului. Atributele de tip JTextField [ ]:
• textFieldCamera reprezintă un tablou unidimensional populat de trei câmpuri de tip text
ce conțin poziția camerei în spațiu și se actualizează automat odată ce poziția camerei în
spațiu se schimbă.
• textFieldLight reprezintă un tablou unidimensional populat de trei câmpur i de tip text ce
conțin poziția locului de origine al luminii în spațiu și se actualizează automat odată ce
poziția sursei de lumină se schimbă.
• textFieldRotation reprezintă un tablou unidimensional populat de trei câmpuri de tip text
ce conțin fiecare gra dul de rotație față de fiecare axă din spațiul 3D și se actualizează
automat odată ce unghiul de rotație față de o axă s -a schimbat și e l.
Metodele de tip void:
• updateTextFields() actualizează fiecare câmp de tip text odată ce apare o acțiune a
utilizatorului care modifică unul din cele trei atribute .
• updateTable(WorldPanel) primește ca parametru un obiect de tip WorldPanel ce
reprezintă o referință la panoul de redare al obiectelor care conține o listă cu scenele
încărcate, listă folosită pentru actualizarea valorilor din tabel.
• updateControlPanel() este apelează celelalte două metode de actualizare a câmpurilor
panoului odată ce un elemen t și-a schimbat valoare.
• placeComponents(SpringLayout, int[ ], JLabel, JTextField[ ], JButton, Component,
Com ponent) primește ca parametri un obiect de tip SpringLayout ce reprezintă schema de
aranjare în panou a componentelor, un tablou unidimensional de tip int ce reprezintă

32
distanța dintre componente și marginile panoului, un obiect de tip JLabel și de tip
Com ponent ale căror poziție este folosită ca referință și plasează obiectele de tip
JTextField din tabloul unidimensional și obiectul de tip JButton în fereastră în funcție de
schema de aranjare aleasă și poziția de referință, metoda fiind apelată pentru fiecare din
cele trei tablouri ce gestionează cele trei proprietăți ale unui model.
5.3.9 Clasa DataPanel

Figura 22 – Diag rama clasei DataPanel

Rolul clasei DataPanel este de a gestiona panoul cu rezultatele calculului momentelor
statistice ale obiectelor încărcate în program prin moștenirea clasei JPanel . Acest panou este
populat odată ce utilizatorul selectează butonul de calculare a momentelor. Panoul este populat în
fiecare posibilitate de eveniment astfel:
• în cazul în care nu este nicio scenă prezentă în panoul de redare, panoul de date este
populat cu două mesaje în care este anunțată lipsa scenelor.
• În cazul în care e ste o singura scenă prezentă în panoul de redare, panoul de date va fi
populat de rezultatele calculelor momentelor statistice pentru scena respectivă dar și cu un
mesaj în care utilizatorul este anunțat de lipsa unei scene adiționale.
• În cazul în care sun t prezente două sau mai multe scene în panoul de redare, panoul de
date va fi populat de rezultate calculelor momentelor statistice pentru ultimele două scene
încărcate în program, rezultatele fiind afișate unul lângă celălalt.
Atributul parent de tip Mode lViewer salvează o referință către fereastra principală din care
face parte panoul curent pentru a avea acces la metodele ce controlează întreaga fereastră.
Atributul moments de tip JTextPane [ ] reprezintă un tablou unidimensional populat de două
obiecte de acest tip ce conțin informațiile date de momentele statistice ale ultimelor două scene
încărcate. Ele sunt plasate în panou unul lângă celălalt pentru o comparație mai ușoara.
Rezultatele sunt afișate cu o precizie de patru cifre zecimale.
Metodele de tip void:
• updateMoments() este apelată odată ce utilizatorul selectează butonul de calculare a
momentelor și pe baza atributului parent primește momentele ultimelor două scene
încărcate pe care le interprete ază și aranjează în casetele text designate după care apelează
metoda de calculare a distanței euclidiene.
• calculateDistance(Moments [ ]) primește ca parametru un tablou unidimensional de
obiecte de tip Moments populat de două astfel de obiecte și folosește informațiile statistice
din fiecare obiect pentru a calcula distanța euclidiană dintre ultimele două modele
încărcate în program, după care creează un obiect de tip JOptionPane în care anunță
utilizatorul de rezultatul calculelor.
Tot acest obiect de tip JOptionPane este folosit de acest panou pentru a anun ța utilizatorul
dacă nu este nicio scenă prezenta în panoul de redare sau dacă este o singură scenă încărcată.

33

5.3.10 Clasa Scene

Figura 23 – Diagrama clasei Scene

Rolul clasei Scene este de a modela parametrii spațiului în care este redat modelul. Atributele
de tip ArrayList <Polygon3D> :
• mesh este o listă de obiecte de tip Polygon3D ce reprezintă toate poligoanele ce formează
suprafața geometrică a modelului.
• projMesh este o listă de obiecte de tip Polygon3D ce reprezintă toa te poligoanele ce au
fost supuse operației de proiecție în spațiul modelat.
Atributele de tip double [ ]:
• dWorl dMatrix este matricea de rotație a spațiului cu care sunt multiplicate vectorii
fiecărui poligon pentru a efectua operația de rotație.
• dViewMatrix este matricea utilizată pentru a plasa modelul în fața camerei prin
multiplicarea cu vectorii ce formează pol igoanele.
• dTranslationMatrix este matricea utilizată pentru alinierea originii modelului cu originea
axelor desemnate de spațiul 2D al ecranului.
Atributele de tip Vector3D :
• vCamera este un vector în spațiul 3D ce modelează poziția camerei în spațiul 3D
reprezentată printr -un singur punct.
• vLight este un vector în spațiul 3D ce modelează poziția luminii în spațiul 3D reprezentată
printr -un singur pu nct.
• vRotation este un vector în spațiul 3D utilizat pentru a conține unghiurile de rotație față de
fiecare di n cele trei axe.
Atributele de tip boolean :

34
• bFace este o variabilă booleană ce indică dacă modelul este reprezentat prin desenarea
completă a poli goanelor.
• bTexture este o variabilă booleană ce indică dacă textura încărcată pe model este și ea
redată sau n u.
• bWireframe este o variabilă booleană ce indică dacă poligoanele sunt reprezentate doar
prin redarea muchiilor lor.
• bPoints este o variabilă boo leană ce indică dacă poligoanele sunt reprezentate doar prin
redarea punctelor ce le formează.
Atributele de t ip int:
• iWidth este o variabilă ce conține lățimea ecranului.
• iHeight este o variabilă ce conține înălțimea ecranului.
• iShader este o variabilă ce ia valori în intervalul [1;4] pentru a indica panoului de redare a
modelului modul ales pentru reprezentarea acestuia.
Atributele de tip double :
• dClosestValue este o variabilă ce conține poziția pe axa Z a celui mai apropiat vector al
modelului față de ve ctorul cameră.
• dFarthestValue este o variabilă ce conține poziția pe axa Z a celui mai îndepărta t vector
al modelului față de vectorul cameră.
• dDistanceFromCamera este o variabilă în care este salvată diferența dintre cele două
poziții pentru a translata m odelul îndeajuns de mult astfel încât sa fie vizibil.
Atributul sMeshName de tip String salvează numele modelului încărcat, nume luat din fișierul de
date citit. Atributul texture de tip Texture salvează o referință la textura înc ărcată pe obiect.
Atributu l moments de tip Moments reprezintă un obiect ce conține momentele statistice ale
modelului încă rcat odată ce sunt calculate.
Metoda getProjection() de tip ArrayList <Polygon3D> returnează lista poligoanelor supuse
operației de translație. Metoda getTextur e() de tip Texture returnează referința la textura încărcată
pe obiect. Metoda getMoments() de tip Moments returnează obiectul în care sunt salvate
momentele statistice ale modelului. Aceste metode de sunt apelate de celelalte panouri pentru a
menține cons istența datelor reprezentate pe ecran. Metodele de tip int:
• getShader() returnează tipul ales de redare al poligoanelor.
• getNumberOfFacets() returnează numărul total de poligoane ce formează.
• getNumberOfVertices() returnează numărul total de vectori ce for mează modelul.
Metodele de tip boolean :
• isFaceModeSelected() returnează valoarea salvată în atributul bFace și indică panoului de
redare dacă poligoanele sunt sau nu reprezentate complet.
• isTextureModeSelected() returnează valoarea salvată în atributul bTexture și indică
panoului de redare dacă este reprezentată sau nu textura modelului.
• isWireFrameSelected() returnează valoarea salvată în atributul bWireframe și indică
panoului de redare daca poligoanele sunt sau nu reprezentate prin desenarea muchiilor lo r.
• isPointsModeSelected() returnează valoarea salvată în atri butul bPoints și indică panoului
de redare dacă poligoanele sunt sau nu reprezentate prin desenarea punctelor lor.
Metodele de tip void:
• changeTexture(Texture) primește ca parametru un obiect de tip Texture și schimbă astfel
textura modelului modificând a tributul texture .
• changeShader(int) primește ca parametru o variabilă de tip int și schimba modul de redare
al poligonului modificând atributul iShader .
• loadCube() creează un model ce descrie fo rma unui simplu cub și este apelată la
deschiderea programulu i și în cazul în care eșuează citirea unui fișier.
• projectMesh() gestionează întregul proces de proiecție al modelului în spațiul 2D al
ecranului apelând restul operațiilor de transformare.

35
• updat eTranslationMatrix() actualizează matricea de translație folo sită, de fiecare dată
când un obiect nou este încărcat în program.
• updateWorldMatrix() actualizează matricea de rotație folosită, de fiecare dată când
utilizatorul dorește sa rotească obiectul în jurul unei axe.
• updateViewMatrix() actualizează matricea cu ajutorul căreia se plasează în fața camerei
obiectul, de fiecare dată când utilizatorul modifică poziția vectorului cameră.
• changeDisplayToFaceMode(boolean) primește ca parametru o variabilă de t ip boolean și
actualizează valoarea atributului bFace la intervenția utilizatorului.
• changeDisplayToTextureMode(boolean) primește ca parametru o variabilă de tip boolean
și actualizează valoarea atributului bTexture la intervenția utilizatorului.
• changeDis playToWireframeMode(boolean) primește ca parametr u o variabilă de tip
boolean și actualizează valoarea atributului bWireframe la intervenția utilizatorului.
• changeDisplayToPointsMode(boolean) primește ca parametru o variabilă de tip boolean
și actualizează valoarea atributului bPoints la intervenția utilizatorului.
• resetCamera() readuce vectorul cameră la poziția inițială acționând asupra valorilor
atributului vCamera .
• resetLight() readuce vectorul lumină la poziția inițială acționând asupra valorilor
atributului vLight .
• resetRotation() readuce vectorul rotație la poziția inițială acționând asupra valorilor
atributului vRotation .
5.3.11 Clasa WorldPanel

Figura 24 – Diagrama clasei WorldPanel

Rolul clasei WorldPan el este de a ge stiona parametrii panoului în care sunt redate obiectele
încărcate, prin moștenirea clasei JPanel . Atributele de tip JSlider :
• sliderRotationX este un cursor vertical poziționat în marginea din stânga a modelului
redat, folosit pentru a contr ola rotația în jurul axei X.
• sliderRotationY este un cursor orizontal poziționat în marginea superioară a modelului
redat, folosit pentru a controla rotația în jurul axei Y.
Atributele de tip int[ ]:
• iXSlider este un tablou unidimensional în care este salvată poziția cur sorului
sliderRotationX în panou.
• iYSlider este un tablou unidimensional în care este salvată poziția cursorului
sliderRotationY în panou.
Atributele de tip int:
• iWidth este o variabilă ce conți ne lățimea ecranului.

36
• iHeight este o variabilă ce conține înăl țimea ecranului.
• iMousePressed este o variabilă ce arată care buton al mouse -ului a fost apăsat.
• iMouseLastX este o variabilă ce conține ultima poziție pe axa X a cursorului mouse -ului.
• iMouseLastY este o variabilă ce conține ultima poziție pe axa Y a cur sorului mouse -ului.
• iSelectedScene este o variabilă ce conține indicele din listă a scenei care este selecta tă
pentru a ști ce parametri trebuie modelați.
Atributul parent de tip ModelViewer salvează o referință către fereastra principală din care
face pa rte panoul curent pentru a avea acces la metodele ce controlează întreaga fereastră.
Atributul scenes de tip ArrayList <Scene> este o listă populată de scenele redate în panou, fiecare
scenă conținând un obiect încărcat. Atributul draw de tip Draw gestionea ză operațiile de desenare
a formelor geometrice pe ecran cât și de gestionarea a unui buffer grafic ce permit intersecția
scenelor. Atributul bRendering de tip boolean este o variabilă booleană ce indică daca panoului i
se cere sau nu redarea scenelor încă rcate.
Metodele de tip Vector3D :
• getCameraProperties() returnează poziția în spațiul 3D a vectorului cameră al scenei
selectate prin atributul iSelectedScene .
• getLightProperties() returnează poziția în spațiul 3D a vectorului lumină al scenei
selectate pr in atributul iSelectedScene .
• getRotationProperties() returnează cele trei unghiuri de rotație din jurul fiecă rei axe a
scenei selectate prin atributul iSelectedScene .
Metodele de tip void:
• paintComponent(Graphics) primește ca parametru un obiecte de tip Graphics ce deține
controlul asupra componentelor și operațiilor grafice ale panoului și este metoda apelată
de fiecare dată când se cere redarea obiectelor încărcate în scene.
• drawMesh(Scene, boolean, Graphics) primește ca parametri același obiect de tip
Graphics, o variabilă booleană ce indică daca obiectul trebuie redat sau nu și un obiect de
tip Scene ce reprez intă scena în care se află obiectul ce se dorește a fi redat.
• loadScene(Scene) primește o ca parametru un obiect de tip Scene ce reprezintă scena c e va
fi adăugată în listă prim apelul metodei.
• loadTexture(Texture) primește o ca parametru un obiect de tip Texture ce reprezintă
textura ce va fi adăugată obiectului din scena selectată.
• removeSceneAtIndex(int) primește ca parametru o variabilă de tip în treg ce reprezintă
indicele scenei ce se dorește a se elimina din li stă prin apelul metodei.
• unloadMeshes() șterge toate scenele din listă.
• changeSelection(int) primește ca parametru o variabilă de tip întreg ce indică indicele
scenei ce se dorește a fi se lectate din listă prin apelul metodei.
• updateSlidersPosition() repoz iționează cele două cursoare ce modelează rotația obiectului
din scena selectată după ce este apelată metoda de actualizarea valorilor.
• updateSlidersPositionValues(int [ ]) actualizează v alorile ce conțin pozițiile celor două
cursoare pentru a fi citite u lterior în procesul de repoziționare.
• changeShaderToFlatStyle() schimbă modul de redare a obiectelor în unul în care vectorul
lumină acoperă uniform suprafața unui poligon.
• changeShaderTo GradientStyle() schimbă modul de redare a obiectelor în unul în care
vectorul lumină acoperă diferit fiecare punct din suprafața unui poligon creând astfel
iluzia unui gradient.
• changeShaderToColorfulStyle() schimbă modul de redare a obiectelor în unul în care
fiecare vector ia o culoare în spațiul RGB dată de către vector ul normal ce -l descrie.
• resetCamera() resetează poziția vectorului cameră la (0,0,0) din scena selectată .
• resetRotation() resetează unghiurile de rotație la (0,0,0) din scena selectată.
• resetLight() resetează poziția vectorului lumină la (0,0, -1) din scena selectată.

37
• changeDisplayToFaceMode(boolean) primește ca parametru o variabilă booleană ce
indică daca se dorește sau nu reprezentarea modelului prin desenarea completă a
poligoanelor.
• changeDisplayToTextureMode(boolean) primește ca parametru o variab ilă booleană ce
indică daca se dorește sau nu redarea texturii încărcată pe model.
• changeDisplayToWireframeMode(boolean) primește ca parametru o variabilă booleană ce
indică daca se dorește sau nu reprezentarea modelului prin desenarea muchiilor
poligoanel or.
• changeDisplayToPointsMode(boolean) primește ca parametru o variabilă booleană ce
indică daca se dorește sau nu reprezentarea modelului prin redarea punctelor ce îl
formează.
• toggleRendering () schimbă valoarea atributului bRendering pentru a indica daca se
dorește sau nu redarea obiectelor aflate în scenele încărcate.
5.3.12 Clasa Draw

Figura 25 – Diagrama clasei Draw

Rolul clasei Draw este de a gestiona operațiile de reprezentarea figurilor geometrice pe ecran
ținând cont de lumina, rotația și poziția fiecărei scene în parte. Atributul fDepthBuffer de tip
float[ ][ ] este un tablou bidimensional ce reprezintă un buffer de adâncime în c are sunt salvate
componentele de pe axa Z cele mai apropiat de vectorul cameră și nu permite a se desena peste o
poziție mai apropiată a unui obiect mai îndepărtat. Acest buffer operează pe toate scenele.
Atributul iSelectedBuffer de tip int[ ][ ] este un tablou bidimensional ce repre zintă și el la
rândul lui un buffer de adâncime, dar modelează doar scena selectată. Acest buffer este utilizat
pentru a plasa corect în panou cursoarele de rotație ale obiectului.
Atributul grayTable de tip Color [ ] este un t ablou unidimensional populat d e toate nuanțele
de gri ce pot fi reprezentate. Este inițializat cu aceste valori la pornirea programului iar atunci
când un poligon trebuie reprezentat cu o anumită nuanță de gri, se face trimitere la acest tablou
pentru a ev ita calcule repetate.
Atributu l colorTable de tip Color [ ][ ] este un tablou bidimensional populat de toate culorile
din spațiul RGB ce pot fi reprezentate. Este inițializat cu aceste valori la pornirea programului iar
atunci când un poligon trebuie reprez entat cu o astfel de culoare, se face trimitere la acest tablou
pentru a evita calculele repetate. Atributele de tip int:
• iWidth este o variabilă ce conține lățimea ecranului.
• iHeight este o variabilă ce conține înălțimea ecranului.
Metode drawBounds(Graphics) de tip int[ ] returnează un tablou unidimensional ce conține
marginile modelului selectat pentru a putea poziționa în panou cursoarele ce controlează rotația.
Metoda swap(float, float) de tip float primește doi parametri de tip float și realizează
interschimbarea între aceste dou ă valori. Metodele de tip int:

38
• swap(int, int) primește doi parametri de tip int și realizează interschimbarea între cei doi.
• getUpperBound() returnează marginea superioară a modelului.
• getLowerBound() returneaz ă marginea inferioară a modelului.
• getLeftBoun d() returnează marginea stângă a modelului.
• getRightBound() returnează marginea dreaptă a modelului.
Metodele de tip void:
• points(Polygon3D, Graphics) primește ca parametri un obiecte de tip Graphics ce deține
controlul asupra componentelor și operațiilor grafice ale panoului și un obiect de tip
Polygon3D reprezentat pe ecran prin apelul metodei, poligon format prin desenarea celor
trei puncte ce -l forme ază.
• wireframe(Polygon3D, Graphics) primește ca parametri același obiect de tip Graphics și
un obiect de tip Polygon3D reprezentat pe ecran prin apelul metodei, poligon format prin
desenarea muchiilor ce -l formează.
• triangle(boolean, Polygon3D, double, Te xture, int, Graphics) primește ca parametri
același obiect de tip Graphics , un obiect de tip Polygon3D reprezentat pe ecran prin
apelul metodei, poligon format prin desenarea completă a suprafeței sale. Parametrul de
tip boolean indică daca poligonul se află în scena curent selectată. Parametrul de tip
Texture reprezintă textura ce se dorește a fi încărcat ă pe obiect. Dacă acest parametru este
nul, modelul este reprezentat fără textură. Parametrul de tip int reprezintă tipul de lumină
ales pentru redarea obiectului. Parametrul de tip double reprezintă distanța dintre model și
vectorul cameră pentru a forma efectul de gradient.
• resetBuffer() reinițializează buffer -ul de adâncime la fiecare iterație prin care se apelează
metoda de desenare.
5.3.1 4 Clasa Moments

Figura 26 – Diagrama clasei Moments

Rolul clasei Moments este de a stoc a într-un singur loc momentele statistice ale unui obiect.
Atributul dInertia de tip double [ ][ ] reprezintă un tablou bidimensional ce reprezintă matricea de
inerție a obiectului. Atributul vCenter de tip Vector3D reprezintă coordonatele centrului de
greutate al obiectului. Atributul vertices de tip ArrayList <Vector3D> este o listă populată de toți
vectorii ce formează suprafața geometrică a modelului. Atributele de tip double [ ][ ] :
• dGeometricMoments este un tablou bidimensional populat de momentele geometri ce.
• dCentralMoments este un tablou bidimensional populat de momentele centrale.
• dNormalizedMoments este un tablou bidimensional populat de momentele normalizate.
Metoda toString() de tip String este metoda de bază suprascrisă ce returneaz ă calculele
efectu ate sub forma unui șir de caractere. Metodele de tip void:
• getVertices(ArrayList <Polygon3D>) primește ca parametru o listă de poligoane și pe
baza ei populează lista de vectori distincți.
• calculateGeometricMoments() populează matricea mom entelor geometrice .
• calculateCenter() salvează în atributul vCenter poziția centrului de greutate al obiectului.

39
• calculateCentralMoments() populează matricea momentelor centrale, translatând
momentele geometrice folosind poziția centrului de greutate.
• calculateNormalizeMome nts() populează matricea momentelor normalizate prin procesul
de normalizare a momentelor centrale.
• calculateInertia() populează matricea de inerție a obiectului.
5.3.15 Clasa MomentsByOrder

Figura 27 – Diagrama clasei MomentsByO rder

Rolul clasei MomentsByOrder este a porni un fir de execuție prin moștenirea clasei Thread ce
calculează momentele de un anumit ordin, primit prin valoarea atributului de tip iOrder de tip int.
Atributul dMoments de tip double [ ][ ] este un tablou bi dimensional populat de momentele
geometrice calculate pe baza vectorilor aflați în atributul vertices de tip ArrayList <Vector3D>.
Metoda getMoments() de tip double [ ][ ] returnează matricea momentelor, permițând astfel
accesul la rezultatul calculelor al unor clase exterioare. Metoda run() de tip void este metoda
implementată de către clasa Thread , suprascrisă ulterior. Această metodă este apelată de fiecare
dată când este pornit un fir de execuție de tip MomentsByOrder.
Deoarece importante sunt toate mo mentele până la ordinul trei, pornind simultan trei fire de
execuție pentru fiecare moment creșt e performanța calculelor având în vedere volumul de date ce
trebuie procesat.
5.3.16 Clasa Main

Figura 28 – Diagrama clasei Main

În această clasă se află metoda main . Această metodă este considerată punctul de acces al
întregului program, fiind metodă căutată de JVM.
În această metodă este creat un nou obiect de tip ModelViewer ce reprezintă întreaga interfață
grafică a programulu i. Interfața este apoi centrata pe mijlocul ecranului. Urmează apoi crearea
unui nou obiect de t ip Thread care primește ca parametru în constructorul obiectul ModelViewer .
Acest lucru este realizabil datorită faptului ca obiectul ModelViewer implementează interfața
Runnable , asignând astfel comportamentul firului de execuție, obiectului de tip Thread . După
care, firul de execuție este pornit. În acest fir de execuție se cere redesenarea panoului o dată la
16.66 milisecunde, ceea ce stabilizează procesul la afișarea a maxim 60 de cadre pe secundă.

40
6. Rezultate experimentale
Prin implementarea cl aselor prezentate în capi tolul anterior, s -a reușit aplicarea teoriei
momentelor statistice în spa țiul 3D asupra sc anărilor dentare digitale, obți nându-se astfel niște
rezultate concrete ce pot fi interpreta te pentru a calcula simetria dintre cele două modele.
De asemenea , software -ul este capabil să red ea orice model 3D c ât timp se află sub un format
ce poate fi interpretat de către program. Modelul este luminat co respunzător și i se pot ad ăuga
diferite texturi sub forma fișierelor imagine.
6.1 Aplicarea algoritmului asupra unor scanări dentare 3D
În tabelul și figura de mai jos sunt prezentate rezultatele obținute în urma apl icării
algoritmului descris asupra unei scanări di gitale imediat după operaț ie. Tabelul este populat cu
rezultatele produse de către soft ware -ul creat iar figura est e o captură f ăcută a panoului de redare .

Momentele normalizate de ordinul zero
N[0][j][k] Matricea de inerție
J=0 J=1 J=2
K=0 1.0 0.0 26.3811 163.6308 -7.4302 0.1621
K=1 0.0 -26.9342 0.0231 7.4302 505.3266 26.9342
K=2 137.2497 0.0746 2.0367 0.1621 26.9342 394.4581
Momentele normal izate de ordinul unu
N[1][j][k] Coordonatele centrului de greutate
J=0 J=1 J=2 X Y Z
K=0 0.0 7.4302 0.0036 -3.5822 -13.1611 1.9691
K=1 -0.1621 -0.0015 0.4245
K=2 -0.0047 -0.6920 2.1659
Momentele normalizate de or dinul doi
N[2][j][k]
J=0 J=1 J=2
K=0 368.0770 -1.1619 25.3738
K=1 0.1650 -6.2869 84.79 88
K=2 4.5949 -29.6557 0.3926
Tabelul 7 – Momentele sta tistice ale cavității orale imediat după operație

Figura 29 – Reprezentarea digital ă a amprentei orale luată imediat după operație

41
În tabelul și figura de mai jos sunt prezentate rezultatele obținute în urma apl icării
algoritmului descris asupra unei scanări di gitale la un t imp mai îndelungat după operaț ie. Astfel,
gingia a avut mai mult timp s ă se vindece de la sine. Tabelul este populat cu rezultatele produse
de către soft ware -ul creat iar figura est e o captură f ăcută a panoului de redare .

Momentele normalizate de ordinul zero
N[0][j][k] Matricea de inerție
J=0 J=1 J=2
K=0 1.0 0.0 16.5969 453.3721 -10.3425 16.2234
K=1 0.0 -16.6832 -0.0199 -10.3425 596.2036 16.6832
K=2 436.7752 -0.0772 3.1672 16.2234 16.6832 176.0253
Momentele normal izate de ordinul unu
N[1][j][k] Coordonatele centrului de greutate
J=0 J=1 J=2 X Y Z
K=0 0.0 10.3425 0.0219 -0.39 -10.1991 6.0743
K=1 -16.2234 0.0396 0.0831
K=2 -1.2371 -0.9881 -15.7745
Momentele normalizate de or dinul doi
N[2][j][k]
J=0 J=1 J=2
K=0 159.4284 0.0892 1.2378
K=1 0.1014 -1.1844 -5.4670
K=2 32.3553 33.67 52 0.2274
Tabelul 8 – Momentele statistice ale cavității orale la un timp după operație

Figura 30 – Reprezentarea digital ă a amprentei orale luată la un timp după operație

În amb ele figuri este rep rezentată zona de interes, și anume cavitatea lăsată liberă de lipsa
molarului unui. Prin urmare, zona de interes se află între premolarul doi și molarul doi al
mandibulei.
În prima figură se poate observa cum gingia este infla mată în urma extragerii mo larului unu ,
inflamație dată de volumul mai mare ocupat de aceast a în spațiu având în vedere lipsa informației
de culoare . În a doua figur ă se poate observa cum inflamația gingiei a scăzut datorit ă faptului c ă a
avut timp s ă se vindece. Având în vedere că diferența zonei de interes dintre cele două figuri nu
este sesizabilă la prima analiz ă, aici intervine aplicabilitatea momentelor statistice asupra acestor
amprente digitale.

42

Figura 31 – Rezultatu l în urma calculului distanței Euclidiene

Distanța euclidiană aplicată peste datele extrase din cele două fișiere ne oferă un grad de
simetrie de 526.547 de unități (sunt luate în considerare și art efactele prezente în cele două
amprente) . Pentru a urm ări cu adev ărat procesul de vinde care al gingiei, aplicarea algoritm ului
asupra unei alte amprente den tare luat ă la o distanț ă și mai mare de timp dintre operație și
sesiunea de control. Apoi se pot compara rezultatele dintre cele două comparații pentru a ajuta
medicul dentist să ajung ă la o concluzie concretă.
6.2 Î ndepărtarea artefactelor și curățarea modelului
Aceste momente sunt sensibile la or ice schimbare dintre modele, valoarea lor putând fi
influențată și de un singur poligon din suprafața geometrică. Datorit ă acestei sensi bilități la
diferenț a dintre modele ale mom entelor statistice , algoritmul aplicat în stadiul actual este
susceptibil la erori. Aceste erori sunt de natură umană deoarece . Deși algoritmul este capabil să
normalizeze aspectele ce țin de orientarea modelului, aceste nu este capabil să elimine automat
artefactele prezente în scanarea făcută . Aceste art efacte apar în timpul achiziției datelor folosind
aparatul CAD/CAM dacă medicul dentist scanează într -una din amprente o zonă c are nu
reprezint ă niciun interes , cum ar fi o bucată din partea superioară a cavi tății orale pentru maxilar
sau o bucată din partea inferioară a cavității orale pentru mandibulă.

Figura 32 – Eliminarea artefact elor din amprenta digitală

43
Aceste art efacte pot fi eliminate ulterior folosind un s oftware adițional capabil să proceseze
modele 3D sau printr -un efort suplimentar depus de medicul dentist în procesul de achiziție a l
datelor astfel încât să nu captureze informație suplimentară .

7. Concluzii
8. Bibliografi e
[1] B. Culic, C. Gasparik, M. Varvara and A. Burde, “Computer Aided Design/Computer Aided
Manufacturing”, University o f Medicine and Pharmacy, Cluj – Napoca, Oct. 2018
[2] “Stereo lithography Interface Specification”, 3D Systems Inc., Oct. 1989
[3] “Object Files”, http://paulbourke.net/dataformats/obj/ , Wavefront Techn ologies, May 2013
[4] “Object File Format”, http://segeval.cs.princeton.edu/public /off_format.html , Princeton Shape
Benchmark, Oct. 1986
[5] J. Lawrence, M. Kazhdan, A. Klein, T. Funkho use, A. Finkelstein and D. Dobkin, “3D
Polygon Rendering Pipeline”, University of Virginia, Virginia, Oct. 2012
[6] G. Davidowitz and P. G. Kotick, “Den tal Clinics of North America”, Volume 55, Issue 3,
“The use of CAD/CAM in Dentistry”, Pages 559 -570, Jul . 2011
[7] T. Otto and S. De Nisco, “Internati onal Journal of Prosthodontics”, “Computer -aided ceramic
restorations: A 10 -year prospective clinical stud y of Cercec CAD/CAM inlays and on lays ”,
Pages 122 -128, Mar. 2002
[8] E. A. McLaren and L. Hyo, “CAD/CAM Update: technologies and materials and clinical
perspective”, “Inside Dentistry Magazine”, 2006
[9] J. Flusser, T. Suk and Barbara Zitova, “2D and 3D I mage Analysis by Moments”, Institute of
Information Theory and Automation, Czech Academ y of Sciences, Pr ague, Pages 100 – 101,
Jan. 2017
[10] E. Mach, “The Science of Mathematics (1919) ”, Pages 173 – 187, Nov. 2014
[11] “OpenGL Projection Matrix”, http://www.songho.ca/ope ngl/gl_projectionm atrix.html ,
S. H. Han, 2008 -2018
[12] J. Flusser, T. Suk and Barbara Zitova, “2D and 3D Image Analysis by Moments”, Institute
of Information Theory and Automation, Czech Academy of Sciences, Prague,
Pages 99 – 100, Jan. 2017
[13] A. Binstock, “Java’s 20 Years of Innovation”, Forbes, May 2015
[14] Z. Kalyuzhnaya, “IntelliJ IDEA 2019.2: Java 13 Preview Features, Profiling Tools, Services
Tool Window and More”, JetBrains, July 2019

44
9. Anexe
9.1 Lista tabelelor
Tabelul 1 – The normalized image moments up until the third order of the lower jaw of a patient
taken before surgery ………………………….. ………………………….. ………………………….. ……………………. 7
Tabelul 2 – The normalized image moments up until the thi rd order of the lower jaw of a patient
taken after surgery ………………………….. ………………………….. ………………………….. ………………………. 8
Tabelul 3 – Structura unui fiș ier STL de format ASCII ………………………….. ………………………….. . 20
Tabelul 4 – Structura unui fișier STL de format binar ………………………….. ………………………….. … 21
Tabelul 5 – Structura unui fișier OBJ ………………………….. ………………………….. ……………………….. 21
Tabelul 6 – Structura unui fișier OBJ ………………………….. ………………………….. ……………………….. 22
9.2 Lista fig urilor
Figur a 1 – Software architecture ………………………….. ………………………….. ………………………….. …… 3
Figura 2 – Scan of the bite taken after the surgery ………………………….. ………………………….. ……….. 6
Figura 3 – Comparison results between the two scans of the lower jaw of a patient, first one taken
before the medical intervention and the second taken after the intervention ………………………….. … 8
Figura 4 – Fluxul de lucru în procesul de manufacturare digitală directă ………………………….. …… 13
Figura 5 – Modul de descriere a suprafeței geometrice a unui ceainic ………………………….. ……….. 14
Figura 6 – Etapele analizei imaginilor ………………………….. ………………………….. ………………………. 15
Figura 7 – Rotirea față de fiecare axă în parte dată de vectorii proprii ………………………….. ………. 18
Figura 8 – Distanța euclidiană dintre două puncte plasate în spațiul cartezian 3D …………………… 19
Figura 9 – Reprezentarea unui fișier STL ………………………….. ………………………….. ………………….. 20
Figura 10 – Reprezentarea spațiului vizibil ………………………….. ………………………….. ……………….. 23
Figura 11 – Diferența dintre spațiul normalizat și spațiul determinat de ecran ……………………….. 24
Figura 12 – Procesul de tăiere a poligoanelor ………………………….. ………………………….. …………….. 25
Figura 1 3 – Mediul de dezvoltare I ntelliJ ………………………….. ………………………….. ………………….. 26
Figura 14 – Diagrama clasei Vector3D ………………………….. ………………………….. …………………….. 27
Figura 15 – Diagrama clasei Polygon3D ………………………….. ………………………….. …………………… 28
Figura 16 – Diagrama clasei Vector2D ………………………….. ………………………….. …………………….. 29
Figura 17 – Diagrama clasei Texture ………………………….. ………………………….. ………………………… 29
Figur a 18 – Diagrama clasei Mat4x4 ………………………….. ………………………….. ………………………… 29
Figura 19 – Diagrama clasei FileReader3D ………………………….. ………………………….. ……………….. 30
Figura 20 – Diagrama clasei ModelViewer ………………………….. ………………………….. ……………….. 30
Figura 21 – Diagra ma clasei ControlPanel ………………………….. ………………………….. ………………… 31
Figura 22 – Diagrama clasei DataPanel ………………………….. ………………………….. …………………….. 32
Figura 23 – Diagrama clasei Scene ………………………….. ………………………….. ………………………….. . 33
Figura 24 – Diagrama clasei WorldPanel ………………………….. ………………………….. ………………….. 35
Figura 25 – Diagrama clasei Draw ………………………….. ………………………….. ………………………….. . 37
Figura 26 – Diagrama clasei Moments ………………………….. ………………………….. ……………………… 38
Figura 27 – Diagrama clasei Moment sByOrder ………………………….. ………………………….. …………. 39
Figura 28 – Diagrama clasei Main ………………………….. ………………………….. ………………………….. .. 39
Figura 29 – Reprezentarea digitală a amprentei orale luată înainte de operație ……………………….. 40
Figura 30 – Momentele statistice ale cavității orale după operație ………………………….. …………….. 41

45
9.3 Lista formulelor
( 1 ) ………………………….. ………………………….. ………………………….. ………………………….. …………….. 16
( 2 ) ………………………….. ………………………….. ………………………….. ………………………….. …………….. 16
( 3 ) ………………………….. ………………………….. ………………………….. ………………………….. …………….. 16
( 4 ) ………………………….. ………………………….. ………………………….. ………………………….. …………….. 16
( 5 ) ………………………….. ………………………….. ………………………….. ………………………….. …………….. 16
( 6 ) ………………………….. ………………………….. ………………………….. ………………………….. …………….. 17
( 7 ) ………………………….. ………………………….. ………………………….. ………………………….. …………….. 17
( 8 ) ………………………….. ………………………….. ………………………….. ………………………….. …………….. 17
( 9 ) ………………………….. ………………………….. ………………………….. ………………………….. …………….. 18
( 10 ) ………………………….. ………………………….. ………………………….. ………………………….. …………… 19
( 11 ) ………………………….. ………………………….. ………………………….. ………………………….. …………… 19
( 12 ) ………………………….. ………………………….. ………………………….. ………………………….. …………… 19
( 13 ) ………………………….. ………………………….. ………………………….. ………………………….. …………… 19
( 14 ) ………………………….. ………………………….. ………………………….. ………………………….. …………… 19
( 15 ) ………………………….. ………………………….. ………………………….. ………………………….. …………… 22
( 16 ) ………………………….. ………………………….. ………………………….. ………………………….. …………… 23
( 17 ) ………………………….. ………………………….. ………………………….. ………………………….. …………… 23
( 18 ) ………………………….. ………………………….. ………………………….. ………………………….. …………… 23
( 19 ) ………………………….. ………………………….. ………………………….. ………………………….. …………… 23
( 20 ) ………………………….. ………………………….. ………………………….. ………………………….. …………… 24
( 21 ) ………………………….. ………………………….. ………………………….. ………………………….. …………… 24
( 22 ) ………………………….. ………………………….. ………………………….. ………………………….. …………… 24
( 23 ) ………………………….. ………………………….. ………………………….. ………………………….. …………… 24
( 24 ) ………………………….. ………………………….. ………………………….. ………………………….. …………… 24
( 25 ) ………………………….. ………………………….. ………………………….. ………………………….. …………… 25
9.4 Codul sursă

Similar Posts