NimicSuprafaţăDiscretă.InitPlasă( //converteşte o plasă
CPlasa lIn //lista cu plasele de intrare
)
{
PentruFiecare(Întreg nI = 1; nI <= nX; nI++)
PentruFiecare(Întreg nJ = 1; nJ <= nY; nJ++)
if (lIn.AreOProiecţie(IndexÎnRealPtX(nI), IndexÎnRealPtY(nJ))
PuneLa(nI, nJ, lIn.IaDeLaZ(IndexÎnRealPtX(nI), IndexÎnRealPtY(nJ)), PM_MAX);
} //InitPlasă
NimicSuprafaţăDiscretă.InitPlase( //converteşte o familie de plase
FamiliaDePlase flIn //lista cu familia de plasele de intrare
)
{
PentruFiecare(Întreg nI = 1; nI <= flIn.nNr; nI++)
InitPlasă(flIn[nI]);
} //InitPlase
Nu s-au discutat listele cu date de tip triunghi, deoarece acestea se pot trata într-un mod similar.
Metodele de conversie discutate asigură un set decent de conversii, dar nu şi eficient, în cazul în care pentru suprafeţele care trebuiesc convertite solidul nu poate sau încă nu sunt generate metode de conversie eficiente în format triunghiular sau patrulater, ci doar foarte lente metode de proiecţie iterative. Aceste condiţii duc la timpi de conversie care sunt de domeniul orelor, în locul celor prezentate, care sunt de domeniul secundelor.
Deci, din punct de vedere al eficenţei se consideră ca fiind inacceptabil. Pentru acest tip de date a fost imaginat un algoritm inspirat din reţelele neuronale, care privesc SD ca pe o reţea care se doreşte a fi antrenată cu datele provenite dintr-o reprezentare de curbe B-Spline (spre exemplu) limitată de curbe (trimmed B-Spline). Acest algoritm este larg utilizat de autor în conversia din toate formatele de nivel superior, fiind prezentat în continuare, în premieră.
A
Figura 4.20 Exemplificarea metodei de antrenare a reţelei neuronale asociată suprafeţei discrete, reprezentarea curbelor echiparametrice U, V, a punctelor de intersecţie
lgoritmul, utilizează analiza punctelor care sunt în vecinătatea unui punct.
Algoritmul este într-un fel asemănător cu cel al interpolării prin puncte. Diferenţa de bază este că algoritmul de interpolare prin set de puncte operează foarte bine când sunt relativ puţine puncte, timpii de rulare crescând linear cu numărul de puncte. Algoritmul prezentat în prezent este utilizat pentru antrenarea unui punct din 2..10 puncte de intrare.
Acest algoritm este destul de precis, asigurând pentru o medie de trei puncte de antrenare pe punct al SD o precizie medie de 0,001 mm, ceea ce se consideră satisfăcător.
Importanţa acestui algoritm este imensă d.p.d.v. al consumului de timp, deoarece, în realitate, calcularea unui punct echiparametric (U, V) de pe suprafaţă este, în general, de peste 100 de ori mai rapidă decât calcularea iterativă a unui punct la o coordonată (X, Y), deci pentru un set decent de antrenare (de 3 puncte pe punct al SD) se asigură timpi de peste 30 de ori mai mici. În realitate, după ce s-a cronometrat pe un set de 10 repere de complexităţi diferite, se poate spune că s-au obţinut timpi mai mici de 20..100 ori.
Algoritmul asigură o rezolvare destul de simplă şi elegantă a problemei. Metoda constă din:
-
pentru fiecare punct P(U,V) se calculează cei patru vecini discreţi;
-
se calculează distanţa pătratică, cu relaţia D2 = DX2 + DY2 ;
-
aceasta este utilizată pentru a antrena cei patru vecini ai unui punct P(u, v) după legea 1/D2 (variaţia acestei funcţii se găseşte în figura 4.8 b);
-
la sfârşitul algoritmului, pentru a întoarce valoarea reală, se divide cu suma ponderilor.
Matematic:
(P(U, V) / D2) /D2
Dostları ilə paylaş: |