You are on page 1of 25

Phn 2.

AUTOLISP

Chng 1. CN BN V AUTOLISP
LISP l mt ngn ng lp trnh bc cao thng c dng cho vic nghin cu tr tu
nhn to. LISP vit tt ca List Processing c Jonh McCarthy v cc ng nghip
ti vin k thut Massachusets bin son t nhng nm u ca thp nin 1960. LISP l
ngn ng khai bo, lp trnh vin ch cn son cc danh sch biu th cc mi quan h gia
cc gi tr k hiu. Cc bn danh sch l cu trc d liu c bn ca LISP v chng trnh
s tin hnh cc php tnh bng cc gi tr c din t trong cc danh sch .
Mt s phin bn ca LISP c tiu chun ho, cu hnh y v c tiu chun
ho v c chp nhn rng ri hin nay l COMMON LISP.
AutoLISP tp con ca ngn ng LISP, l ngn ng lp trnh bc cao thch hp vi cc
ng dng ho. AutoLISP l ngn ng thng dch, c vit theo cc c php v th tc
cht ch nh ngn ng LISP. Tuy nhin n c b sung thm cc hm ph hp vi phn
mm AutCAD.
1.1. Xy dng biu thc AutoLISP.
Khi bn nhp dng text ti dng lnh, AutoCAD dch dng text bng cch so snh cc
k t vi danh sch cc tn lnh. Nu dng text tng ng vi cc lnh ca AutoCAD th
chng s nh gi v thi hnh cc lnh nh mong mun. Khi AutoCAD nhn cc AutoLISP
code th chng chuyn cc code ny n b bin dch AutoLISP.
Cu trc d liu c bn ca AutoLISP l danh sch (List). Danh sch l tp hp cc
phn t cha trong cp du ngoc n (). Cc phn t tron danh sch phn cch nhau bi cc
khong trng.
C hai loi danh sch: biu thc (expression) v danh sch d liu (data list). Biu
thc l thnh phn c bn trong tt c cc chng trnh AutoLISP. Phn t u tin ca biu
thc l mt hm (function). Hm ny s c AutoLISP nh gi tr v tr v kt qu. Cc
phn t tip theo l cc tham l s l cc gi tr cung cp cho hm. Gi tr tr v l kt qu
tnh ton ca hm.
S khc nhau c bn gia mt biu thc AutoLISP vi mt biu thc ton hc l cc
phn t AutoLISP c th t khc vi ng thc v chng phi c cha trong cp du
ngoc n.

BS: Nguyn Quang Trung 1


NG THC TON HC BIU THC AUTOLISP
Hm Hm

1+2=3 Command: (+ 1 2)
3
Tham s Kt qu
Gi tr tr v tham s

1.2. Cch nhp biu thc AutoLISP


Ta c th nhp v nh gi tr biu thc AutoLISP ging nh nhp cc lnh AutoCAD
(nh t biu thc trong du ngoc n) bng cc phng php: nhp trc tip t dng
lnh ca AutoCAD, gi t menu, hoc ti t file chng trnh AutoLISP. Sau biu
thc c nh gi tr v tr v kt qu.

Hinh1.1. Ca s AutoCAD Text Window.


Khi nhp biu thc ti dng lnh, ta nn dng ca s AutoCAD Text Window (nhn phm
F2) nh ta thy c gi tr tr v hoc cc thng bo li nu c.
Khi biu thc c a vo t dng nhc lnh, kt quatrar v ngay ti ca s dng nhc lnh. Nu ta
kt thc biu thc bng nhn phm , kt qu tr v dng nhc tip theo. Nu ta kt thc biu thc
bng phm SPACEBAR, kt qu tr v trn cng mt dng.

V d:

Command: (* 10 10) 100 (kt thc biu thc bng phm SPACEBAR)
Command: (- 30 10) (kt thc biu thc bng nhn phm )
20

Nu biu thc khng b li kt qu tr v ti dng nhc lnh. Nu biu thc b li thng bo li


tng ng s xut hin km vi biu thc b li.

BS: Nguyn Quang Trung 2


Cc li thng gp:

Command: (+ 1 2 3 4) Khng b li, kt qu tr v l 10


10
Command: (+6 8) Biu thc ny cn mt khong trng ngn
; error: bad function: +6 cch tn hm + vi tham s 6
Command: (+ 8 .45) Tham s .45b sai, cn phi ghi y l
; error: misplaced dot on input 0.45
Command: (+ 6 8 Biu thc cha c ng li bng du
(_> ) ngoc n. Dng k tip my bo thiu du
14 v cn ng li.
Command: (+ 6 8 Thay v ng du ngoc n ta thot khi
(_> *Cancel* hm.
; error: Function cancelled

1.3. Cc hm s hc.
a) Hm cng (+).
Hm cng nhn vo nhiu tham s v tr v tng ca cc tham s ny.

(+ [number number] ...)

Examples

(+ 1 2) returns 3
(+ 1 2 3 4.5) returns 10.5
(+ 1 2 3 4.0) returns 10.0

b) Hm tr (-):

( [number number] ...)

Thc hin php tr number th nht cho cc number cn li.

Examples

(- 50 40) returns 10
(- 50 40.0) returns 10.0
(- 50 40.0 2.5) returns 7.5
(- 8) returns -8
c) Hm nhn (*):

(* [number number] ...)

Nhn cc number li vi nhau.

Examples

BS: Nguyn Quang Trung 3


(* 2 3) returns 6
(* 2 3.0) returns 6.0
(* 2 3 4.0) returns 24.0
(* 3 -4.5) returns -13.5
(* 3) returns 3
d) Hm chia (/):

(/ [number number] ...)

Thc hin php chia s th nht cho cc s cn li.

Examples

(/ 100 2) returns 50 (khi cc s u nguyn thi kt qu l phn nguyn ca php


chia)
(/ 100 2.0) returns 50.0
(/ 100 20.0 2) returns 2.5
(/ 100 20 2) returns 2
(/ 4) returns 4

1.4. Cc bin v k hiu trong AutoLISP.


Cc gi tr tnh khng i nh tn hm ca AutoLISP (+, -, *, /, ) v cc tn hm t to,
hoc cc hng s (nh Pi) gi chung l cc k hiu (symbol). Cc d liu thay i trong
chng trnh gi l bin (variable). D liu trong cc bin thay i tu theo cc tham s
cung cp cho chng trnh. Trong hu ht cc trng hp, k hiu v bin c to ra v
qun l tng t nhau. Tn gi ph thuc vo gi tr ca chng l tnh hay ng.
Tn bin v v k hiu (cng nh tn hm) khng phn bit ch hoa ch thng.
1.4.1. Gn gi tr cho cc bin.
Dng hm Setq gn gi tr cho cc bin, hm s tr kt qu bng gi tr gn. Hm setq c
th gn mi kiu d liu cho bt k bin no: s nguyn, s thc, chui, danh sch, hoc cc
kiu khc.
C php hm Setq:

(setq sym expr [sym expr]...)


Hm setq c th gn mt lc nhiu gi tr cho nhiu bin.
V d:

Command: (setq a 5.0)

5.0

Command: (setq b 123 c 4.7)

4.7 (gn gi tr cho nhiu bin, kt qu tr v l gi tr bin cui cng)

Command: (setq x '(a b)) (gn gi tr bin x bng danh sch (A B)

BS: Nguyn Quang Trung 4


(A B)

Chng 2. FILE CHNG TRNH AutoLISP

2.1. File chng trnh AutoLISP

Khi cn nh gi mt biu thc AutoLISP n gin, ta nhp trc tip ti dng nhc
lnh AutoCAD. Khi cn thc hin lin tip nhiu biu thc phc tp, ta c th lu chng vo
mt file vn bn ASCII, v sau gi file ny thc hin. File ny gi l file chng trnh
AutoLISP.

Cc u im khi s dng file chng trnh AutoLISP:

- Ta ch cn mt ln to ra cc biu thc AutoLISP v sau c th s dng chng


c nhiu ln.

- Khi gi thc hin file chng trnh, ta c th an tm l n c kim tra li cn


thn.

- AutoCAD tnh ton cc biu thc trong file chng trnh nhanh hn khi chng c
nhp t dng nhc lnh.

2.1.1. Tn file AutoLISP

Tn file AutoLISP ph thuc vo h iu hnh. Khi dng Windows 95, 98, 2000, NT
v cc phin bn mi hn ta c th t tn file di n 256 k t. Phn m rng mc nh
ca file l .LSP.

2.1.2. To file chng trnh.

File chng trnh AutoLISP ch cha cc k t m ASCII chun. Ta c th dng cc


phn mm son tho vn bn nh: Notepad, Microsoft Word to file v lu chng
dng simple text .

BS: Nguyn Quang Trung 5


Hnh 2.1. Son tho chng trnh AutoLISP trong Notepad.

Nhng cng c tt nht cho vic son chng trng AutoLISP l dng phn mm
Visual LISP. c gi bng lnh Vlisp hoc chn t Tools menu -> AutoLISP->Visual
LISPEditor s xut hin mn hnh son tho chng trnh AutoLISP nh hnh di y.

Hnh 2.2. Son tho chng trnh AutoLISP bng phn mmVisual LISP.

BS: Nguyn Quang Trung 6


Ch :

- Mt biu thc c th vit trn nhiu dng.

- Ta c th dng cc khong trng chng trnh d c.

- Trong phn ln cc trng hp, cc biu thc khng phn bit dng ch hoa ch
thng.

2.1.3. Cc du ngoc n.

Mi biu thc AutoLISP phi c t trong cp du nhoc n.

V d:

(setq ds nil)

(defun dtor(do)

(* (/ do 180.0)pi)

Khi cc biu thc lng nhau , cc cp du ngoc m v ng phi t ng v tr. C


mt phng php nhanh kim tra cc du ngoc l m du ngoc t tri sang phi. Bt
u t 0, khi gp du ngoc m th cng thm 1, khi gp du ngoc ng th tr i 1. Nu
kt qu khc khng th biu thc ta vit b li. Tuy nhin phng php ny ch gip ta
pht hin vic tha thiu du ngoc ch khng pht hin c cc du ngoc t sai v tr.

(+ 160 (- (* 14 (+ 29 (- 13 3 ))) 149) (+ (- 44 A) 1))

1 2 3 4 5 4 3 2 1 2 3 2 1 0

2.1.4. Du nhy chui.

Cc d liu kiu chui phi t trong cp du nhy chui. Nu chui d liu khng t
trong du nhy chui, AutoLISP xem l tn hm v tt nhin l b li.

2.1.5. Cc dng ch thch.

BS: Nguyn Quang Trung 7


Trong chng trnh chng ta nn cung cp cc dng ch thch chng trnh d hiu,
d theo di v d sa li.

Tt c cc k t ng bn phi du chm phy (;) cho n ht mt dng u c xem


l ch thch. Cc ch thch c th bt u v tr u dng hoc ng pha sau biu thc.

V d:

; chng trnh to th tc chuyn s o ca gc t sang radian

(defun dtor(do)

(* (/ do 180.0)pi) ; radian = (do/180)*pi

); kt thc th tc

Cc ch thch c th ng gia biu thc, bt u bng k hiu ;| v kt thc bng k


hiu |;. iu ny khin chng ta c th to ch thch trn nhiu dng lin tip m khng phi
dng du chm phy trc mi dng, m ch cn t on ch thch trong cp du ;| v |;.

2.1.6. Gi thc thi chng trnh AutoLISP bng lnh Appload

Ta dng hm Appload (g lnh t dng lnh ca AutoCAD) hoc vo Tools chn


Load Aplication ti mt file chng trnh AutoLISP vo AutoCAD thc thi. Khi
xut hin hp thoi v ta phi chn file sau chn Load ri Close v chng trnh s
c thc hin.

BS: Nguyn Quang Trung 8


Hnh 2.3. Hp thoi chn file bi lnh Load.

Hoc ang trong chng trnh Visual Lisp th ta kch vo (c v tr nh hnh 2.4)
trn thanh cng c tin hnh load file hin hnh vo AutoCAD thc hin.

LOAD

Hnh 2.4. Giao din chng trnh Visual Lisp v nt lnh LOAD

2.2. Cc hm t to.

AutoLISP cho php chng ta to ra hm mi, nh ta c th kt hp nhiu hm


AutoLISP thnh mt hm duy nht. cc hm t to c th thc hin chc nng nh yu cu
ngi s dng nhp cc gi tr cho cc tham s, in thng tin ra mn hnh, to hoc hiu
chnh cc i tng AutoCAD , to cc lnh AutoCAD mi.

BS: Nguyn Quang Trung 9


2.2.1. To hm mi bng hm Defun.

+ C php:

(defun ten-ham (x1 x2 / y1 y2 )

(bt1)

(bt2)

- Defun: hm to hm mi ca AutoLISP;

- ten-ham: do ngi to t t khng trng vi tn hm c trong AutoLISP;

- x1, x2,: cc bin cn thit khi gi hm;

- y1, y2, :cc bin cc b ca hm, phn bit vi bin dng khi gi hm bng k t
chia (/)

- bt1, bt2, : cc biu thc hoc lnh thc thi ca hm.

Gi tr tr v ca hm l gi ca biu thc cui cng.

V d: to hm chuyn i n v o ca gc t sang radian nh sau:

(defun dtor(do)

(* (/ do 180.0)pi)

Trong v d ny hm dtor gm 1 bin do v kt qu tr v l gi tr ng vi n v


radian.

2.2.2. To cc lnh AutoCAD mi.

Bng cch thm C: vo trc tn hm t to th khi thc thi chng trnh AutoLISP s to ra
lnh mi cho AutoCAD c tn trng tn hm. C php nh sau:

BS: Nguyn Quang Trung 10


(defun C:ten-ham ( / y1 y2 )

(bt1)

(bt2)

Nh vy hm ch cha bin cc b v c th khng cn cc bin cc b ny.

V d:

(defun c:hv(/ p a)

(setq p(getpoint "\n nhap diem goc trai phia duoi cua hinh vuong:"))

(setq a(getreal "\n nhap chieu dai canh hinh vuong:"))

(command "rectangle" p (polar (polar p 0 a) (/ pi 2.0) a))

3. CC KIU D LIU V NHP D LIU

3.1. D liu s nguyn (Integer):

Intiger (INT) l kiu s nguyn khng cha du thp phn, gm 32-bit c gi tr t


+2,147,483,647n 2,147,483,648. Khi dng hm Getint nhp mt s nguyn th hm
ny ch chp nhn 16-bit c gi tr t +32767 n -32678 (s bo li v ch nhp li). Khi
dng mt s integer trong biu thc ca Autolisp gi tr ny c bit nh l mt hng s
(Const). cc s nh 2, -56 v 1,200,196 l cc bin s nguyn ca Autolisp.
Nu nhp vo mt s m gi tr ln hn gi tr max ca kiu integer th Autolisp t
ng chuyn thnh kiu s thc (Real). Nu mt php tnh c thc hin t hai bin kiu
Integer nhng kt qu nm ngoi gii hn ca kiu Integer th s cho kt qu sai.
Cc trng hp c th nh sau:
Gi tr ca s nguyn dng ln nht c chp nhn:2147483647
Nu bn nhp vo mt s nguyn m c gi tr ln hn 2147483647 th AutoLISP t ng
chuyn thnh s thc: 2147483648 chuyn thnh 2.14748e+009

BS: Nguyn Quang Trung 11


kt qu ca php cng ln hn 2147483647 cho kt qu sai l mt s nguyn m:
_$ (+ 2147483646 3)-> -2147483647 (gi tr sai)

T ng chuyn 2147483648 thnh s thc trc khi cng thm 2:


_$ (+ 2147483648 2)
2.14748e+009
Gi tr ca s nguyn m nh nht c chp nhn: -2147483647 v cc li tng t nh
trn.
_$ -2147483648
-2.14748e+009 (tr v s thc)

_$ (- -2147483648 1)
-2.14748e+009 (kt qu sai)
Thng thng s nguyn c dng lm gi tr cho bin m. Nu khng cn thit th nn
khai bo dng s thc tranh nhng sai st.

3.2. D liu s thc (Real)

S thc l mt kiu s c cha du thp phn. Nhng s t -1 n 1 phi c ch s 0 ng


u. S thc gm phn thc v phn thp phn cch nhau bi du chm(.), phn thp phn t
nht l 14 ch s. Ch l Autolisp khng hin tt c cc con s thp phn.
Kiu s thc c th th hin di dng kiu du phy ng. (for example, 0.0000041 is the
same as 4.1e-6). Cc s nh 3.1; 0.23; 56.123; 21,000,000.0 l cc s thc.
3.3. D liu kiu chui (String)

Kiu chui (String) l tp hp cc k t v c t trong du ngoc kp. String l kiu d


liu to ra giao din gia ngi v my.
Khi s dng kiu d liu ta phi s dng k t kt hp vi cc k t khc

\\ \ character (k t \ xut hin ti dng string)

\" " character (k t " xut hin ti dng string)

BS: Nguyn Quang Trung 12


\e Escape character (to du cch ti v tr k t)

\n Newline character (xung dng mi)

\r Return character

\t Tab character (to k t Tab ti v tr chn k t)

V d:
Khi khng dng k t \ :
(setq a(getreal "cho biet he so a="))
(setq b(getreal "cho biet he so b="))
Kt qu tr v:
Command: cho biet he so a=10 (ghi tip vo m khng xung
dng)
cho biet he so b=10 (xung dng l v nhn Enter khi nhp 10 cho bin
a)
Khi dng k t \ :
(setq a(getreal "\n cho biet he so a="))
(setq b(getreal "\n cho biet he so b="))
Kt qu tr v:
Command:
cho biet he so a=10
cho biet he so b=20
3.4. D liu kiu file

Kiu d liu file l mt con tr dng m mt file bng hm open trong AutoLISP.
Hm open tr v cho con tr gi tr k t v s ca file c m. Khi phi cung cp
bin nh cc hm khc ca AutoLISP thc hin c v ghi file c m.

V d ta dng chng trnh sau c file bac-hai.txt trong a C:

BS: Nguyn Quang Trung 13


(setq f(open "c:\\bac-hai.txt" "r"))

(while (/= (setq s(read-line f))nil)

(if (/= s 32) (setq t1 s))

(princ t1)

(close f)

Nh vy ta c th s dng d liu t file, v sau khi thot phi ng file lai bng hm
(close)

4. DANH SCH V X L DANH SCH

4.1. Danh sch

Danh sch (LIST ) l tp hp gm cc phn t l hm, k t, s v v list c cha


trong cp du ngoc n (). y l hnh thc lu tr v x l d liu ca AutoLISP; cc biu
thc, hm, chnh l cc List v phn t u tin ca List l hm.

V d:

(1 2 3 4 5 ) danh sch cha cc s;

(a b c) danh sch cha cc k t;

(a 1 b 2 c 3) danh sch cha k t v s

(+ 1 2 3 4) danh sch cha biu thc: 1+2+3+4

4.1.1. Phn loi

Danh sch c phn thnh 3 loi:

- Biu thc (Expression List): cha tn hm v cc thng s ca hm;

- Ta im (Point Coordinate List): cha ta X,Y hoc X,Y,Z ca mt im;

- Kho d liu (Data Storage List): Cha bt k kiu d liu no.


BS: Nguyn Quang Trung 14
4.1.2. To danh sch

Vic lu tr d liu bng danh sch s on gin i rt nhiu so vi vic lu tr bng cc


bin. C hai hm to danh sch, l:

Hm LIST: (list bt1 bt2 bt3 )

Trong : bt1, bt2, bt3 l cc gi tr chui, s, hoc l cc biu thc c nh gi tr.

V d: (setq p(list 10 20 30)) (10 20 30)

(setq x(list (list 10 20) 10 danang)) ((10 20) 10 danang)

Hm QUOTE: (setq a(quote (x y))) hoc (setq a'(x y)) (X Y) (x y): a l list cha
hai bin x,y cha c nh gi tr.

4.2. Cc hm x l danh sch

4.2.1. Hm CAR

C php: (car list)


list: l mt danh sch
Kt qu tr v l phn t u tin ca danh sch, nu list rng th th kt qu nil.
V d:
Command: (car '(a b c)) A
Command: (car '((a b) c)) (A B)
Command: (car '()) nil.
Thng ng dng ly honh x ca im trong autoCAD.

4.2.2. Hm CDR

C php: (cdr list)


list: l mt danh sch
Kt qu tr v: Mt danh sch c loi b phn t u. Nu list rng th tr v kt qu nil.
V d:
Command: (cdr '(a b c)) (B C)
BS: Nguyn Quang Trung 15
Command: (cdr '((10 20) 30)) (30)
Command: (cdr '()) nil

4.2.3. Hm CADR

C php: (cadr list)


list: l mt danh sch
Gi tr tr v: Phn t th hai ca danh sch (list), nu list rng hoc ch c mt phn t th tr v
nil.
Hm Cadr thng dng ly ta y ca im.
V d:
Command: (setq pt2 '(5.25 1.0)) (5.25 1.0)
Command: (cadr pt2) 1.0
Command: (cadr '(4.0)) nil
Command: (cadr '(5.25 1.0 3.0)) 1.0

4.2.4. Hm CADDR

C php: (caddr list)


list: l mt danh sch
Gi tr tr v: Phn t th ba ca danh sch (list), nu list rng hoc ch c t hn hai phn t th tr
v nil.
Hm Caddr thng dng ly ta z ca im 3D.
V d:
Command: (setq pt3 '(5.25 1.0 3.0)) (5.25 1.0 3.0)
Command: (caddr pt3) 3.0
Command: (caddr '(5.25 1.0)) nil

4.2.5. Hm LAST

C php: (last list)


list: l mt danh sch
Gi tr tr v: Phn t cui cng ca danh sch, nu list rng th tr v nil.
V d:
Command: (last '(a b c d e)) E

BS: Nguyn Quang Trung 16


Command: (last '(a b c (d e))) (D E)

4.2.6. Hm LENGTH

C php: (length list)


list: l mt danh sch
Gi tr tr v: Mt s kiu Integer l s phn t c trong list.
V d:
Command: (length '(a b c d)) 4
Command: (length '(a b (c d))) 3
Command: (length '()) 0

4.2.7. Hm NTH

C php: (nth n list)


n: s nguyn l s ca phn t ly ra t danh sch (n=0 l phn t u tin)
list: l mt danh sch.
Gi tr tr v: Phn t th (n +1) ca list. Nu n ln hn s phn t c trong list th tr v nil
V d:
Command: (nth 3 '(a b c d e)) D
Command: (nth 0 '(a b c d e)) A
Command: (nth 5 '(a b c d e)) nil

4.2.8. Hm APPEND

C php: (append list1 list2 ...])


list1, list2,: cc danh sch.
Gi tr tr v:
L mt danh sch gm tt c cc phn t ca list1,list2,
V d:
Command: (append '(a b) '(c d)) (A B C D)
Command: (append '((a)(b)) '((c)(d))) ((A) (B) (C) (D))

BS: Nguyn Quang Trung 17


5. CC HM TON HC

5.1. Cc hm iu khin

Khi tnh ton trong AutoLISP th kiu s (real, integer) l kiu d liu c bn, i lc ta phi
chuyn i qua li p ng lp trnh. Ta thng s dng cc hm x l s sau lm iu
:

a) Hm ABS: ly tr tuyt i

C php: (ABS num)

Num: mt s bt k.
Gi tr tr v: tr tuyt i ca num.
V d:
(abs 100) 100

(abs -100) 100

(abs -99.25) 99.25

b) Hm FIX: Chuyn s thc thnh s nguyn gn nht.

C php: (fix number)

Number: s thc

S nguyn to thnh phi thuc (+2,147,483,647 2,147,483,648)


V d:
Command: (fix 3) 3
Command: (fix 3.7) 3

c) Hm FLOAT: Chuyn s bt k thnh s thc


C php: (float number)
number: s bt k.

BS: Nguyn Quang Trung 18


Gi tr tr v: s thc t s cho.
V d:
Command: (float 3) 3.0
Command: (float 3.75) 3.75

d) Hm REM: chia ly s d.
C php: (rem num1 num2 )
num1: s bt k
num2, : s nguyn
Nu cung cp nhiu hn mt s chia th Rem chia lin tip t tri sang phi, s d s c chia cho
s tip theo v ly s d cui cng.
Gi tr tr v: s d ph thuc vo s b chia nu s b chia l real thi s d l real, cn s b chia l
Integer th s d l integer.
A number. If any number argument is a real, rem returns a real; otherwise, rem returns an integer. If
no arguments are supplied, rem returns 0. If a single number argument is supplied, rem returns
number.
V d:
Command: (rem 42 12) 6
Command: (rem 12.0 16) 12.0
Command: (rem 26 7 2) 1
Command: (rem 26) 26
Command: (rem ) 0

e) Hm GCD: Tm c s chung ln nht ca hai s nguyn.


C php: (gcd int1 int2)
int1, int2: s nguyn dng
Gi tr tr v: s nguyn l c chung ln nht ca int1,int2.
V d:
Command: (gcd 81 57) 3
Command: (gcd 12 20) 4

BS: Nguyn Quang Trung 19


f) Hm MIN: tm s c gi tr nh nht.

C php: (min number1 number2)


Number1, number2,: cc s bt k.
Gi tr tr v: s thc (nu c mt gi tr thc), s nguyn l s c gi tr nh nht trong cc
gi tr.
V d:
Command: (min 683 -10.0) -10.0
Command: (min 73 2 48 5) 2
Command: (min 73.0 2 48 5) 2.0
Command: (min 2 4 6.7) 2.0
Command: (min) 0

g)Hm MAX: tng t hm min nhng a ra gi tr ln nht.

5.2. Cc hm lng gic, cc hm x l khong cch v gc o

5.2.1. Cc hm lng gic

a) Hm SIN: tnh sin ca mt gc gi tr thc n v radian.

C php: (sin ang)


ang: mt gc (radian)
Gi tr tr v: sin(ang)
V d:
Command: (sin 1.0) 0.841471
Command: (sin 0.0) 0.0

Command: (sin pi) 1.22461e-016

b) Hm COS: tnh cos ca mt gc gi tr thc n v radian.

C php: (cos ang)


ang: mt gc (radian)
Gi tr tr v: cos(ang)
V d:

BS: Nguyn Quang Trung 20


Command: (cos 0.0) 1.0
Command: (cos pi) -1.0

c) Hm ATAN: Tr v gi tri arctan ca mt s


C php: (atan num1 [num2])
num1, num2: mt s

arctg(num1) num1 nil, num2 = nil



Gi tr tr v gc (radian) c gi tr bng: arctg(num1/num2) num1 nil, num2 nil
1.570796 (= /2) num1 nil, num2 = 0.

V d:
Command: (atan 1) 0.785398
Command: (atan 1.0) 0.785398
Command: (atan 0.5) 0.463648
Command: (atan 1.0) 0.785398
Command: (atan -1.0) -0.785398
Command: (atan 2.0 3.0) 0.588003
Command: (atan 2.0 -3.0) 2.55359
Command: (atan 1.0 0.0) 1.5708
S dng hm Atan ta c th ta c th tnh c hm asin v acos (hai hm ny khng c trong
autoLISP). Bng bin i ton hc nh sau:

sin x 1 cos 2 x
tan x = =
cos x cos x

1 cos 2 x
Ly atan hai v: x = a tan
cos x

t: t=cosx x =acost

1 t2
Suy ra: a cos t = a tan
t
t
Tng t: a sin t = a tan
1 t2

Bi tp: Xy dng hai hm mi: acos v asin trong autoLISP.

5.2.2. Cc hm x l khong cch v gc o

BS: Nguyn Quang Trung 21


a) Hm ANGLE: o gc (radian) gia ng thng (to bi hai im) v trc ox.
C php: (angle pt1 pt2)
pt1, pt2: hai im
Gi tr tr v: gi tr gc (radian) to bi ng thng c phng v hng t pt1 n pt2 v trc
ox ca mt phng v hin hnh, c chiu dng ngc chiu kim ng h. Nu pt1 v pt2 l cc
im 3D c chiu ln mt phng v hin hnh.
V d:
Command: (angle '(1.0 1.0) '(1.0 4.0)) 1.5708
Command: (angle '(5.0 1.33) '(2.4 1.33)) 3.14159

b) Hm DISTANCE: o khong cch gia hai im.

C php: (distance pt1 pt2)


pt1, pt2 : l im 2D hoc 3D.
Gi tr tr v: gi tr khong cch 3D gia hai im. Nu c mt hoc c hai l im 2D th b
qua cao Z ca im 3D cn li v tr v khong cch gia hai im sau khi chiu chng ln
mt phng v hin hnh.
V d:
Command: (distance '(1.0 2.5 3.0) '(7.7 2.5 3.0)) 6.7
Command: (distance '(1.0 2.0 0.5) '(3.0 4.0 0.5)) 2.82843

c) Hm POLAR: T mt im dng lm gc ta cc, cng vi mt khong cch v mt


gc cho trc xc nh mt im trong khng gian 3 chiu bng phng php ta cc.

C php: (polar pt ang dist)

pt: im 3D hoc 2D.


ang: gi tr gc bng radian c xc nh tng i so vi trc x trong h ta WCS,
chiu dng ngc chiu kim ng h, khng ph thuc vo mt phng v hin hnh.
dist: Khong cch so vi im pt
Gi tr tr v: l im 2D nu pt l im 2D, l im 3D c cao Z vi pt (3D)
V d:
To im 3D bng hm polar:
Command: (polar '(1 1 3.5) 0.785398 1.414214) (2.0 2.0 3.5)

BS: Nguyn Quang Trung 22


To im 2D bng hm polar:
Command: (polar '(1 1) 0.785398 1.414214) (2.0 2.0)

d) Hm GETANGLE: nhp gi tr gc

C php:(getangle [pt] [msg])

pt: im gc trong UCS hin hnh c th c hoc khng, nu c th ngi dng phi nhp thm
im th hai, gi tr gc nhp vo chnh l gc ca ng thng ny vi trc ox ca UCS hin hnh.

msg: li nhc.

Gi tr tr v: gi tr gc do ngi dng nhp vo (c n v trng vi n v gc ca drawing


unit, thng l -decimal degrees) c chuyn sang radian.

V d:

Command: (setq ang (getangle))

180

3.14159 (gi tr tr v)

Command: (setq ang (getangle '(1.0 3.5)))

Chn mt im trn mn hnh

0.710481 (gi tr tr v, ty theo im chn)

Command: (setq ang (getangle "Which way? "))

Command: (setq ang (getangle "Which way? "))

Which way? 90

1.5708

Command: (setq ang (getangle '(1.0 3.5) "Which way? "))

Which way? 45

0.785398

e)Hm GETDIST: Dng li v ch ngi dng nhp vo gi tr lm khong cch.C th


nhp khong cch bng cch chn hai im, hoc nhp im th hai nu nh hm getdist nh

BS: Nguyn Quang Trung 23


sn im th nht (pt). Khong cch nhp vo c n v l n v khong cch hin hnh ca bn
v.

C php: (getdist [pt] [msg])

pt: im 2D hoc 3D (c th c hoc khng) dng nh l im gc trong UCS hin hnh. Nu hm


getdist cung cp im pt th yu cu nhp im th hai xc nh gc.

msg: li nhc

Gi tr tr v: gi tr thc. Nu cc im nhp vo c t nht mt im 3D th tr v khong cch 3D.


Tuy nhin nu ci t 64 bit ca hm initget th hm getdist b qua thnh phn Z v a ra khong
cch 2D.

V d:

(setq dist (getdist))


(setq dist (getdist '(1.0 3.5)))
(setq dist (getdist "How far "))
(setq dist (getdist '(1.0 3.5) "How far? "))

5.2.3. Hm truy bt i tng v truy bt im

Hm OSNAP

Hm INTERS

5.3. Cc hm ly tha, khai cn , logarit

Hm EXP

Hm SQRT

Hm LOG

Hm EXPT

BS: Nguyn Quang Trung 24


BS: Nguyn Quang Trung 25

You might also like