Mulţumiri



Yüklə 1,64 Mb.
səhifə59/118
tarix03.01.2022
ölçüsü1,64 Mb.
#34196
1   ...   55   56   57   58   59   60   61   62   ...   118
NimicSuprafaţăDiscretă.InitCapDeSculă( //Crează SD bazându-se pe o geom. de sculă

Curbă cCapDeSculă, //Curba care descrie geometria capului

Real rPas //Pasul de discretizare

)

{



Real rRazaCurentă, rRaza = cCapDeSculă.IaDeLaX();

Întreg nNr = rRaza / rPas + 0.5;

Iniţializează(nNr, nNr, (-rRaza, -rRaza, 0.0), (rRaza, rRaza, 0.0), “Scula”);

m.PuneLaAll(FALS); //pune în toată masca fals


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

PentruFiecare(Întreg nJ = 1; nJ <= nY; nJ++)

{

rRazaCurentă = Sqrt(IndexÎnRealPtX(nI)* IndexÎnRealPtX(nI) + IndexÎnRealPtY(nJ) *



IndexÎnRealPtY(nJ));

Dacă(rRazaCurentă < rRaza)

{

PuneLa(nI, nJ, cCapDeSculă.IaDeLaY(rRazaCurentă));



m.PuneLa(ADEVĂRAT);

} //Dacă

} //PentruFiecare

} //EndInitCapDeSculă

Această metodă asigură crearea şi generarea sculelor pentru frezare. Similar se pot crea SD care conţin electrozi, la analizarea prelucrării prin electroeroziune.

2.2.9.Calculul SD înfăşurătoare şi SD de racordare statice


Principalii beneficiari ai capetelor de sculă sunt algoritmii de racordare şi de calcul ai înfăşurătoarei.

Dorind a trata generic problema, se poate spune că algoritmul enunţat în continuare calculează SD înfăşurătoare, pentru orice geometrie a SD şi a sculei, deci se poate vorbi de racordări care nu sunt sferice, ci de orice altă formă. Algoritmul are abilitatea de a calcula înfăşurătoarea şi a face calculul total de interferenţă într-un singur pas.


NimicSuprafaţăDiscretă.InitÎnfăşurătoareStatic( //înfăşoară în spaţiu o SD sculă

SuprafaţăDiscretă sdSupafaţa, //suprafaţa care trebuie înfăşurată

SuprafaţăDiscretă sdSculă, //geometria capului utilizat

Boolean bDirecţiaSus = ADEVĂRAT //înfăşurătoarea în sus sau în jos

Boolean bTotul = ADEVĂRAT //toată suprafaţa sau în mască

)

{



Real rtemp, rZ;
PentruFiecare(Întreg nSDX = 1; nSDX <= nX; nSDX++)

PentruFiecare(Întreg nSDY = 1; nSDY <= nY; nSDY++)

{

Dacă(bDirecţiaSus)

rTemp = -1e100;

Altfel

rTemp = 1e100;



PentruFiecare(Întreg nSCX = 1; nSCX <= nX; nSCX++)

PentruFiecare(Întreg nSCY = 1; nSCY <= nY; nSCY++)

Dacă(bTotul SAU sdSuprafaţa.m[nSCX, nSCY]) ŞI

sdSculă.m[nSCX, nSCY] ŞI nSDX + nSCX < nX ŞI nSDY + nSCY < nY)

Dacă(bDirecţiaSus)

{

rZ=sdSuprafaţă[nSDX+nSCX, nSDY+nSCY]+sdSCulă[nSCX, nSCY]);



Dacă(rZ > rTemp)

rTemp = rZ;

} //Dacă

Altfel

{

rZ=sdSuprafaţă[nSDX+nSCX, nSDY+nSCY]-sdSCulă[nSCX, nSCY]);



Dacă(rZ < rTemp) rTemp = rZ;

} //Altfel



PuneLa(nSDX, nSDY, rTemp);

} //PentruFiecare

} //EndInitCapDeSculăStatic

Se poate observa uşor că algoritmul este de complexitate O(n4) (patru cicluri PentruFiecare), deci presupune calcule îndelungate. În prezent, autorul foloseşte o versiune mult îmbunătăţită (de peste 10 ori mai rapidă), dar complexitatea acestuia depăşeşte cadrul lucrării. Timpul necesar algoritmului prezentat este de domeniul zecilor de minute, pentru o reprezentare de 1000 x 1000 mm şi o sculă de 50 x 50 mm, iar cu cel optimizat, de numai 2 minute. Aceste tipuri de optimizări ar conduce la o implementare de peste 1000 de linii de cod, ceea ce ar reduce destul de mult simplitatea algoritmului prezentat.

Calculul suprafeţei de racordare se execută la fel, dar în direcţia opusă, folosind pentru acesta comutatorul bDirecţiaSus.

Calculul înfăşurătoarei utilizând o mască se poate face cu acelaşi algoritm, folosind comutatorul bTotul.

Calculul suprafeţei de racordare este simplu. De menţionat că suprafaţa de racordare cu o sculă statică (care nu-şi modifică diametrul) este utilizată în fabricaţie la simularea suprafeţei teoretice de contact (backoffset), care reprezintă suprafaţa teoretică absolută ce poate fi obţinută, folosind o sculă de orice formă şi luând în considerare calculul total de interferenţă. Făcând o diferenţă discretă între suprafaţa de racordare şi cea normală se va obţine suprafaţa cu materialul nefrezabil.
NimicSuprafaţăDiscretă.InitRacordareStatic( //înfăşoară în spaţiu o SD sculă

SuprafaţăDiscretă sdSupafaţa, //suprafaţa care trebuie înfăşurată

SuprafaţăDiscretă sdScalare, //geometria coeficienţilor de scalare

SuprafaţăDiscretă sdSculă, //geometria capului utilizat

Boolean bDirecţiaSus //înfăşurătoarea în sus sau în jos

Boolean bTotul //toată suprafaţa sau în mască

)

{



SuprafaţăDiscretă sdTemp;

sdTemp.InitÎnfăşurătoareStatic(sdSupafaţa, sdScalare, sdSculă, bDirecţiaSus, bTotul);



InitÎnfăşurătoareStatic(sdTemp, sdScalare, sdSculă, !bDirecţiaSus, bTotul);

} //EndInitRacordareStatic




Yüklə 1,64 Mb.

Dostları ilə paylaş:
1   ...   55   56   57   58   59   60   61   62   ...   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