Mulţumiri


NimicCurbă.Roteşte(Întreg



Yüklə 1,64 Mb.
səhifə102/118
tarix03.01.2022
ölçüsü1,64 Mb.
#34196
1   ...   98   99   100   101   102   103   104   105   ...   118
NimicCurbă.Roteşte(Întreg nDeCâteOri) //roteşte o curbă cu nDeCâteOri paşi

{

PentruFiecare(Întreg nI = 1; nI < nNr; nI++)

{

PuneLa(nNr, [1]);

Şterge(1);

} //PentruFiecare

} //Roteşte



Real Curbă.AriaCuSemn() //returnează aria cu semn pentru a detecta direcţia

{

Real rAria = 0.0;



Punct pStart = [1], pEnd;

PentruFiecare(Întreg nI = 2; nI < nNr; nI++)

{

pEnd = [nI];



rAria = rAria + (pEnd.rX – pStart.rX) * (pEnd.rY + pStart.rY);

} //PentruFiecare

return(rAria / 2.0);

} //AriaCuSemn



NimicCurbă.FăTrigonometric() //transformă o curbă în sens trigonometric

{

Dacă(AriaCuSemn > 0.0)

SchimbăSensul();

} //FăTrigonometric



NimicCurbă.FăOrar() //transformă o curbă în sens orar

{

Dacă(AriaCuSemn < 0.0)

SchimbăSensul();

} //FăOrar



NimicFamiliaDeCurbe.FăTrigonometric() //transformă curbele în sens trigonometric

{

Curbă c;



PentruFiecare(Întreg nI = 1; nI < nNr; nI++)

{

c = [nI];



c.FăTrigonometric();

} //PentruFiecare

} //FăTrigonometric

NimicFamiliaDeCurbe.FăOrar() //transformă curbele în sens orar

{

Curbă c;



PentruFiecare(Întreg nI = 1; nI < nNr; nI++)

{

c = [nI];



c.FăOrar();

} //PentruFiecare

} //FăOrar

NimicFamiliaDeCurbe.Roteşte() //roteşte curbele până au punctul de start minim

{

Curbă cStart, cEnd;



cStart = [1];
PentruFiecare(Întreg nI = 2; nI < nNr; nI++)

{

cEnd = [nI];



pStart = cStart[1];

Întreg nRoteşte = 0;

Real rDist = 1e100;

PentruFiecare(Întreg nCurbă = 1; nCurbă < cEnd.nNr; nCurbă++)

{

pEnd = cEnd[nCurbă];



if (DistXYZ(pStart, pEnd) < rDist)

{

rDist = DistXYZ(pStart, pEnd);



nRoteşte = nCurbă;

} //Dacă

} //PentruFiecare

Roteşte(nRoteşte);

cStart = cEnd;

} //PentruFiecare

} //Roteşte

NimicFamiliaDeCurbe.Spirală(Întreg nPuncte = 100) //transformă curbele în spirale

{

Curbă cStart, cEnd;



cStart = [1];
PentruFiecare(Întreg nI = 2; nI < nNr; nI++)

{

cEnd = [nI];



PentruFiecare(Întreg nT = 2; nT < nPuncte; nT++)

{

pStart = cStart.IaDeLaT(nT/nPuncte);



pEnd = cEnd.IaDeLaT(nT/nPuncte);

Add(pStart + (pEnd - pStart) * nT / nPuncte);

} //PentruFiecare

cStart = cEnd;

} //PentruFiecare

} //Spirală



//transformă SDC în spirale

NimicSuprafaţăDiscretă.SpiraleleLuiBillator(FamiliaDeCurbe fcOut, Real rStep = 1.0)

{

SuprafaţăDiscretă sdTemp;

sdTemp.TransfEchirugozitate(sdAceasta, 255);

sdTemp.Înmoaie(5); //face media celor patru vecini de 5 ori creşte continuitatea !

sdtemp.CreazăToateCurbele(fcOut, rStep);

fcOut.FăOrar();

fcOut.Roteşte();

fcOut.Spirală();



ProiecteazăToateCurbele(fcOut); //citeşte cota Z !

} //SpiraleleLuiBillator


Aşa arată, în pseudocod, o versiune simpificată a calculului “Spiralelor lui Billator” (SLB), care suportă doar un singur maxim local pe SDER. De menţionat că, rezolvarea cazurilor cu multiple maxime locale este o problemă destul de complicată, care necesită liste de incluziune locală şi tehnici de “scanline“. Implemetarea algoritmului care rezolvă toate cazurile necesită mai mult de 40 pagini de pseudocod.

Câteva repere transformate în SLB şi frezate se pot observa în figurile următoare.




Figura 6.54 Un reper analizat în vederea frezării cu curbe echirugozitate.

  • curbele echirugozitate proiectate pe suprafaţa discretă corecţie de sculă (SDCS);

  • curbele transformate într-o spirală continuă şi proiectate pe SDCS (Spirala lui Billator);

  • simularea fişierului NC rezultant, cu varierea culorii din 5 în 5 spire.







Figura 6.55 Un reper analizat în vederea frezării cu curbe echirugozitate.

  • curbele echirugozitate proiectate pe suprafaţa discretă corecţie de sculă (SDCS);

  • curbele transformate într-o spirală continuă şi proiectate pe SDCS (Spirala lui Billator);

  • simularea fişierului NC rezultant, cu varierea culorii din 5 în 5 spire.







Figura 6.56 Un reper analizat în vederea frezării cu curbe echirugozitate.

  • curbele echirugozitate proiectate pe suprafaţa discretă corecţie de sculă (SDCS);

  • curbele transformate într-o spirală continuă şi proiectate pe SDCS (Spirala lui Billator);

  • simularea fişierului NC rezultant, cu varierea culorii din 5 în 5 spire.


F



Figura 6.57 Un reper analizat în vederea frezării cu curbe echirugozitate.

  • curbele echirugozitate proiectate pe suprafaţa discretă corecţie de sculă (SDCS);

  • curbele transformate într-o spirală continuă şi proiectate pe SDCS (Spirala lui Billator);

  • simularea fişierului NC rezultant, cu varierea culorii din 5 în 5 spire.




iecare reper a fost prezentat în trei ipostaze: momentul în care a fost convertit în curbe echirugozitate ordonate şi cu acelaşi sens (a), momentul în care a fost convertit în SLB (b), şi calitatea şi distribuţia rugozităţii, după ce a fost simulată o frezare cu fişierul NC generat din SLB (c).

Yüklə 1,64 Mb.

Dostları ilə paylaş:
1   ...   98   99   100   101   102   103   104   105   ...   118




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©muhaz.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin