Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Separarea listelor AutoLISP

autocad



+ Font mai mare | - Font mai mic



Separarea listelor AutoLISP

Avind instructiuni pentru construirea listelor - functiile list si quote - ne-ar fi de folos sa avem si citeva instructiuni pentru separarea listelor.

Daca am avea un set instructiuni pentru extragerea fiecarui element dintr-o lista, atunci am putea realiza mult mai usor programe AutoLISP.

Desenati un dreptunghi cunoscind numai coordonatele colturilor opuse.



Gasiti punctul de mijloc dintre oricare ar fi doua puncte ( nu numai punctele finale ) ale unei linii sau ale unui cerc.

Determinati daca un punct se afla intr-o anumita regiune 2-D sau 3-D a unui sistem de coordonate carteziane.

De vreme ce acest lucru necesita mai mult decit abilitatea de a separa liste, separarea listelor este o cerinta fundamentala in aceasta operatie.

Obiective

in acest capitol veti studia:

Cum sint reprezentate listele in memoria computerului sub forma unui arbore binar.

Cum sint listele reprezentate grafic.

Cum sa folositi functiile car si edr pentru separarea listelor.

Cum sa separati liste care reprezinta puncte in AutoCAD si cum sa specificati puncte prin crearea unor liste noi bazate pe punctele existente.

Structura interna a unei liste

O lista AutoLISP este reprezentata in memoria computerului sub forma unui arbore binar. Orice punct de pe arborele binar unde poate aparea o ramificatie se numeste nod. Nodul este una din unitatile fundamentale pentru stocarea memoriei in AutoLISP.

Primul nod de sus al unui arbore binar se numeste nodul radacina.

Structura unei liste AutoLISP este desfacuta nod cu nod, incepind de la nodul radacina. Fiecare nod se desface in doua ramificatii reprezentind diferite parti ale listei: primul element al listei si lista cu primul element indepartat.

Figura 20. Nodul radacina si primul set de ramificatii pentru o lista.

De exemplu prima ramificatie a listei (1.0 2.0 3.0) ar putea fi reprezentata astfel.

Figura 21. Nodul radacina si primul set de ramificatii pentru lista (1.0 2.0 3.0)

Subdivizarea de-a lungul ramificatiei arborelui continua pina ce partea dreapta a ramificatiei se termina cu lista goala sau nil.

Figura 22. Arbore binar complet pentru lista (1.0 2.0 3.0)

AutoLISP-ul are apelative speciale pentru cele doua parti ale ramificatiei listei. Primul element al listei se numeste car-ul listei. Lista fara primul ei element se numeste cdr-ul listei. Ramificatia stinga este partea car a listei iar ramificatia dreapta este partea cdr.

Figura 23. Partile car si cdr de la nodul radacina al listei.

Reprezentarea unei liste cu trei elemente atomice prin car si cdr, careia ii este atribuit simbolul x, ar arata dupa cum urmeaza. Daca o lista formata din unul sau mai multe elemente se afla la oricare din nodurile arborelui, este urmata de o ramificatie. Partea stinga a ramificatiei este car-ul listei la care se refera nodul iar partea dreapta este cdr-ul listei la care se refera nodul.

Figura 24. Reprezentarea completa a unei liste cu trei atomi ca elemente cu car si cdr.

Sa combinam graficul care reprezinta arborele binar pentru valorile simbolului pt, care este legat de lista (1.0 2.0 3.0) cu ramificatiile car si cdr ale arborelui.

Figura 25. Grafic combinat pentru simbolul pt, legat de lista (1.0 2.0 3.0).

Recapitulare

Listele sint reprezentate in memorie sub forma unui arbore binar.

Primul element al listei este car-ul listei.

Lista dupa ce primul element este indepartat reprezinta cdr-ul listei.

Functiile car si cdr formeaza ramificatiile car si cdr ale listei.

O ramificatie cdr a unui arbore binar se termina in nil sau lista goala.

exercitiul 7: graful valorilor intr-un arbore binar

in acest exercitiu veti:

Consolida cunostintele despre reprezentarea listelor in memorie.

Completa un grafic a valorilor unei liste, reprezentat sub forma unui arbore binar.

Instructiuni

Terminati graful complet al unui arbore binar pentru variabila alst.

alst este legata de lista (8.0 3.0 0.0).

Aratati valoarea fiecarui nod din grafic.

Figura 26. Completarea grafului binar

exercitiul 8: graful expresiilor intr-un arbore binar

in acest exercitiu veti:

Consolida cunostintele despre separarea listelor si restabilirea elementelor lor individuale.

Completa un grafic al expresiilor care restabilesc elementele unei liste, grafic reprezentat sub forma unui arbore binar.

Instructiuni

Terminati graficul complet al unui arbore binar pentru variabila xlst.

xlst este legata de lista (1.0 (2.0 3.0) 4.0).

Aratati valoarea fiecarui nod din grafic

Aratati expresia care restabileste fiecare valoare din grafic.

Marcati ramificatiile car si cdr ale unui arbore.

Observati ca elementele acestei liste sint formate din doi atomi si o lista.

Figura 27. Completarea graficul binar

Functiile car si cdr

Functiile car si cdr sint functii non-destructive. Nici una dintre ele nu afecteaza legarea argumentului ei ceea ce este un mod curios de a spune despre (car x) ca poate returna o valoare diferita de x dar nu va schimba valoarea lui x.

car

Functia car returneaza primul element al listei. Singurul argument al functiei car trebuie sa fie o lista, iar lista trebuie sa aiba unul sau mai multe elemente.

Exemplu

Introduceti expresia care urmeaza. Legati variabila pt la o lista cu trei numere reale. Folositi functia car pentru a returna coordonata x in lista (primul element) si legati variabila x de acea valoare.

Command: (setq pt (list 1.0 2.0 0.0))

Command: !pt

Command: (car pt)

Command: (setq x (car pt))

Command: !x

Command: !pt

cdr

Functia cdr returneaza o lista si elementele ei cu exceptia primului element; cu alte cuvinte indeparteaza primul element al listei in afara valorii lui returnate.

Exemplu

Introduceti expresiile care urmeaza.

Legati variabila pt de o lista cu trei numere reale.

Command: (setq pt (list 1.0 2.0 0.0))

Command: !pt

Folositi functia cdr pentru a returna o lista fara primul element si legati variabila yzlst de acea valoare.

Command: (cdr pt)

Command: (setq yzlst (cdr pt))

Command: !lyzlst

Command: !pt

Construirea unui dreptunghi cunoscind colturile opuse

in figurile care urmeaza cunoastem doua puncte din colturile unui dreptunghi. Celelalte doua puncte se calculeaza prin combinarea cordonatelor X si Y ale punctelor cunoscute in diverse moduri pentru a forma noi perechi de coordonate.

Figura 28. Valorile X si Y pentru colturile unui dreptunghi.

Aceasta pagina este lasata libera in mod intentionat
Figura care urmeaza reprezinta coordonatele punctelor in functie de variabilele X si Y.

Figura 29. Valorile X,Y pentru colturile dreptunghiului

Considerati ca doua variabile sint legate de cele doua liste formate din numere reale.

(setq pt1 (list 1.0 5.0 0.0))

(setq pt2 (list 10.0 1.0 0.0))

Acest tabel arata functiile necesare pentru returnarea valorilor X, Y si Z din fiecare punct.

coordinate

pt1

pt2

X

(car pt1)

(car pt2)

Y

(car (cdr pt1))

(car (cdr pt2))

Z

(car (cdr (cdr pt1)))

(car (cdr (cdr pt2)))

Tabelul 16. Expresiile folosite pentru returnarea coordonatelor X, Y si Z.

Figura urmatoare exprima punctele de coordonate sub forma de expresii AutopLISP, bazate pe cunoasterea a doua puncte pt1 si pt2. Pentru a simplifica lucrurile, acestea sint tratate ca puncte 2-dimensionale.

Figura 30. Calcularea colturilor unui dreptunghi

Exemplu

Introduceti expresiile care urmeaza.

Folositi functia list pentru a le combina in alte doua puncte ale dreptunghiului.

Command: (setq pt1 (list 1.0 5.0))

Command: !pt1

Command: (setq pt3 (list 10.0 1.0))

Command: !pt3

Folositi functiile car si cdr pentru a extrage valorile X si Y ale punctelor cunoscute.

Command: (car pt1)

Command: (car (cdr pt3))

Command: (list (car pt1) (car (cdr pt3)))

Command: (setq pt2 (list (car pt1) (car (cdr pt3))))

Command: !pt2

Command: (car pt3)

Command: (car (cdr pt1))

Command: (list (car pt3) (car (cdr pt1)))

Command: (setq pt4 (list (car pt3) (car (cdr pt1))))

Command: !pt4

Desenati dreptunghiul folosind linia de comanda AutoCAD.

Punctele sint 2-dimensionale. Linia de comanda AutoCAD va completa automat valoarea Z a punctului bazata pe valoarea curenta a inaltimii (elevation).

Command: line

From point: !pt1

To point: !pt2

To point: !pt3

To point: !pt4

To point: close

Figura 31. Localizarea colturilor unui dreptunghi

Recapitulare

Functia car returneaza primul element al unei listei.

Functia cdr returneaza o lista cu exceptia primului element.

Exista functii standard la care se face apel pentru stabilirea componentelor X, Y si Z ale unui punct reprezentat printr-o lista.

exercitiul 9: lucrul cu liste de puncte

in acest exercitiu veti:

Consolida cunostintele despre functii care separa liste si functii care creaza liste.

Crea puncte formate din liste si le veti lega de variabile.

Crea puncte formate din liste bazate pe valorile X si Y din alte puncte formate din liste.

Matematica problemei

Doua puncte 2-dimensionale si punctul care se afla la mijlocul distantei dintre ele pot fi exprimate logic in functie de X si Y dupa cum urmeaza.

pt1 = pt1x, pt1y

pt2 = pt2x, pt2y

midpt = mptx, mpty

Valorile X si Y ale lui mpt pot fi exprimate aritmetic dupa cum urmeaza.

mptx = (pt1x + pt2x)/2

mpty = (pt1y + pt2y)/2

Instructiuni

Scrieti un set de expresii AutoLISP care executa urmatoarele comenzi in ordine

Legati o variabila pt1 de lista formata din doua numere reale 1.5 si 8.9.

Legati o variabila pt2 de o lista formata din doua numere reale 7.8 si 3.2.

Scrieti un set de expresii care leaga variabila midpt de punctul care se afla la mijlocul distantei dintre punctele pt1 si pt2.

Dupa ce ati verificat expresiile in editorul AutoCAD scrieti-le mai jos.



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1109
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved