CATEGORII DOCUMENTE |
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.
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.
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).
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.
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.
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 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.
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.
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
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.
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
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
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
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.
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
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 |
Vizualizari: 1180
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved