NimicSuprafaţăDiscretă.InitÎnfăşurătoareDinamic( //înfăşoară în spaţiu o SD sculă
SuprafaţăDiscretă sdSupafaţa, //suprafaţa care trebuie înfăşurată
SuprafaţăDiscretă sdScalare, //geometria coeficienţiilor 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ă
)
{
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;
rScala = sdScalare[nSDX, nSDY];
sdSculă.Scalează(rScală); //!! Aici scalarea se face cu recrearea SD !!
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ăDinamic
Această metodă este foarte simplă şi asigură o varietate de echidistanţări şi racordări, autorul considerând-o unică la ora actuală şi aproape imposibil de realizat folosind alte tehnici de stocare a suprafeţei. În fabricaţie, algoritmii de racordare şi echidistanţare cu calculul total de interferenţă sculă-semifabricat sunt, pe departe, cei mai complecşi. Cea mai importantă utilizare a lor este aceea de a converti SD în trasee de sculă, care se poate observa că devine foarte simplă după aplicarea acestei corecţii de echidistanţare.
Având suprafaţa echidistantă, problema racordărilor globale sau locale, dinamice, cu orice geometrie, devine un algoritm banal. Racodările în sus se execută echidistanţând prima oară în sus, apoi suprafaţa echidistantă se echidistanţează în jos, rezultând SD de pornire, care este racordată cu geometria dorită. Racordările în direcţie contrară se execută pornind echidistanţarea în jos, urmată de cea în sus.
Dostları ilə paylaş: |