You are on page 1of 133

1

bng cc t vit tt
- NC (Numerical Control): iu khin s.
- CNC (Computer Numerical Control): My gia cng iu khin s c s
tr gip ca my tnh trong vic vn hnh v lp trnh gia cng.
- CL (Cutter Location) l mt tp hp cc b gi tr ta X, Y, Z ca v
tr mi dao qui c, v cc cosin ch phng I, J, K ca vc t trc dng c
trong h ta phi.
- CC (Cutter Contact) im tip xc ca dao c vi b mt gia cng.
- CAD (Computer Aided Design): Thit k vi s tr gip ca my tnh.
- CAM (Computer Aided Manufacturing): Lnh vc s dng my tnh
to chng trnh iu khin h thng sn xut, k c trc tip iu khin
cc thit b, h thng m bo vt t, k thut.












2
mc lc
li ni u ............................................................................. 4
chng 1. tng quan v tnh ton qu o gia
cng trn mt cong........................................................ 6
1.1. M u................................................................................................ 6
1.2. Phng php ng nhp nh b mt................................................... 7
1.3. Phng php ng phng ................................................................... 7
1.4. Phng php ng tham s................................................................. 9
chng 2. tnh ton qu o chy dao theo
phng php ng phng ........................................... 15
2.1. M u.............................................................................................. 15
2.1.1. Tm hiu m hnh CAD dng li tam gic.............................. 16
2.1.2. Giao tip gia Visual Basic vi Excel ....................................... 18
2.1.3. Giao tip gia Visual Basic vi AutoCAD................................ 19
2.2. Thut ton tnh ton v m phng qu o chy dao trn mt STL 22
2.2.1. Giao tuyn ca cc mt phng song song vi mt li STL..... 22
2.2.2. Sp xp cc on giao tuyn theo th t lin tip trn mt giao
tuyn.................................................................................................... 30
2.2.3. Offset cc giao tuyn sinh ra ng CL............................... 33
2.2.4. X l hin tng chng cho (Overlap) trn ng offset ....... 38
2.2.5. X l hin tng t qung (Gap) trn ng offset ................ 43
2.2.6. Tnh cc im CL trn ng offset ......................................... 44
2.2.7. Xut G code............................................................................... 46
2.2.8. M phng qu o chy dao..................................................... 47
chng 3. Tnh ton qu o chy dao theo
phng php ng tham s....................................... 48
3
3.1. Tm hiu mt cong Bezier ................................................................ 48
3.1.1. Mt cong bezier v ng dng ca n trong thc tin................ 48
3.1.2. Phng trnh ton hc ca ng v mt Bezier....................... 48
a) Phng trnh ton hc ca ng Bezier ................................ 48
b) Phng trnh ton hc ca ng Bezier hu t...................... 50
d) ng v mt cong t do tng qut ............................................ 53
3.2. S dng Visual Basic vit chng trnh hin th mt cong Bezier ... 56
3.2.1. Thut ton xy dng cc im CC ca mt cong...................... 56
a) C s l thuyt ........................................................................ 56
b)Thut ton xy dng mt cong t do tng qut ........................... 58
3.2.3. M phng hin th mt cong gia cng....................................... 63
3.3 Tnh cc im CL.............................................................................. 64
3.3.1. Thut ton tnh ton cc im CL............................................. 64
3.3.2. Thit lp cc ng chy dao t cc im CL, m phng trn
AutoCAD............................................................................................. 65
3.4 Xc nh cc m lnh G.................................................................... 66
File G code thu c c dng: .................................................. 68
chng 4. gia cng mu............................................... 69
4.1. Gia cng mu s dng phng php ng phng ............................ 69
4.2. Gia cng mu s dng phng php ng tham s.......................... 71
kt lun................................................................................ 74
Ti liu tham kho ........................................................ 75
ph lc................................................................................... 76
Ph luc 1. Chng trnh tnh ton qu o chy dao theo phng php
ng phng .............................................................................................. 76
Ph lc 2. Chng trnh tnh ton qu o chy dao theo phng php
ng tham s.......................................................................................... 117
4



li ni u
Ngy nay khoa hc cng ngh trong lnh vc sn xut c kh pht
trin rt nhanh vi nhiu tin b. c bit vi s ra i ca nhng trung tm
gia cng CNC a nng sut v cht lng sn xut c kh c nng ln
rt cao. Cc trung tm CNC tr thnh mt phn tt yu ca h thng sn
xut c kh hin i. Cc nh my, phn xng sn xut u phi dn dn
trang b cho mnh nhng my CNC p ng yu cu v nng sut v cht
lng sn xut. i cng vi h thng CNC l cc phn mm CAD/CAM.
Sn phm c thit k, tnh ton v phn tch trn cc module CAD, sau
CAM la chn cng c tnh ton ng chy dao v cc thng s cng
ngh cho sn xut. Tuy nhin nhng phn mm CAM c nh sn xut
ng gi, chng l nhng hp en m ta khng th can thip trc tip vo
chng trnh. c bit l khi gia cng cc mt cong phc tp ta s khng
th kim sot c sai s do phn mm gy ra. Mt vn t ra l phi
a ra mt phng php tnh ton trc tip ng chy dao khi gia cng
nhng mt cong phc tp ny.
n Tnh ton trc tip qu o chy dao CNC 5 trc trn
cc mt cong phc tp nhm sinh ra c ng chy dao CNC 5 trc s
dng cho gia cng cc mt cong phc tp. Ni dung n gm 4 chng:
Chng 1. Tng quan v tnh ton qu o gia cng trn mt cong.
Do hc vin Chu Ngc Tng v Bi Bch Tun Anh thc hin.
Chng 2. Tnh ton qu o chy dao theo phng php ng
phng. Do hc vin Chu Ngc Tng thc hin.
Chng 3. Tnh ton qu o chy dao theo phng php ng tham
s. Do hc vin Bi Bch Tun Anh thc hin.
5
Chng 4. Gia cng mu. Do hc vin Chu Ngc Tng v Bi Bch
Tun Anh thc hin.

Trong qu trnh lm n ny mc d ht sc c gng nhng do
hn ch v kin thc v thi gian nn s khng trnh c nhng thit st.
Chng em rt mong c s gp , b xung, ng gp kin ca thy c
v bn c n hon thin hn. Chng em xin trn thnh cm n Thc
s Vng Xun Hi Nghin cu sinh thuc b mn C in t v ch to
my c bit v cc thy c trong b mn C in t v ch to my c
bit - Khoa Hng khng v tr tn tnh gip , ch bo, to iu kin
trong sut thi gian qua chng em c th hon thnh n ny.


















H Ni, Ngy ..thng .. Nm 2009
Hc vin thc hin
Chu Ngc Tng
Bi Bch Tun Anh
6



chng 1. tng quan v tnh ton qu o gia
cng trn mt cong
1.1. M u
Tnh ton ng chy dao l mt phn quan trng ca qu trnh lp
v kim tra chng trnh NC. ng chy dao c nh hng ln ti
chnh xc ca b mt gia cng, thi gian gia cng, lc ct v tui th ca
dao. Do n nh hng ti nng sut v cht lng ca qu trnh sn xut.
Ci chng ta cn l mt tp hp d liu ca dao, bao gm v tr ca mi
dao v hng ca trc dao. ng chy dao phi m bo sao cho s li
ca chng trnh sinh ra khi chy l nh hn gi tr cho php, thi gian gia
cng l nh nht, tc ct l ln nht v lc ct phi nm trong gi tr cho
php. Khi tnh ton ng chy dao phi ch cc yu t sau:
+ Sai s ca b mt gia cng phi nm trong gii hn cho php.
+ c tnh hnh hc ca mt gia cng.
+ c tnh hnh hc ca mt ct.
+ S va chm gia dao v b mt gia cng.
+ Hng ca trc dao.
+ Tc ct.
+ Tui th dao.
C nhiu phng php c a ra tnh ton ng chy dao
nhng ph bin l cc phng php nh ng phng, ng tham s v ng
nhp nh b mt. Trong gii hn ca n ny chng em tm hiu v
a ra thut ton tnh ton ng chy dao theo phng php ng
phng v ng tham s.
7
1.2. Phng php ng nhp nh b mt
Phng php ng nhp nh b mt l mt trong nhng phng php
sinh ra ng chy dao CNC. ng chy dao ng nhp nh b mt gi
cho chiu cao ca nhp nh b mt khng i theo sut chiu ngang b mt
gia cng. Vic tnh ton sinh ra ng chy dao ng nhp nh b mt cho
CNC 5 trc phc tp hn nhiu so vi my 3 trc, bi v c nhiu loi dao
c s dng v hng ca dao thay i trong sut qu trnh gia cng.
1.3. Phng php ng phng
ng chy dao ng phng c th c nh ngha l cc ng
cong giao tuyn gia b mt chi tit v tp hp cc mt phng song song.
Khong cch gia cc mt phng ct lin tip c tnh ton theo chiu cao
cho php ca cc nhp nh b mt. Phng php ny c kh nng sinh ra
ng chy dao trn nhiu loi m hnh khc nhau ca chi tit nh l m
hnh dng mt tham s, m hnh dng solid, m hnh dng mt implicit v
m hnh dng mt STL (m hnh li tam gic).
Nm 1985 ng Bobrow trnh by mt tng tnh ton ng
chy dao ng phng. tng ny thc hin tnh ton ng chy dao trn
m hnh dng solid. u tin thut ton s ct m hnh bng mt mt
phng, ng cong giao tuyn gia mt phng vi b mt ca chi tit s
c to ra. Theo mt hng ct nht nh, thut ton s to ra cc ng
giao tuyn lin tip t bn ny sang bn kia ca b mt chi tit; sau mt
phng ct s c offset sang mt phng lin k. Qu trnh ny c lp li
cho n khi mt ct cui cng c xc nh. Cc ng giao tuyn ny
chnh l ng CC ca dao.
Mt phng php tnh ton ng chy dao ng phng trn m hnh
dng b mt tham s c Lartigue gii thiu vo nm 2001. Trong
phng php ny th ng thc hin tnh ton cho qu trnh gia cng s
dng dao phay u cu. Khc vi tng ca Bobrow nu ra nm 1985,
8
Lartigue nh ngha ng chy dao l tp hp cc ng cong giao tuyn
gia offset ca b mt chi tit vi mt phng ct. Khong cch offset bng
bn knh ca dao. tng ny ni suy cc giao im bng mt ng cong
B-spline bc 3. ng cong ny chnh l ng chy dao cn tnh.Trong
phng php ny khong cch gia cc ng chy dao c tnh ton sao
cho chiu cao nhp nh b mt ln nht tho mn chiu cao cho php. c
bit nu s dng mt cong NURBS s c sai s tch lu ng k, nguyn
nhn do qu trnh offset b mt; qu trnh ct gia mt phng vi b mt chi
tit v do qu trnh x l cc im CC.
Vo nm 2002 Tam a ra cch tnh ton ng chy dao trc
tip trn m hnh dng b mt implicit. ng chy dao trc tip c tnh
ton da theo tc trc chnh v chiu cao ca nhp nh b mt ln nht
cho php.
sinh ra ng chy dao trn m hnh dng b mt li tam gic
th phng php ng phng cng c s dng. V d nh nm 2002 Xu
s dng cc mt phng ct ct mt li v kt qu to ra cc on
giao tuyn gia mt phng ct vi mt li ca chi tit. Sau cc on
giao tuyn ny c x l theo v tr v hng ca dao.
Hn na, Jun cng trnh by s nghin cu mt vn v ng
chy dao trn m hnh dng b mt li. Trong cch tip cn ny, Cc on
ng cong trn mt ct c x l sinh ra ng chy dao. Thut ton
ny a ra ng CL c dng ca ng cong Bezier hu t bc 2. Trong
phng php ct, mt dy cc mt phng song song s ct phn offset ca
b mt chi tit. Kt qu l phn offset s c ct bi ln lt tng mt ct.
Cc on giao tuyn s c lu li ring theo tng mt phng tng ng.
S giao nhau gia mt mt phng vi mt tam gic li c th c xc
nh d dng t 2 giao im ca mt phng vi cc cnh ca tam gic. Tp
hp nhng on thng giao tuyn ny c gi l ng CL.
9
1.4. Phng php ng tham s
ng chy dao ca my 5 trc (CL tool path) ging nh mt ng
cong i qua nhng im CL (hnh 1.1). Cc im CL c tnh ton theo
im CC, vec t php tuyn n v ca b mt, kch thc ca dao ct,
nghing ca dao ct. Ngoi ra cn c cch tnh ng chy dao theo
phng php khng truyn thng l phng php phi tuyn.

Hnh 1.1: ng chy dao
dn hng mi dao gia hai im CL cho trc ta phi dch tm
quay ca dao ng thi dch chuyn ta ca phi gia cng. V vy mi
dao di chuyn trong h ta ca chi tit gia cng theo mt qu o phi
tuyn.
Trn thc t nhiu phng php tnh ton ng chy dao c
a ra nhng phng php ng tham s vn c s dng nhiu.
ng chy dao theo phng php ng tham s cc ng cong
c nh ngha nh tp hp ca cc on thng trn mt tham s S(u, v),
tng ng vi tp hp ca cc hng s u, v. Ch , mt S(u, v) c th hiu
nh mt nh x r(u, v) t min tham s P(u, v) R
2
ti khng gian 3
chiu W(x, y, z) E
3
. Trong thc t s lin tip ca cc im CC c th
theo phng hng ca u hoc v, s la chn ny ph thuc vo hnh dng
10
ca mt gia cng v loi my gia cng. Dao ct di chuyn hoc tin ln
pha trc hoc ngc li theo hng la chn. Hnh 1.2 minh ha
phng php ng tham s, cc ng cong r(u, v
1
) v r(u, v
2
), y v
1
v
v
2
l hai hng s tng ng. S dch chuyn ca cc im CC c chn
theo phng ca u, nh vy tp hp {r(u, v
1
), r(u, v
2
), r(u, v
3
),} to ln
mt ng CC hon chnh. Ngc li, nu cc im CC c chn theo
phng v th tp hp {r(u
1
, v), r(u
2
, v), r(u
3
, v),} cng s to ln mt
ng CC hon chnh.
S(u,v)
v
r(u,v1)
r(u,v2)
u
x
y
z
r
P
v1
v2
Hnh 1.2: Phng php ng tham s
Thng thng khi s dng phng php ny, phng u c chn
lm phng ca CC.
Khi s dng phng php ny phi gii quyt hai vn :
Tnh ton cc bc tin ( u ) trong hng ca u nh v cc
im CC
Tnh ton cc bc nhy ( v ) nh v cc ng CC k bn
tip theo t mt ng c trc.
Vn u tin nh v chnh xc cc im CC lin tip sao cho
tha mn lch gia hai im CC k bn (phng trnh 1.2). Vn th
hai xc nh khong cch gia cc g CC cnh nhau. Bc tin ca
11
tham s c tnh ton sao cho chiu cao ca hai ng CC k bn tha
mn cng thc 1.1

Bc tin theo phng u
xc nh bc tin gia hai im CC lin tip ta s dng lch
trung bnh
avg
, im CC tip theo s lun l im gia ca b mt hnh ch
nht tip theo, theo phng u. Nu gi tr tnh ton ca
avg
l nh hn gii
hn cho
0
th im CC k tip s l im gia ca hnh ch nht tip
theo, nu khng th im tip theo s c thay i ti trung im ca s
chnh tm, sau kim tra li lch trung bnh. S xc nh lch trung
bnh bao gm s tnh ton khong cch ca mt im b mt gia hai im
lin tip CC
1
v CC
2
(xem hnh 1.3). S lng im gia hai CC do ngi
dng nhp vo. lch trung bnh c tnh ton nh cng thc sau:

1 2
...
n
avg
d d d
n

+ + +
=
(1.1)
y d
i
l khong cch t im th i t hai ng CC
1
CC
2
v n l
s on chia. Khong cch d
i
c tnh gn ng
( ) ( ) ( )
( )( ) ( )( ) ( )( )
( ) ( ) ( )
2 2 2
1 1 1
2 1 1 2 1 1 2 1 1
2 2 2
2 1 2 1 2 1
i i i
i
i i i
x x y y z z
d
x x x x y y y y z z z z
x x y y z z
+ +
=
+ +
+ +
(1.2)

y (x
i
, y
i
, z
i
) l ta ca im thnh phn trn b mt, (x
1
, y
1
, z
1
)
v (x
2
, y
2
, z
2
) l ta ca CC
1
v CC
2
CC1 CC2
d1
u
d2

Hnh 1.3: Tnh lch trung bnh
12

Mt khc, Ta c th xc nh bc tin bng cch s dng lch
cc i
max
thay v s dng lch trung bnh
avg
, v tr ca im CC_2
c xc nh bi s kim tra rng buc
0 max

Quan st hnh 1.3, vc t c c v t ( 0, )
i
u v = r ti ( 1, )
i
u v = r v lch ln
nht ( )
max max
u = d c xc nh. Nu lch ln nht ln hn
0
th cc
im cui ( 0, )
i
u v = r v ( , )
max i
u v r c s dng kim tra lch. ng
cong c chia nh mt cch quy cho ti khi lch cc i
max
l sai
lch t nht so vi gii hn
0
.
r(u,vi)
r
c
d
u=0
u=1

Hnh 1.4: lch cc i
tnh ton
max
ta s dng ng cong tham s ( , )
i
u v r l mt ng
cong Bezier bc ba v gii quyt cc iu kin sau mt cch ng thi.

0
0
0
T
T
=

<

c d
r d
r d
`
``
(1.3)
y: (1, ) (0, )
i i
v v = c r r
Hai iu kin u tin xc nh lch ti a vecto ( ) u d l vung
gc vi vecto c v
T
r` ; Ngoi ra iu kin cui cng s cho ta mt lch
ln nht ng gi tr. Ta tnh xp x ca ng cong r(u, v
i
) s dng bn
im iu khin:
(0, )
i
v r ,
(0, )
(0, )
3
i
i
v
v +
r
r
`
,
(1, )
(1, )
3
i
i
v
v +
r
r
`
v
(1, )
i
v r
.
13

Bc nhy theo phng v
Qu trnh tnh ton v gia hai im CC lin tip c tnh sao cho
chiu cao ca khong nhp nh trn ton b b mt gia cng l nh hn
gii hn cho h
0
. T nhng hng s
i
v ca ng CC ( , )
i
u v r , gi tr ca
tham s tip theo
1 i
v
+
sinh ra ng CC
1
( , )
i
u v
+
r theo phng trnh:

1 i i
v v v
+
= +
(1.4)
y
v
l
v
S
=
, l l khong cch gia cc ng chy dao, v
v
S

chiu di ca mt ng thuc mt ang tnh ti mt gi tr
c
u
, chnh l
chiu di ca ng cong
( , )
c
u v r
. T
v
S bin thin theo s thay i
ca
c
u
, chiu di ca cung
v
S c tnh ti u
c
=0-> 0.25->0.5-> 0.75 v 1
tng ng. Gi tr ln nht c tnh sao cho gi tr t c ca sai s nm
trong gii hn nh nht. T gii hn ca chiu cao nhp nh
o
h v bn knh
ca dao ct R, khong cch gia cc ng chy dao l c tnh:

1
2
0 0
2( (2 )) l h R h =
(1.5)
Tm li, s dng phng php ng tham s hon ton n gin v
thch hp trong thc t v s dng d dng. Tuy nhin phng php c th
gy ra s chng cho trong gia cng gia hai ng chy dao lin tip. S
lng cc chng cho ny ph thuc vo hnh hc ca b mt gia cng. V
d, mt mt c ghp bi bn ng cong c gia cng trn my. Vic
quy nh chiu di ca ng cong nh l t hn chiu di ca ng cong
y, v hng ca dao ct l hng t y ln nh.
ng thi, nu ng chy dao c tnh ton cho cc b mt bc
cao, lch trung bnh gia cc im CC lin tip c th khc rt nhiu t
14
tr s cc i thc s. lch cc i c tnh ton cng c th khc rt
nhiu t tr s cc i thc s khi mt ng cong CC xp x nh mt
ng cong Bezier bc ba ch vi bn im iu khin, v th s tnh ton
ca bc tin gy ra li khng pht hin c.



















15
chng 2. tnh ton qu o chy dao theo
phng php ng phng
2.1. M u
- Phng php ng phng l mt trong nhng phng php tnh ton
qu o chy dao hiu qu v c s dng trong nhiu phn mm
CAM. Phng php ny c th s dng cho nhiu dng m hnh b mt
khc nhau nh m hnh dng solid, dng mt tham s, dng mt implicit v
mt STL (li tam gic). c bit l vi m hnh dng mt STL th phng
php ny th hin c ht nhng u im ca n nh:
+ Qu trnh tnh ton khng qu phc tp.
+ C chnh xc cao.
+ Sai s tch lu ca qu trnh tnh ton nh.
Chnh v vy trong gii hn ca n ti thc hin tnh ton ng
chy dao ng phng trn m hnh dng b mt STL.
- Hin nay c rt nhiu ngn ng lp trnh c th c s dng
tnh ton ng chy dao. Trong Visual Basic l mt ngn ng lp trnh
rt mnh. Ngi lp trnh c th khai thc kh nng t ng ca Visual
Basic vit chng trnh mt cch nhanh chng v thun tin. Hn na
Visual Basic c giao din kh thn thin vi ngi s dng. T nhng u
im trn ti s dng ngn ng Visual Basic lp trnh tnh ton ng
chy dao.
- Qu trnh thc hin tnh ton ng chy dao trn b mt li tam
gic chng ta phi x l mt lng d liu kh ln. l to nh ca
cc tam gic li, to ca cc giao im, ca cc im trn ng
offset D liu ny c cu trc dng bng. V vy thun tin ta c th
s dng cc bng tnh ca Excel ghi v c d liu ca cc qu trnh tnh
ton.
16
- lp trnh tnh ton ng chy dao ta thc hin qua nhiu bc
x l trung gian. Kt qu d liu cui cng ca ng chy dao thu c c
chnh xc hay khng l ph thuc vo cc kt qu tnh ton trung gian. Sau
mi bc trung gian cc kt qu tnh ton u c ghi li vo bng tnh
ca Excel. thc hin ni dung nghin cu ca n ny ti s dng
giao din ca AutoCAD hin th v kim tra tnh chnh xc ca mt gia
cng, cc kt qu trung gian, d liu ng chy dao v m phng ng
chy dao.
2.1.1. Tm hiu m hnh CAD dng li tam gic
- Cc b mt li tam gic l cc m hnh chi tit c nh dng file
STL. N l sn phm c s ho ca cng ngh ti to hay c gi l
cng ngh ngc. Cc b mt chi tit c th c s ho nhanh chng nh
s tr gip ca my tnh. Bng cch s dng cc my o to 3D v phn
mm thit k chuyn dng. My o to c th l dng tip xc (my
CMM) hoc khng tip xc (my scanner laser). D liu thu c sau khi
o l tp hp cc im (m my im) ca chi tit. Cc gi phn mm
chuyn dng c s dng x l m my im. m my im c
a gic ho hnh thnh b mt vt th. Sau d liu c chuyn sang
file nh dng .STL.


Hnh 2.1: V d v m hnh dng li STL

17
- Cu trc ca file STL cha d liu ca tt c cc tam gic trn b
mt li chi tit. N bao gm to 3 nh ca cc tam gic li v to
ca vector php tuyn ca b mt tam gic . D liu ca cc tam gic c
v tr ngu nhin trn file STL m khng theo mt trt t nht nh. V d
mt m hnh li STL hnh 2.2 v cu trc file ca n nh hnh 2.3.

Hnh 2.2: M hnh mt cong dng STL

Hnh 2.3: Cu trc ca file STL
Tn ca
chi tit
To ca vector
php tuyn ca mt
tam gic
To 3
nh ca
tam gic
(x,y,z)
18
2.1.2. Giao tip gia Visual Basic vi Excel
- Ni dung nghin cu ca n s dng ngn ng lp trnh
Visual Basic thc hin cc bc tnh ton ng chy dao. Cc qu trnh
tnh ton u phi c v ghi d liu ln bng tnh ca file Excel. Do ta
phi to lin kt gia chng trnh Visual Basic v Excel. S dng cc hm
sau lin kt:
+ kt ni vi Excel s dng hm:
Ketnoi_Excel(ByVal XlsFile, ByVal XlsSheet)
+ hu kt ni vi Excel s dng hm:
HuyKetnoi_Excel()
+ c d liu t mt ca bng tnh s dng hm:
GetExcel(ByVal i&, ByVal j&) As Double
+ ghi d liu vo mt ca bng tnh s dng hm:
PutExcel(ByVal i&, ByVal j&, ByVal data As Double)
+ m file Excel:
OpenExel()
( Chi tit ca cc hm trnh by trong ph lc )
- Trc khi thc hin cc bc tnh ton ta phi nhp ton b d liu
ca b mt cn gia cng vo file Excel. Cc bc nhp nh sau: Trn menu
chnh ta chn Data -> Import External Data -> Import Data.... Khi hp thoi
Select Data Source xut hin th ta chn file c nh dng STL ca b mt
gia cng import. V d khi nhp d liu ca m hnh b mt STL trong
hnh 2.2 ta thu c kt qu nh hnh 2.4.
19

Hnh 2.4: Cu trc file Excel sau khi nhp d liu t file STL
2.1.3. Giao tip gia Visual Basic vi AutoCAD
- Ta s dng giao din ca AutoCAD hin th v kim tra cc kt
qu tnh ton trung gian, d liu ng chy dao v m phng qu trnh dao
chy. Cc kt qu c hin th t nhng i tng c bn AutoCAD
nh ng thng, ng trn Chnh v vy ta phi to lin kt gia Visual
Basic vi AutoCAD bng cch tham chiu ti th vin AutoCAD Type
Libraly. Thc hin nh sau:
20
Chn References option t Project menu, hp thoi References
dialog xut hin. Trong References dialog box chn Type libraly
AutoCAD, sau click OK.
- S dng hm sau kt ni VisualBasic vi AutoCAD:
Sub Ketnoi AutoCAD ()
On Error Resume Next
' Kt ni vi AutoCAD:
Dim acadApp As AcadApplication
Set acadApp = GetObject(, "AutoCAD.Application.16")
If Err Then
Err.Clear
Set acadApp = CreateObject("AutoCAD.Application.16")
If Err Then
MsgBox Err.Description
Exit Sub
End If
End If
' Kt ni vi bn v:
Dim acadDoc As AcadDocument
Set acadDoc = acadApp.ActiveDocument
' Khai bo i tng ng thng:
Dim lineObj As AcadLine
Dim startPoint(0 To 2) As Double
Dim endPoint(0 To 2) As Double
End sub.
Nu AutoCAD ang chy th lnh GetObject s khng sinh ra li.
Ngc li nu sinh ra li, tc l CAD cha chy. Khi lnh CreatObject
s khi ng CAD. Nu c nhiu ca s ca CAD ang chy th chng
trnh s ly ca s u tin trong Windows Running Object Table
21
- m phng kim tra cc qu trnh tnh ton trn AutoCAD th ta
s dng lnh v ng thng:
V Line:
SetLineObject=Object.AddLine(StartPoint, EndPoint)

Hnh 2.5: ng thng c v trn AutoCAD
Bng 2.1: Kiu d liu ca ng thng
Tn Kiu d liu Miu t
StartPoint Variant
Mng 3 hn t kiu Double l to
3D ca im u ca ng thng
trong h to WCS
EndPoint Variant
Mng 3 hn t kiu Double l to
3D ca im cui ca ng thng
trong h to WCS

Ch vi lnh v ng thng ta c th kim tra cc qu trnh tnh ton
x l d liu d ng theo yu cu hay cha, pht hin ra li sai ca chng
trnh v nguyn nhn gy ra li; c th m phng ng chy dao mt cch
trc quan.




StartPoint
EndPoint
( 0, 0, 0 )
22
2.2. Thut ton tnh ton v m phng qu o chy dao trn mt STL
2.2.1. Giao tuyn ca cc mt phng song song vi mt li STL
sinh ra cc ng giao tuyn ta s dng mt dy cc mt phng
song song ct m hnh li ca chi tit. Cc mt phng ny cch u nhau
mt khong nht nh. c xc nh da vo chiu cao nhp nh b
mt ln nht cho php. thun tin cho qu trnh tnh ton, khng mt
tnh tng qut ta chn cc mt phng ny song song vi mt trong ba mt
phng ca h trc to . Chn cc mt phng ct c dng:
0
.
k
y y k = +
(k=0,n)

Hnh 2.6: Cc mt phng ct song song
u tin ta phi xc nh c tp hp nhng mt phng s dng
ct mt li. S lng cc mt phng ct phi m bo ton b b mt gia
cng c ct. Trc ht cn tm mt phng tng ng vi
k
y nh nht v
ln nht. Qu trnh ct mt li s c thc hin bt u t mt phng
min k k
y y = . Sau qu trnh s c tip tc vi nhng mt ct lin k cho
n khi mt ct tng ng
k kmax
y y =
c thc hin.
V d khi s dng mt phng
k
y y =
ct mt li nh trong hnh
2.6 ta s thu c kt qu nh sau:


23

Hnh 2.7: Giao tuyn ca mt mt phng ct vi mt li STL
Nh th qu trnh ct s din ra lin tc t bn ny sang bn kia ca
b mt gia cng. Kt qu thu c l tp hp cc ng giao tuyn ca cc
mt phng ct vi m hnh li ca chi tit.

Hnh 2.8: Tp hp cc giao tuyn ca cc mt phng ct vi mt STL
xc nh c mt phng ct u tin v mt phng ct cui cng
ta phi tm c im nm trn mt gia cng c gi tr to y nh nht v
ln nht. Mt phng ct u tin s l
min k
y y = . Mt phng ct tip theo s
c xc nh bng cch offset mt phng u tin mt khong bng . C
nh vy ta tng dn chiu su mt phng ct cho n khi
max k
y y = .
Gi tr to ca cc tam gic li khng c b tr theo mt quy
lut nht nh trn file d liu. Chnh v vy khng th xc nh c ngay
Mt phng y=
k
y

Giao tuyn
24
mt mt phng giao tuyn s ct nhng tam gic li no ca b mt gia
cng. Vi mi mt phng ct ta dng thut ton kim tra ln lt tt c cc
tam gic li trn b mt gia cng xc nh nhng tam gic no s c
giao tuyn vi mt phng .
xc nh v tr tng i ca cc tam gic li so vi mt giao
tuyn ta kim tra ln lt 3 cnh ca tam gic c giao vi mt phng hay
khng. V tr tng i ca mt mt phng so vi mt tam gic li c th
c cc trng hp nh sau:


Giao tuyn ch i qua 1 nh tam
gic
Giao tuyn i qua 2 cnh tam gic


Giao tuyn i qua 1 nh v mt
cnh ca tam gic
Giao tuyn trng vi mt cnh ca
tam gic
Hnh 2.9: V tr tng i ca mt mt phng ct vi mt tam gic li
Vi tng mt phng ct ta phi kim tra ln lt tt c cc tam gic
li xem chng c giao nhau khng. V d vi tam gic ABC v mt
k
y

k
y

k
y

k
y

25
phng
k
y
, nu:
( )( ) 0
A k B k
y y y y <
th mt phng
k
y
s ct cnh AB.
Tng t vi cc cnh khc ta cng kim tra nh vy. Gi tr to ca cc
giao im s c ghi li.
Khi mt mt phng ct c giao tuyn vi tam gic li th to cc
giao im s c tnh v ghi li. Nu mt phng
k
y ct tam gic ABC ti 2
im M v N th to ca chng c xc nh nh sau:

Hnh 2.10: Mt phng
k
y
ct tam gic ABC ti M v N
To ca M v N c tnh theo:
( )
k A
M C A A
C A
y y
x x x x
y y

= +


M k
y y =

( )
k A
M C A A
C A
y y
z z z z
y y

= +


.( )
k B
N A B B
A B
y y
x x x x
y y

= +


N k
y y =

.( )
k B
N A B B
A B
y y
z z z z
y y

= +


k
y

26
C nh vy thut ton s kim tra ln lt cc tam gic, nu c cc
giao im th to ca chng s c ghi li. on thng gia hai giao
im l mt on giao tuyn. ng giao tuyn cn tm l tp hp cc on
giao tuyn lin tip.
Qu trnh sinh ra giao tuyn vi mt mt phng ct kt thc th
chng trnh s chuyn sang x l vi mt phng ct tip theo. C nh vy
cc ng giao tuyn s ln lt c sinh ra t bn ny sang bn kia ca
b mt gia cng. Cc to giao im c ghi li tng ng vi tng giao
tuyn, ht giao tuyn ny n giao tuyn kia.
Ly v d vi mt cong trong hnh 2.2 ta thu c kt qu cc giao
tuyn nh sau:

Hnh 2.11: Tp hp cc ng giao tuyn










27
To ca cc giao im sau khi tnh c s c ghi li vo bng
tnh ca file Excel. Cc to s c ghi ln lt trn bng tnh tng ng
vi tng giao tuyn, ht giao tuyn ny ti giao tuyn khc. Kt qu thu
c nh sau:

Hnh 2.12: D liu ca cc ng giao tuyn c lu trn file Excel




28
Ly v d vi mt m hnh khc ta thu c cc kt qu sau:

M hnh dng li tam gic

Cc giao tuyn thu c khi ct m hnh theo chiu dc

Cc giao tuyn thu c khi ct m hnh theo chiu ngang
Hnh 2.13: Sinh ra giao tuyn trn mt m hnh khc
29

Hnh 2.14: S thut ton sinh ra cc giao tuyn
Bt u
Xc nh mt phng ct u tin v mt phng ct cui cng
Ly gi tr to 3 nh ca tam gic th i
Mt phng ct giao
vi cc cnh tam gic
Ghi to giao im
trn cnh BC v AB
Ghi to giao im
trn cnh AB v AC
Ghi to giao im
trn cnh AC v BC
Kt thc
Mt phng ct giao
vi cnh AB
Mt phng ct giao
vi cnh BC
Mt phng ct th k
Tam gic tip theo
Mt phng tip theo
MP ct cui c x l
ng
Sai
Sai
Sai
ng
ng
ng
ng
Sai
Sai
Cc tam gic c k.tra xong
30
2.2.2. Sp xp cc on giao tuyn theo th t lin tip trn mt
giao tuyn
Trn mt file STL th gi tr to ca cc tam gic li khng c
sp xp theo mt th t nht nh. Vi mi tam gic trn b mt li chng
ta khng bit c gi tr to ca n c ghi ti v tr no trn file STL.
Chnh v vy khi s dng mt mt phng ct mt li ta s thu c d
liu ca cc on giao tuyn m khng bit on giao tuyn nm v tr
no trn ng giao tuyn tng ng. c th sinh ra ng chy dao ta
phi sp xp cc on giao tuyn theo mt th t ln lt t u n
cui ng giao tuyn. Cc ng giao tuyn s c sp xp theo quy lut
tng dn hoc gim dn theo gi tr ca cc on giao tuyn. Ta s sp xp
cc ng tng dn v gim dn xen k nhau c th sinh ra ng chy
dao theo kiu zigzag.
V d mt mt phng ct cc tam gic thnh cc on giao tuyn nh
hnh 2.15.

Hnh 2.15: Cc on giao tuyn trn cng mt ng giao tuyn trc
khi sp xp
Trn hnh 2.15 th tn ca cc on giao tuyn c nh du theo v
tr to ca n c lu trn bng tnh ca file Excel. T nh n ln
31
(A1B1 n A6B6 ) tng ng v tr to ca n c lu t trn xung
di trn mt ct ca bng tnh.
Vn t ra l phi sp xp to ca cc on giao tuyn theo th
t t trn xung di ca bng tnh tng ng vi v tr t u n cui ca
giao tuyn hoc ngc li. Kt qu sp xp li c th hin trn hnh 2.16.

Hnh 2.16: Cc on giao tuyn trn cng mt ng giao tuyn sau khi
sp xp
Thut ton sp xp c th hin nh trong hnh 2.17.
32

Hnh 2.17: Thut ton sp xp li v tr ca cc on giao tuyn
Bt u
Tm on giao tuyn c gi tr to nh nht
Tm cc on giao tuyn lin k
Sp dy tng dn
Tm on giao tuyn c gi tr to ln nht
Tm cc on giao tuyn lin k
Sp dy gim dn
Tt c cc giao tuyn
c sp xp
Kt thc
Sai
ng
Cc on giao tuyn
c tm ht
Cc on giao tuyn
c tm ht
Sai
Sai
ng
ng
33
2.2.3. Offset cc giao tuyn sinh ra ng CL
thu c ng CL th ta phi offset cc ng giao tuyn tm
c. Hng offset l hng ra ngoi b mt gia cng. offset cc giao
tuyn theo ng hng nh vy ta da vo vector php tuyn ca cc mt
tam gic li. Khong cch offset f c tnh bng bn knh ca con dao
phay u cu. Khong cch ny c th c la chn tu vo ngi s
dng. Tu theo gi tr to ca vector php tuyn ca mt tam gic li
x
v v
z
v ta c cc trng hp offset nh sau:
Trng hp 1: 0
x
v > v 0
z
v >

Hnh 2.18a: Offset giao tuyn khi 0
x
v > v 0
z
v >
To ca on offset thu c:
.sin( )
C B
x x f teta = +

.sin( )
C B
z z f teta = +

arctan( )
A B
A B
z z
teta
x x


.sin( )
D A
x x f teta = +

.sin( )
D A
z z f teta = +







34
Trng hp 2: 0
x
v = v 0
z
v >

Hnh 2.18b: Offset giao tuyn khi 0
x
v = v 0
z
v >
To ca on offseet thu c:
C B
x x =

C B
z z f = +

D A
x x =

D A
z z f = +


Trng hp 3: 0
x
v < v 0
z
v >

Hnh 2.18c: Offset giao tuyn khi 0
x
v < v 0
z
v >
.sin( )
C B
x x f teta =

.sin( )
C B
z z f teta = +

arctan( )
A B
A B
z z
teta
x x


.sin( )
D A
x x f teta =

.sin( )
D A
z z f teta = +


35
Trng hp 4: 0
x
v < v 0
z
v <

Hnh 2.18d: Offset giao tuyn khi 0
x
v < v 0
z
v <
To on offset thu c:
.sin( )
C B
x x f teta =

.sin( )
C B
z z f teta =

arctan( )
A B
B A
z z
teta
x x


.sin( )
D A
x x f teta =

.sin( )
D A
z z f teta =


Trng hp 5: 0
x
v > v 0
z
v <

Hnh 2.18e: Offset giao tuyn khi 0
x
v > v 0
z
v <

36
To on offset thu c:
.sin( )
C B
x x f teta = +

.sin( )
C B
z z f teta =

arctan( )
B A
B A
z z
teta
x x


.sin( )
D A
x x f teta = +

.sin( )
D A
z z f teta =


Sau khi tnh c to ca cc offset th cc to ny c ghi li
vo bng ca file Excel. T nhng ng offset ny ta c th x l sinh
ra ng chy dao. Kt qu offset ca mt giao tuyn nh hnh 2.19.

Hnh 2.19: Offset mt ng giao tuyn
Sau khi offset ton b cc giao tuyn ta thu c mt phng offset
nh hnh 2.20.

Hnh 2.20: Tp hp cc ng offset ca cc giao tuyn



37

Hnh 2.21: Lu thut ton offset giao tuyn
Bt u
c d liu ca mt on giao tuyn
0
x
v >
v 0
z
v >
0
x
v =
v 0
z
v >
0
x
v <
v 0
z
v >
0
x
v <
v 0
z
v <
Tnh d liu
on offset
theo TH5
Tnh d liu
on offset
theo TH4
Tnh d liu
on offset
theo TH3
Tnh d liu
on offset
theo TH2
Tnh d liu
on offset
theo TH1
Offset on giao tuyn tip theo
Tt c cc on giao
tuyn c offset
Kt thc
ng
ng
Sai
ng
ng
ng
Sai
Sai
Sai
Sai
38
2.2.4. X l hin tng chng cho (Overlap) trn ng offset
Khi offset cc on giao tuyn nm trn nhng b mt lm s xut
hin cc Overlap. l hin tng giao nhau gia hai on offset to ra
nhng phn tha. Nh trong hnh 2.22:

Hnh 2.22: Hin tng Overlap trn ng offset
Vn t ra l phi sa cc Overlap ny, loi b nhng phn tha.
m bo cho ng CL l mt ng lin tc. bit c nhng on
offset no c to thnh Overlap th ta phi dng thut ton kim tra xem
nhng on lin k c ct nhau khng. Nu 2 on m giao nhau th ta loi
b nhng on offset nm gia hai on ny. Giao im ca hai on offset
s c ly lm im cui ca on th nht v im u ca on th hai.
Hin tng Overlap c th c cc trng hp nh sau:
+ on offset th nht v on th 5 giao nhau. Trng hp ny ta s
tnh to giao im ca on offset1 v on offset5. Sau ly giao
im ny lm im cui ca on offset 1 v l im u ca on offset 5.
Cc on offset 2,3 v 4 s b loi b. Nh trong hnh 2.23a. Cc trng
hp khc cng c x l tng t.
39


Trc khi sa Overlap Sau khi sa Overlap
Hnh 2.23a. on offset th 1 v th 5 c to overlap
+ on offset th nht v on th 4 giao nhau:

Trc khi sa Overlap Sau khi sa Overlap
Hnh 2.23b: on offset th 1 v th 4 c to overlap









40
+ on offset th nht v on th 3 giao nhau:
Trc khi sa Overlap Sau khi sa Overlap
Hnh 2.23c: on offset th 1 v th 3 c to overlap
+ on offset th nht v on th 2 giao nhau:
Trc khi sa Overlap Sau khi sa Overlap
Hnh 2.23d: on offset th 1 v th 2 c to overlap







41
+ on offset th 1, 2 v 3 khng giao nhau ng thi on on th
3 nm gia on 1 v 2. Trng hp ny ta ko di on offset 1 cho ct
on offset 3. Ly giao im lm im cui ca offset 1 v l im u ca
offset 3, on offset 2 b loi b. Nh trong hnh 2.23e.

Trc khi sa Overlap Sau khi sa Overlap
Hnh 2.23e: on offset th 1, 2 v 3 khng giao nhau ng thi on
on th 3 nm gia on 1 v 2
+ on offset th 1, 2 v 3 khng giao nhau ng thi on on th
1 nm gia on th 2 v 3. Trng hp ny cng c x l tng t khi
on offset 3 nm gia offset 1 v 2. Nh trong hnh 2.23f.


Trc khi sa Overlap Sau khi sa Overlap
Hnh 2.23f: on offset th 1, 2 v 3 khng giao nhau ng thi on
on th 1 nm gia on th 2 v 3

42
Lu thut ton:

Hnh 2.24: Lu thut ton x l hin tng Overlap

X l Overlap trng hp on th i
v on th i+4 giao nhau
X l Overlap trng hp on th i
v on th i+3 giao nhau
X l Overlap trng hp on th i
v on th i+2 giao nhau
X l Overlap trng hp on th i;
i+1; i+2 khng giao nhau v on th
i+2 nm gia on i v i+1
X l Overlap trng hp on th i;
i+1; i+2 khng giao nhau v on th i
nm gia on i +2 v i+1
X l ht cc
giao tuyn
Kt thc
X l tng giao

Bt u
X l Overlap trng hp on th i
v on th i+1 giao nhau
Sai
ng
43
2.2.5. X l hin tng t qung (Gap) trn ng offset
ng CL c sinh ra bng cch offset ng giao tuyn s c hin
tng t qung. C ngha l cc on offset khng ni tip nhau mt cch
lin tc trn ng CL. Nhng v tr nh vy c gi l Gap. Vn t ra
l phi sa cc Gap ny sao cho ng CL tr thnh mt ng lin tc.
Gap xut hin ti cc on offset tng ng vi cc on giao tuyn nm
trn nhng mt cong li. Nh trong hnh 2.25.

Hnh 2.25: Hin tng Gap trn ng offset
Trong phn nghin cu ny ta s dng dao phay u cu gia cng
chi tit. Khi c th sa Gap bng cch ko di hai on offset cho giao
nhau, v ng CL s i qua giao im ny.

Hnh 2.26: X l hin tng Gap trn ng offset


44
2.2.6. Tnh cc im CL trn ng offset
Sau khi cc ng offset c x l xong chng tr thnh nhng
ng cong lin tc. Cc ng offset ny s c ti u sinh ra ng
CL cn tnh. Trn mt ng offset c th c nhng on offset c chiu
di rt nh. l nhng on offset ca on giao tuyn nm st nh
ca tam gic. C th lm trn nhng on ny nh sau:


Hnh 2.27: Tnh im CL
Trn mt ng offset ta kim tra vi cc on offset lin tip. Cc
im u mt trn ng offset l A,B,C, Nu khong cch d t im B
ti on AC nh hn gi tr cho php ta c th b qua im B v ng
offset mi ch i qua im A v C. Gi tr ca d c th thay i tu thuc
ngi s dng. Sau khi kim tra ton b cc im trn ng offset tho
mn iu kin nh trn th cc im cui cng thu c s l nhng im
CL cn tnh. Cc ng CL thu c c dng nh hnh 2.28.

Hnh 2.28: Cc ng CL thu c

on offset 1
on offset 2
ng offset
45
Gi tr ca nhng im CL c lu trong file Excel nh trong hnh 2.29.

Hnh 2.29: D liu ca ng CL







46
2.2.7. Xut G code
kim tra chnh xc ca d liu ng CL ta thc hin xut file
G code gia cng mu. V iu kin cha c chng trnh postprocessor
cho my 5 trc nn ta thc hin kim tra ng chy dao trn my 3 trc.
S dng thut ton xut d liu G code cho CNC 3 trc ta c file G code
nh hnh 2.30.

Hnh 2.30: File G code cho my 3 trc

47
2.2.8. M phng qu o chy dao
S dng giao din ca AutoCAD ta c th kim tra ng chy dao
CNC ng theo nh hay cha trc khi xut file NC gia cng. M
phng c th kim tra c:
- Th t ng chy dao theo kiu zigzag
- S lin tc ca ng chy dao
- Vector php tuyn ca b mt gia cng ti v tr dao chy qua
Kt qu m phng nh sau:
Hnh 2.31: M phng qu o chy dao trn giao din AutoCAD

















48
chng 3. Tnh ton qu o chy dao theo
phng php ng tham s
3.1. Tm hiu mt cong Bezier
3.1.1. Mt cong bezier v ng dng ca n trong thc tin
ng v mt Bezier hin nay c s dng nhiu trong k thut
ha. ng bezier s dng v cc ng cong trong cc phn mm ha
nh photoshop, Coredow to cho nt v mm v mn hn, s dng v
th, to font ch Mt Bezier ng dng trong k thut to hnh, iu khc,
h tr trong cng vic to cc mt cong phc tp.
3.1.2. Phng trnh ton hc ca ng v mt Bezier
a) Phng trnh ton hc ca ng Bezier
Cho 2 im P0=(x0,y0,z0) v P1=(x1,y1,z1) bng ni suy tuyn tnh
ta vit c on thng ni hai im:
C(u)=(x(u),y(u),z(u))=(1-u)*P0+u*P1 (3.1)
vi 0<=u<=1.

Hnh 3.1 on thng ni hai im
Bng cch ni suy tng t t 3 im P0,P1,P2 ta c ng cong
C(u) nh sau:
Da trn cp P0, P1 ta c C1(u)
49

1 0 1
( ) (1 ) u u u = + C p p (3.2)
Da trn cp P1, P2 ta c C2(u)
2 1 2
( ) (1 ) u u u = + C p p (3.3)
T C1(u), C2(u) ta c C(u)
2 2
0 1 2
( ) (1 ) 2 (1 ) u u u u u = + + C p p p
(3.4)
T ta vit c phng trnh ca ng cong Bezier cho n im ni suy
c dng nh sau:
,
0
( ) ( ( ), ( ), ( )) ( )
n
i n i
i
u x u y u z u B u
=
= =

C P
(3.5)

,
!
( ) (1 )
!( )!
0 1
i n i
i n
n
B u u u
i n i
u


(3.6)

Vi
,
( )
i n
B u l a thc bernstein, u l tham s, Pi l cc im iu khin
V d vit ng cong cho 4 im iu khin P0, P1, P2, P3 c
biu din nh hnh v.

Hnh 3.2 ng cong Bezier

* Cc tnh cht ca ng Bezier
- [ ]
,
( ) 0 , ; 0,1
i n
B u i n u
(3.7)
-
,
0
( ) 1
n
i n
i
B u
=
=
(3.8)
50
-
0, ,
(0) (1) 1
n n n
B B = =
(3.9)
-
, , 1 1, 1
( ) (1 ) ( ) ( )
i n i n i n
B u u B u uB u

= +
(3.10)
-
'
, 1, 1 , 1
( ) ( ) ( )
i n i n i n
B u nB u nB u

=
(3.11)
b) Phng trnh ton hc ca ng Bezier hu t
Dng biu din Bezier thc cht l dng biu din ca mt a thc
ni suy v vy n khng th biu din chnh xc elip, hnh trn v vy
biu din cc i tng ny mt cch chnh xc ngi ta s dng ng
Bezier hu t

( )
( )
( )
( )
( )=
( )
X u
x u
W u
Y u
y u
W u
=
(3.12)
V d ng trn c tm gc ta bn knh bng 1 c biu din di
dng Bezier hu t nh sau

2
2
2
1 ( )
( )
1 ( )
2 ( )
( )
1 ( )
u X u
x u
u W u
u Y u
y u
u W u

= =
+
= =
+
(3.13)
nh ngha: ng cong Bezier hu t c nh ngha bng biu thc sau

,
0
,
0
,
( )
( )
( )
!
( ) (1 )
!( )!
0 1
n
i n i i
i
n
i n i
i
i n i
i n
B u w
u
B u w
n
B u u u
i n i
u
=
=

=
=

P
C
(3.14)
Trong wi l trng s.
thun tin khi tnh ton gi tr im v kho st ng Bezier hu
t, ta chuyn v dng Bezier trong khng gian 4 chiu nh sau:
T tp im {Pi} v tp trng s {Wi} cho trc ta xc nh tp im{Piw}
51

w
( , , , )
i i i i i i i
w x w y w z w = p (3.15)
Ta c th vit:

,
0
,
( ) ( )
!
( ) (1 )
!( )!
0 1
n
w w
i n i
i
i n i
i n
u B u
n
B u u u
i n i
u
=

=
=

C P
(3.16)
Tp im {Pi} c xc nh:
, 0 0 1, 0 0 1, 1 0
( ) (1 ) ( ) ( )
1,...,
0,...,
w w w
k i k i k i
u u u u u
k n
i n k
+
= +
=

P P P
(3.17)
* S thay i ca trng s Wi
Trng s Wi thay i ko theo s thay i ca ng cong Bezier ta
c th minh ha bng hnh v:

Hnh 3.3 S ph thuc ca ng cong vo Wi
Wi cng ln th ng cong cng ko gn im iu khin. Hnh
minh ha cho 4 ng c cc im iu khin nh nhau {P
0
,P
1
,P
2
,P
3
,P
4
,P
5
}
nhng ng c trng s w
i
ln hn c cong ln hn.





52
c) Phng trnh ton hc ca mt Bezier v mt Bezier hu t
ng cong C(u) l mt hm gi tr vecto ca tham s u. N l nh
x ca mt ng thng vo khng gian 3 chiu Euclidean, t mt hm
b mt cng l l mt hm gi tr vecto theo hai tham s u v v, cng l nh
x t mt min phng (u,v) vo khng gian Euclidean 3 chiu.


Hnh 3.4 Anh x t (u,v) ti S(u,v)
nh ngha: Mt cong Bezier c nh ngha theo biu thc sau
, , ,
0 0
( , ) ( ) ( )
n m
i n j m i j
i j
u v B u B v
= =
=

S P
(3.18)
,
!
( ) (1 )
!( )!
i n i
i n
n
B u u u
i n i

(3.19)
,
!
( ) (1 )
!( )!
j m j
j m
m
B v u v
j m j

(3.20)
Vi u, v l cc tham s 0 , 1 u v
Tng t ng cong Bezier ta cng c mt cong Bezier hu t
biu cc mt cong phc tp nh hnh xuyn, mt cu, mt Elip





53
Mt cong Bezier hu t c nh ngha nh sau:
, , , ,
0 0
, , ,
0 0
( ) ( )
( , )
( ) ( )
n m
i n j m i j i j
i j
n m
i n j m i j
i j
B u B v w
u v
B u B v w
= =
= =
=

P
S (3.21)

, , ,
0 0
( ) ( )
n m
w w
i n j m i j
i j
B u B v
= =
=

S P (3.22)
Vi Wi,j l cc trng s theo phng u v phng v

Hnh 3.5 Mt Bezier hu t
d) ng v mt cong t do tng qut
Mt mt cong tng qut c th bao gm nhiu thnh phn, bng
phng, li, lm v cc gc un ln v cng phc tp, vic biu din ng
v mt di dng Bezier c th gy ra li khi biu bin cc on giao nhau
ca cc thnh phn ny khi cho tham s u, v chy u t 01 v vy ngi
ta phi phn nh cc tham s theo cc on biu din chnh xc hn
V d
0 1
0 1
u
v





54
Ngi ta c th phn thnh cc on nh nh sau:
1 2 3
1 2 3
0 1
0 1
u u u
v v v



Khi gi tr cc im ti cc cp (u,v) phn ra ta coi nh l im
cui ca ng cong hay mt cong, v ng thi l im u ca ng
cong hay mt cong tip theo. Nhim v ca chng ta l phn chng lm sao
cc ng cong hay mt cong ti cc im nt ny l lin tc.

Hnh 3.6

T C(u) ta phn nh ra thnh 3 ng cong C
1
(u), C
2
(u), C
3
(u)

Hnh 3.7 S phn nh cc ng cong
nh ngha mt ng cong tng qut nh sau
0
( ) ( )
n
P
i i
i
C u N u P
a u b
=
=

(3.23)
{P
i
} l tp im iu khin
55
( )
p
i
N u l biu thc c bn c nh ngha cho cc im iu khin
1
, , 1 1, 1
1 1
( ) ( ) ( )
i p
i
i p i p i p
i p i i p i
u u
u u
N u N u N u
u u u u
+ +
+
+ + + +

= +

(3.24)
Vi
1
,0
1
1
( )
0 [ , ]
i i
i
i i
neu u u u
N u
neu u u u
+
+

=


Tng t ta c phng trnh tham s ca ng cong t do tng qut
biu din dng hu t

,
0
,
0
( )
( )
( )
n
i p i i
i
n
i p i
i
N u wP
C u
N u w
a u b
=
=
=

(3.25)

Vi gi tr ca u c xc nh nh sau:


Nh vy mt cong t do tng qut c biu din nh sau
, , , ,
0 0
, , ,
0 0
( ) ( )
( , )
( ) ( )
n m
i p j q i j i j
i j
n m
i p j q i j
i j
N u N v w P
S u v
N u N v w
= =
= =
=

(3.27)
Vi u v v c tnh nh sau:
1 1
1 1
0, ... 0, , ... ,1, ... 1
p r p
p p
U u u
+
+ +


=



_ _
(3.28)
1 1
1 1
0, ... 0, , ... ,1, ... 1
q s q
q q
V v v
+
+ +


=



_ _
(3.29)
r=n+p+1
s=m+q+1

1 1
1 1
, ... , , ... , , ... (3.26)
p m p
p p
U a a u u b b
+
+ +


=



_ _
56

Hnh 3.8 Mt cong tng qut



3.2. S dng Visual Basic vit chng trnh hin th mt cong Bezier
3.2.1. Thut ton xy dng cc im CC ca mt cong
a) C s l thuyt
xy dng thut ton tnh ton cc im CC ca mt mt cong ta
i t vic xy dng thut ton tnh ton cc im ca mt ng cong, ta
s dng thut ton de Casteljau.
Cho ng C(u) c vit trn n im iu khin cho trc {Pi} bi ton
t ra l tnh im C(u) vi u l tham s xc nh c trc
+
= +
=

, 0 0 1, 0 0 1, 1 0
( ) (1 ) ( ) ( )
Vi
1,...,
0,...,
k i k i k i
u u u u u
k n
i n k
P P P
(3.30)
C(u) c tnh quy ti gi tr cui cng C(u)=
,0 0
( )
n
u P
57
Thut ton c m t nh sau:
0
1,0
1 2,0
1,1
2
1,0
,0 0
1,1
2
1, 2
1 2, 2
1, 1
... ( )
n
n
n
n
n
n n
n
n
u

=
p
p
p p
p
p
p
p C
p
p
p
p p
p
p
.
. . .
. . .
. . .
.
(3.31)
Vi n im iu khin cho trc {P
0
,P
1
,...,P
n
} ta tnh c n-1 im
P
1
,
k
vi k chy t 1 n n-1 theo cng thc (3.30). Tng t ta tnh c n-2
im P
2
,
k
. Ta tnh n bc nh th s c kt qu cui cng l P
n
,
0
. Gi tr
cui cng ny chnh l gi tr ca C(u
0
).
Ta c th m t bng hnh v

Hnh 3.9 Thut ton de Casteljau
58
Tng t nh ng Bezier ta c thut ton de Casteljau cho ng
Bezier hu t
T tp {P
i
} v tp trng s {w
i
} cho trc ta xy dng tp im {
w
i
p }

w
( , , , )
i i i i i i i
w x w y w z w = p (3.32)
Ta c th vit

,
0
,
( ) ( )
!
( ) (1 )
!( )!
0 1
n
w w
i n i
i
i n i
i n
u B u
n
B u u u
i n i
u
=

=
=

C P
(3.33)
V cc im {
w
i
p } c tnh nh sau
, 0 0 1, 0 0 1, 1 0
( ) (1 ) ( ) ( )
for
1,...,
0,...,
w w w
k i k i k i
u u u u u
k n
i n k
+
= +
=

P P P
(3.34)
Vi C(u) l gi tr c quy ti im cui cng ti k=n, i=0.
b)Thut ton xy dng mt cong t do tng qut
Nhc li phng trnh ca mt cong t do tng qut phng trnh
, , , ,
0 0
, , ,
0 0
( ) ( )
( , )
( ) ( )
n m
i p j q i j i j
i j
n m
i p j q i j
i j
N u N v w P
S u v
N u N v w
= =
= =
=

(3.27)
Vi u v v c tnh nh sau
1 1
1 1
0, ... 0, , ... ,1, ... 1
p r p
p p
U u u
+
+ +


=



_ _

1 1
1 1
0, ... 0, , ... ,1, ... 1
q s q
q q
V v v
+
+ +


=



_ _

r=n+p+1
s=m+q+1
59
Bc 1: Nhp cc im iu khin v cc trng s
Tp im iu khin {P
i
} v tp trng s {w
i
} c ngi lp trnh nhp
trc tip vo file Exel lm d liu u vo.

Hnh 3.10: D liu u vo t Exel
Cc im iu khin ny s c lm d liu u vo ca Visual
Basic (VB) qua vic khai bo i tng Object.
Bc 2: Tnh cc gi tr u v v l cc gi tr tham s biu th bc
nhy v bc tin ca cc im CC k cn.
*Tnh v
Da vo chiu cao nhp nh cho php ca sn phm cn gia cng ta
c h
0
, c bn knh dao ct R, t ta tnh c cc bc tin cn thit gia
hai im CC .
0 0
2 (2 ) l h R h =
(3.35)
ng thi bng phng php gn ng ta tnh c chiu di ca
mt dy cung S(u
0
,v
i
) , t ta tnh c v
60
v =
v
l
S
(3.36)
S
v
c th c tnh gn ng bng cch tnh tng chiu di cc on
S
v
=A
0
A
1
+A
1
A
2
+A
2
A
3
+A
3
A
4
(3.37)
Vi A
0->4
l cc im tng ng ti v
i
={0,0.25,0.5,0.75,1}
*Tnh bc nhy u
Vi mt cp tham s (u,v) xc nh ta lun tnh c
S(u,v)=(S.x,S.y,S.z) xc nh, ta gi thit c gi tr ca v, bo ton t ra
l tm gi tr ca u tnh cc gi tr ca u. u
i
=u
i-1
+u
Tnh u ta da vo phng php tnh chiu cao d
max
vi d
max
c
tnh theo cng thc



y gi tr i tng ng vi im D, tnh gn ng D l im gia ca
cung

1 2
, CC CC
r(u,vi)
r
c
d
u=0
u=1

Hnh 3.11: Tnh
max
d
So snh d
max
vi lch tiu chun
0

, nu
max 0
d
th coi nh
tha mn v ta ly gi tr u ti im d
max
lm u , t ta c tp cc gi tr
tham s {u}. Trng hp
max 0
d > th ta ly im D
max
va tnh lm im
CC
2
, Gi nguyn gi tr CC
1
, tnh mt im D
max
mi ging nh phng
php trnh by, ta s lm nh vy n khi no
max 0
d
.
Bc 3: Tnh ton cc gi tr N
i
,
p
(u) v N
j
,
p
(v)
( ) ( ) ( )
( )( ) ( )( ) ( ) ( )
( ) ( ) ( )
2 2 2
1 1 1
max
2 1 1 2 1 1 2 1 1
2 2 2
2 1 2 1 2 1
(3.38)
i i i
i i i
x x y y z z
d
x x x x y y y y z z z z
x x y y z z
+ +
=
+ +
+ +
61
Ban u vi cp (u,v)=(0,0)

1
, , 1 1, 1
1 1
( ) ( ) ( )
i p
i
i p i p i p
i p i i p i
u u
u u
N u N u N u
u u u u
+ +
+
+ + + +

= +

(3.39)
1
, , 1 1, 1
1 1
( ) ( ) ( )
j q
i
j q j q j q
i p q j q i
v v
v v
N v N v N v
v v v v
+ +
+
+ + + +

= +

(3.40)
Vi cc gi tr ca u v v nh sau:
1 1
1 1
0, ... 0, , ... ,1, ... 1
p r p
p p
U u u
+
+ +


=



_ _

1 1
1 1
0, ... 0, , ... ,1, ... 1
q s q
q q
V v v
+
+ +


=



_ _

r=n+p+1
s=m+q+1
Bc 4: Xy dng hm tnh cc im CC(S.x,S.y,S.z) da vo cc cp
tham s (u,v)
T phng trnh tham s ca mt cong S(u,v)
, , , ,
0 0
, , ,
0 0
( ) ( )
( , )
( ) ( )
n m
i p j q i j i j
i j
n m
i p j q i j
i j
N u N v w P
S u v
N u N v w
= =
= =
=


Tp im iu khin {P
i
}, tp trng s {w
i
} c ly t d liu Exel,
cc gi tr N
i
,
p
(u) v N
j
,
p
(v) c tnh, ta ln lt thay cc cp gi tr
(u,v) vo phng trnh trn ta c cc gi tr tng ng ca S(u,v), t ta
c CC(S.x,S.y,S.z)=S(u,v), trn Visual Basic ta tnh ton cc im
CC(S.x,S.y,S.z) da vo vng lp c thit lp nh cc cu lnh sau:
*===========================================*
Cho j chy t 0 n q
Thit lp cc gi tr ban u
temp.x = 0: temp.y = 0: temp.z = 0: temp.w = 0
vind = vspan - q + i
cho j chy t 0 n p
62
temp.x = temp.x + funs_u(j) * CP(uind + j, vind).x
temp.y = temp.y + funs_u(j) * CP(uind + j, vind).y
temp.z = temp.z + funs_u(j) * CP(uind + j, vind).z
temp.w = temp.w + funs_u(j) * CP(uind + j, vind).w
tip tc
Sw.x = Sw.x + funs_v(i) * temp.x
Sw.y = Sw.y + funs_v(i) * temp.y
Sw.z = Sw.z + funs_v(i) * temp.z
Sw.w = Sw.w + funs_v(i) * temp.w
Nu Sw.w khc 0 Th
S.x = Sw.x / Sw.w: S.y = Sw.y / Sw.w: S.z = Sw.z / Sw.w
Cn li
S.x = Sw.x: S.y = Sw.y: S.z = Sw.z
Kt thc
Tip tc
*=======================================*
Ta c th minh ha thut ton bng hnh v:


Hnh 3.12: Thut ton xc nh CC



63
3.2.3. M phng hin th mt cong gia cng
m phng mt cong gia cng ta da vo phng trnh tham s ca
mt cong t do, t thut ton xc nh cc im CC trn ta c th v mt
cong trn AutoCAD bng cch tham chiu CAD ti Visual Basic, khai bo
trn Visual Basic, CAD nh mt i tng Object. Mt cong c xy dng
ln nh cc im CC xc nh v a ra lu trong Excel lm d liu u
vo ca AutoCAD. Ta gi lnh ca Visual Basic sang AutoCAD nh thc
hin bng nt lnh trn Visual Basic.


Hnh 3.13: Bng iu khin
Sau khi thc hin lnh ts c kt qu m phng nh sau:

Hnh 3.14: M phng mt gia cng
64
3.3 Tnh cc im CL
3.3.1. Thut ton tnh ton cc im CL
Vic tnh ton cc im CL da trn cc im CC c sn, cc im
CL c tnh ph thuc vo bn knh dao ct R, vecto php tuyn ca mt
cong ti im ct, gc ca trc dao ct
CL c tnh da vo CC nh cng thc sau
* CL CC R n = +

(3.41)
Vi R l bn knh dao ct, R

l hng ca trc dao ct, n

l vc t
ch phng ca mt cong gia cng ti im CL( im ct)
R

l gi tr ta c th thit lp, n

c tnh bng cch o hm phng trnh


S(u,v) ti im CC tng ng vi n.
Vi mi im CC ta c mt im CL tng ng, vic tnh cc gi tr CL
trn Visual Basic ta s dng m lnh sau:
*===========================================*
While excelsheet8.cells(j, 6) <> ""
u_cc(i) = excelsheet8.cells(j, 6)
v_cc(i) = excelsheet8.cells(j, 7)
If u_cc(i) <> u_cc(i - 1) Or v_cc(i) <> v_cc(i - 1) Then
Call mat_phang_diem(u_cc(i), v_cc(i))
CC_P(i).x = S.x
CC_P(i).y = S.y
CC_P(i).z = S.z
t(i) = phuongdao
CL(i).x = CC_P(i).x + R2 * t(i).x
CL(i).y = CC_P(i).y + R2 * t(i).y
CL(i).z = CC_P(i).z + R2 * t(i).z
excelsheet8.cells(i, 9) = CL(i).x
excelsheet8.cells(i, 10) = CL(i).y
excelsheet8.cells(i, 11) = CL(i).z
excelsheet8.cells(i, 12) = excelsheet7.cells(j, 7)
excelsheet8.cells(i, 13) = t(i).x
excelsheet8.cells(i, 14) = t(i).y
excelsheet8.cells(i, 15) = t(i).z
i = i + 1
65
End If
j = j + 1
Wend
*===========================================*
Ta c th minh ha thut ton nh hnh v sau:

Hnh 3.15: Thut ton xy dng cc im CL
3.3.2. Thit lp cc ng chy dao t cc im CL, m phng
trn AutoCAD
ng chy dao toolpath thc cht l tp hp cc im CL to ln
theo quy lut. ng chy dao c thit lp theo kiu ziczac, khong cch
gia cc ng c quyt nh bng delta_v, v cht lng gia cng hay
mn ca toopath c quyt nh bng delta_u. Cc gi tr ny c
trnh by cch tnh ton phn trn. Vic m phng cc im CL c m
66
phng trn AutoCAD. Cc ng chy dao c to ln bng cch ni cc
im CL li vi nhau. Vic m phng c minh ha bng hnh v di.

Hnh 3.16: M phng ng chy dao
3.4 Xc nh cc m lnh G
Sau khi tnh ton xong cc im CL ta c th to ng chy dao
cho cc loi my nh vo b PostProcessor ca tng my ta xut c
Gcode cho my gia cng. Ton b thut ton xy dng xut file Gcode
c minh ha bng hnh v 3.17.
67

Hnh 3.17: thut ton to Gcode
68
File G code thu c c dng:

Hnh 3.18: M G code thu c






69
chng 4. gia cng mu
4.1. Gia cng mu s dng phng php ng phng
- Chn b mt gia cng nh sau:
Hnh 4.1: M hnh li ca mt gia cng
- D liu trn file STL c dng sau:

Hnh 4.2: D liu ca mt gia cng trn file STL
70
- Cc ng giao tuyn ca cc mt ct
0
.
k
y y k = +
vi mt gia
cng khi chn 1.5 = (mm):
Hnh 4.3: Cc ng giao tuyn ca cc mt ct
0
.
k
y y k = +
vi mt
gia cng
- ng CL thu c:
Hnh 4.4: ng CL
- M phng ng chy dao trn giao din AutoCAD:
Hnh 4.5: M phng ng chy dao trn AutoCAD
71
- Kt qu sn phm sau gia cng:
Hnh 4.6: Sn phm sau khi gia cng
4.2. Gia cng mu s dng phng php ng tham s
- Mu gia cng c dng:

Hnh 4.7: Mu gia cng s dng phng php ng tham s


72
- D liu u vo ca mu gia cng:

Hnh 4.8: D liu u vo ca mu gia cng














73
- ng CL thu c c dng nh sau:
Hnh 4.9: ng CL thu c

Hnh 4.10: Mu thu c sau khi gia cng
74
kt lun
Sau hn 3 thng thc hin n, c s hng dn tn tnh ca thc
s Vng Xun Hi v cc thy gio ti b mn C in t v CTMB
Khoa Hng khng v tr, tuy gp nhiu kh khn khch quan song chng
em hon thnh c n ng thi gian quy nh. i chiu kt qu
t c vi bn nhim v n, chng em nh gi chung kt qu t
c nh sau:
- tm hiu c tng quan v cc phng php tnh qu o chy
dao CNC trn mt cong.
- a ra c thut ton v chng trnh tnh ton qu o chy dao
theo phng php ng phng v phng php ng tham s.
- Thc hin gia cng mu s dng cc phng php tnh ton trn.
- Tm hiu c v cc m hnh CAD nh dng STL v dng tham
s.
- Th hin c kh nng lp trnh bng ngn ng Visual Basic.
- Tm hiu c cch thc lin kt ngn ng lp trnh Visual Basic
vi cc phn mm ng dng nh Microssoft Office Excel v AutoCAD.
Mc d chng em n lc ht sc trong sut qu trnh lm n
nhng do y l mt vn nghin cu mi i vi nc ta, ti liu ch yu
l cc bi bo ng trn tp ch ca nc ngoi, v vy cc ni dung nghin
cu cha thc s su; cha so snh c vi cc phng php khc, c th
cc ni dung cn thiu st. Chng em rt mong c s gp ca cc thy
gio cc ni dung nghin cu ca n c hon thin hn.
Mc d n lc c gng song do gp nhiu kh khn khch quan
nn trong n chng em s khng trnh c c nhng thiu xt. Tuy
nhin nhm cng t nh gi hon thnh c ni dung nhim v t ra.


75
Ti liu tham kho
[1]. Trn Ngc Bo, Gio trnh Lp trnh Windown- Nhng Excel
vo VB. (Ti liu trn mng internet)
[2]. Trn Anh Bnh, Bi ging Lp trnh trn AutoCAD. (Ti liu trn
mng internet)
[3]. Nguyn Th Ngc Mai, Microsoft Visual Basic 6.0 & Lp trnh
c s d liu, NXB L-XH nm 2007.
[4].Chu Anh M, o Vn Hip, Multi-axis CNC tool path
generationmethods for sculptured surfaces machining.





















76
ph lc
Ph luc 1. Chng trnh tnh ton qu o chy dao theo phng
php ng phng
- Giao din ca chng trnh:

Hnh p.1: Giao din ca chng trnh tnh qu o chy dao theo phng
php ng phng
77
Option Explicit
Public i As Long
Public j As Long
Public l As Long
Public m As Long
Public k As Long
Public v As Double
Public vx As Double
Public vy As Double
Public vz As Double
Public vz1 As Double
Public vz2 As Double
Public ymin As Double
Public ymax As Double
Public ykmin As Double
Public ykmax As Double
Public yk As Double
Public x0 As Double
Public x1 As Double
Public x2 As Double
Public x3 As Double
Public x4 As Double
Public x5 As Double
Public x6 As Double
Public x7 As Double
Public x8 As Double
Public x9 As Double
Public x10 As Double
Public xg As Double
Public xg1 As Double
Public xg2 As Double
Public xf1 As Double
Public xf2 As Double
Public y0 As Double
Public y1 As Double
Public y2 As Double
Public y3 As Double
78
Public y4 As Double
Public y5 As Double
Public y6 As Double
Public y7 As Double
Public y9 As Double
Public z0 As Double
Public z1 As Double
Public z2 As Double
Public z3 As Double
Public z4 As Double
Public z5 As Double
Public z6 As Double
Public z7 As Double
Public z8 As Double
Public z9 As Double
Public z10 As Double
Public zg As Double
Public zg1 As Double
Public zg2 As Double
Public zf1 As Double
Public zf2 As Double
Public c12 As Double
Public c23 As Double
Public c31 As Double
Public a1 As Double
Public a2 As Double
Public a3 As Double
Public a4 As Double
Public ap As Double
Public b1 As Double
Public b2 As Double
Public b3 As Double
Public c As Double
Public c1 As Double
Public c2 As Double
Public c3 As Double
Public c4 As Double
79
Public cp As Double
Public d As Double
Public d1 As Double
Public d3 As Double
Public e1 As Double
Public e3 As Double
Public f As Double
Public f1 As Double
Public f3 As Double
Public n As Double
Public teta As Double
Public h As Integer
Public r As Double
Public sttd As Double
Public sttc As Double

Private Sub Tinh_CL_Path_Click()
XlsFilename = txtFile.Text & ".xls"
XlsSheetname = "Sheet1"
Call Ketnoi_Excel(XlsFilename, XlsSheetname)
f = Val(txtRtool.Text) 'khoang cach offseet
d = Val(txtdelta.Text) 'khoang cach giua 2 toolpath

Call VeMesh
Call GiaoTuyen
Call VeGiaoTuyen
Call LamTron
Call SapDuLieu
Call Offset
Call XuLyLine
Call XuLyOverlap
Call XuLyGap
Call CL_Data
Call LamTron2
Call G_Code
Call MoPhong
Call OpenExel
80
ExcelWB.Save
End Sub

Sub VeMesh()
On Error Resume Next
' =============== Ket noi AutoCAD
Dim acadApp As AcadApplication
Set acadApp = GetObject(, "AutoCAD.Application.16")
If Err Then
Err.Clear
Set acadApp = CreateObject("AutoCAD.Application.16")
If Err Then
MsgBox Err.Description
Exit Sub
End If
End If
' =============== Ket noi ban ve
Dim acadDoc As AcadDocument
Set acadDoc = acadApp.ActiveDocument
Dim lineObj As AcadLine
Dim startPoint(0 To 2) As Double
Dim endPoint(0 To 2) As Double
Dim startPoint2(0 To 2) As Double
Dim endPoint2(0 To 2) As Double

acadApp.Visible = True
ZoomAll
For j = 3 To 21 Step 6
i = 7
Do While Abs(Bangtinh.Cells(i - 2, j + 1)) + Abs(Bangtinh.Cells(i - 2, j + 2)) +
Abs(Bangtinh.Cells(i - 2, j + 3)) <> 0
startPoint(0) = Bangtinh.Cells(i, j)
startPoint(1) = Bangtinh.Cells(i, j + 1)
startPoint(2) = Bangtinh.Cells(i, j + 2)
endPoint(0) = Bangtinh.Cells(i + 1, j)
endPoint(1) = Bangtinh.Cells(i + 1, j + 1)
endPoint(2) = Bangtinh.Cells(i + 1, j + 2)
81
Set lineObj = acadDoc.ModelSpace.AddLine(startPoint, endPoint)
lineObj.Color = acWhite

startPoint(0) = Bangtinh.Cells(i, j)
startPoint(1) = Bangtinh.Cells(i, j + 1)
startPoint(2) = Bangtinh.Cells(i, j + 2)
endPoint(0) = Bangtinh.Cells(i + 2, j)
endPoint(1) = Bangtinh.Cells(i + 2, j + 1)
endPoint(2) = Bangtinh.Cells(i + 2, j + 2)
Set lineObj = acadDoc.ModelSpace.AddLine(startPoint, endPoint)
lineObj.Color = acWhite

startPoint(0) = Bangtinh.Cells(i + 2, j)
startPoint(1) = Bangtinh.Cells(i + 2, j + 1)
startPoint(2) = Bangtinh.Cells(i + 2, j + 2)
endPoint(0) = Bangtinh.Cells(i + 1, j)
endPoint(1) = Bangtinh.Cells(i + 1, j + 1)
endPoint(2) = Bangtinh.Cells(i + 1, j + 2)
Set lineObj = acadDoc.ModelSpace.AddLine(startPoint, endPoint)
lineObj.Color = acWhite

i = i + 7
Loop
Next j
' Luu ban ve:
acadDoc.SaveAs App.Path & "\" & CStr(Month(Date)) & "-" & CStr(Day(Date)) & "-"
& CStr(Year(Date)) & "_" & CStr(Hour(Time)) & "-" & CStr(Minute(Time)) + ".dwg"
End Sub

Sub GiaoTuyen()
'=============doc du lieu toa do cac dinh cua tam giac va cosin chi huong
cua vector phap tuyen cua mat tam giac
Dim vertex_x0(0 To 300000) As Double
Dim vertex_x1(0 To 300000) As Double
Dim vertex_x2(0 To 300000) As Double
Dim vertex_y0(0 To 300000) As Double
Dim vertex_y1(0 To 300000) As Double
82
Dim vertex_y2(0 To 300000) As Double
Dim vertex_z0(0 To 300000) As Double
Dim vertex_z1(0 To 300000) As Double
Dim vertex_z2(0 To 300000) As Double
Dim vetx(0 To 300000) As Double
Dim vety(0 To 300000) As Double
Dim vetz(0 To 300000) As Double
Dim s As Long
Dim i As Long
Dim h As Integer

s = 7
i = 0
h = 3
Do
vertex_x0(i) = Bangtinh.Cells(s, h)
vertex_x1(i) = Bangtinh.Cells(s + 1, h)
vertex_x2(i) = Bangtinh.Cells(s + 2, h)
vertex_y0(i) = Bangtinh.Cells(s, h + 1)
vertex_y1(i) = Bangtinh.Cells(s + 1, h + 1)
vertex_y2(i) = Bangtinh.Cells(s + 2, h + 1)
vertex_z0(i) = Bangtinh.Cells(s, h + 2)
vertex_z1(i) = Bangtinh.Cells(s + 1, h + 2)
vertex_z2(i) = Bangtinh.Cells(s + 2, h + 2)
vetx(i) = Bangtinh.Cells(s - 2, h + 1)
vety(i) = Bangtinh.Cells(s - 2, h + 2)
vetz(i) = Bangtinh.Cells(s - 2, h + 3)
i = i + 1
s = s + 7
Loop While Abs(vetx(i - 1)) + Abs(vety(i - 1)) + Abs(vetz(i - 1)) > 0

s = 7
i = i - 1
h = 9
Do
vertex_x0(i) = Bangtinh.Cells(s, h)
vertex_x1(i) = Bangtinh.Cells(s + 1, h)
83
vertex_x2(i) = Bangtinh.Cells(s + 2, h)
vertex_y0(i) = Bangtinh.Cells(s, h + 1)
vertex_y1(i) = Bangtinh.Cells(s + 1, h + 1)
vertex_y2(i) = Bangtinh.Cells(s + 2, h + 1)
vertex_z0(i) = Bangtinh.Cells(s, h + 2)
vertex_z1(i) = Bangtinh.Cells(s + 1, h + 2)
vertex_z2(i) = Bangtinh.Cells(s + 2, h + 2)
vetx(i) = Bangtinh.Cells(s - 2, h + 1)
vety(i) = Bangtinh.Cells(s - 2, h + 2)
vetz(i) = Bangtinh.Cells(s - 2, h + 3)
i = i + 1
s = s + 7
Loop While Abs(vetx(i - 1)) + Abs(vety(i - 1)) + Abs(vetz(i - 1)) > 0

s = 7
i = i - 1
h = 15
Do
vertex_x0(i) = Bangtinh.Cells(s, h)
vertex_x1(i) = Bangtinh.Cells(s + 1, h)
vertex_x2(i) = Bangtinh.Cells(s + 2, h)
vertex_y0(i) = Bangtinh.Cells(s, h + 1)
vertex_y1(i) = Bangtinh.Cells(s + 1, h + 1)
vertex_y2(i) = Bangtinh.Cells(s + 2, h + 1)
vertex_z0(i) = Bangtinh.Cells(s, h + 2)
vertex_z1(i) = Bangtinh.Cells(s + 1, h + 2)
vertex_z2(i) = Bangtinh.Cells(s + 2, h + 2)
vetx(i) = Bangtinh.Cells(s - 2, h + 1)
vety(i) = Bangtinh.Cells(s - 2, h + 2)
vetz(i) = Bangtinh.Cells(s - 2, h + 3)
i = i + 1
s = s + 7
Loop While Abs(vetx(i - 1)) + Abs(vety(i - 1)) + Abs(vetz(i - 1)) > 0

s = 7
i = i - 1
h = 21
84
Do
vertex_x0(i) = Bangtinh.Cells(s, h)
vertex_x1(i) = Bangtinh.Cells(s + 1, h)
vertex_x2(i) = Bangtinh.Cells(s + 2, h)
vertex_y0(i) = Bangtinh.Cells(s, h + 1)
vertex_y1(i) = Bangtinh.Cells(s + 1, h + 1)
vertex_y2(i) = Bangtinh.Cells(s + 2, h + 1)
vertex_z0(i) = Bangtinh.Cells(s, h + 2)
vertex_z1(i) = Bangtinh.Cells(s + 1, h + 2)
vertex_z2(i) = Bangtinh.Cells(s + 2, h + 2)
vetx(i) = Bangtinh.Cells(s - 2, h + 1)
vety(i) = Bangtinh.Cells(s - 2, h + 2)
vetz(i) = Bangtinh.Cells(s - 2, h + 3)
i = i + 1
s = s + 7
Loop While Abs(vetx(i - 1)) + Abs(vety(i - 1)) + Abs(vetz(i - 1)) > 0
i = i - 1

'============= tim toa do nho nhat cua mat luoi:
ymin = vertex_y0(0)
For h = 0 To i Step 1
If ymin > vertex_y0(h) Then
ymin = vertex_y0(h)
End If
Next h
ymin = Round(ymin, 2)
'=============== tim toa do lon nhat cua mat luoi:
ymax = vertex_y0(0)
For h = 0 To i Step 1
If ymax < vertex_y0(h) Then
ymax = vertex_y0(h)
End If
Next h
ymax = Round(ymax, 2)
j = 4
d = Val(txtdelta.Text)
yk = ymin + d / 2
85
Do
For h = 0 To i Step 1
x0 = vertex_x0(h)
y0 = vertex_y0(h)
z0 = vertex_z0(h)
x1 = vertex_x1(h)
y1 = vertex_y1(h)
z1 = vertex_z1(h)
x2 = vertex_x2(h)
y2 = vertex_y2(h)
z2 = vertex_z2(h)
vx = vetx(h)
vy = vety(h)
vz = vetz(h)
'===============xuat DL cua giao tuyen:
'--------neu co gt:
If ((y0 - yk) * (y1 - yk) < 0 Or (y1 - yk) * (y2 - yk) < 0 Or (y0 - yk) * (y2 -
yk) < 0) _
Then '-------- kiem tra 2 canh tam giac co cat ko
'-------- neu canh 1-2 cat mp:
If (y0 - yk) * (y1 - yk) < 0 Then
c12 = (yk - y0) / (y1 - y0)
xg1 = c12 * (x1 - x0) + x0
zg1 = c12 * (z1 - z0) + z0
'-------- va canh 2-3 cat mp:
If (y1 - yk) * (y2 - yk) < 0 Then
c23 = (yk - y1) / (y2 - y1)
xg2 = c23 * (x2 - x1) + x1
zg2 = c23 * (z2 - z1) + z1
'-------- canh 3-1 cat mp:
Else
c31 = (yk - y2) / (y0 - y2)
xg2 = c31 * (x0 - x2) + x2
zg2 = c31 * (z0 - z2) + z2
End If
'---------- canh 2-3 va 3-1 cat mp:
Else
86
c23 = (yk - y1) / (y2 - y1)
c31 = (yk - y2) / (y0 - y2)
xg1 = c23 * (x2 - x1) + x1
zg1 = c23 * (z2 - z1) + z1
xg2 = c31 * (x0 - x2) + x2
zg2 = c31 * (z0 - z2) + z2
End If
'-----------luu gia tri toa do cua gt :
Bangtinh.Cells(j, 25) = Round(xg1, 6)
Bangtinh.Cells(j, 26) = Round(yk, 6)
Bangtinh.Cells(j, 27) = Round(zg1, 6)
Bangtinh.Cells(j + 1, 25) = Round(xg2, 6)
Bangtinh.Cells(j + 1, 26) = Round(yk, 6)
Bangtinh.Cells(j + 1, 27) = Round(zg2, 6)
Bangtinh.Cells(j, 28) = vx
Bangtinh.Cells(j, 29) = vy
Bangtinh.Cells(j, 30) = vz
j = j + 3
End If
Next h
yk = yk + d
Loop While yk <= ymax
End Sub

Sub VeGiaoTuyen()
On Error Resume Next
'----------------- Ket noi AutoCAD:
Dim acadApp As AcadApplication
Set acadApp = GetObject(, "AutoCAD.Application.16")
If Err Then
Err.Clear
Set acadApp = CreateObject("AutoCAD.Application.16")
If Err Then
MsgBox Err.Description
Exit Sub
End If
End If
87
'------------------ Ket noi ban ve:
Dim acadDoc As AcadDocument
Set acadDoc = acadApp.ActiveDocument
'------------ Khai bao doi tuong duong thang:
Dim lineObj As AcadLine
Dim startPoint(0 To 2) As Double
Dim endPoint(0 To 2) As Double
Dim startPoint2(0 To 2) As Double
Dim endPoint2(0 To 2) As Double

i = 4
Do While Abs(Bangtinh.Cells(i, 10)) + Abs(Bangtinh.Cells(i, 11)) +
Abs(Bangtinh.Cells(i, 12))
startPoint2(0) = Bangtinh.Cells(i, 7)
startPoint2(1) = Bangtinh.Cells(i, 8)
startPoint2(2) = Bangtinh.Cells(i, 9)
endPoint2(0) = Bangtinh.Cells(i + 1, 7)
endPoint2(1) = Bangtinh.Cells(i + 1, 8)
endPoint2(2) = Bangtinh.Cells(i + 1, 9)
If startPoint2(1) = 28.4845 Then
Set lineObj = acadDoc.ModelSpace.AddLine(startPoint2, endPoint2)
lineObj.Color = acRed
End If
i = i + 3
Loop
ZoomAll
acadDoc.SaveAs App.Path & "\" & CStr(Month(Date)) & "-" & CStr(Day(Date)) &"-"
& CStr(Year(Date)) & "_" & CStr(Hour(Time)) & "-" & CStr(Minute(Time)) + ".dwg"
End Sub
Sub LamTron()
For i = 4 To 53482 Step 3
If Round(Bangtinh.Cells(i, 12), 3) = 1 Then
Bangtinh.Cells(i, 12) = 1
Bangtinh.Cells(i, 11) = 0
Bangtinh.Cells(i, 10) = 0
End If
Next i
88
End Sub

Sub SapDuLieu()
h = 7
Do While Abs(Bangtinh.Cells(5, h + 3)) + Abs(Bangtinh.Cells(5, h + 4)) +
Abs(Bangtinh.Cells(5, h + 5)) > 0
h = h + 6
Loop
c = h

Dim xgt1(1 To 65000) As Double
Dim xgt2(1 To 65000) As Double
Dim ygt1(1 To 65000) As Double
Dim ygt2(1 To 65000) As Double
Dim zgt1(1 To 65000) As Double
Dim zgt2(1 To 65000) As Double
Dim vx(1 To 65000) As Double
Dim vy(1 To 65000) As Double
Dim vz(1 To 65000) As Double

i = 1
r = 4
Do
xgt1(i) = Bangtinh.Cells(r, c)
xgt2(i) = Bangtinh.Cells(r + 1, c)
ygt1(i) = Bangtinh.Cells(r, c + 1)
ygt2(i) = ygt1(i)
zgt1(i) = Bangtinh.Cells(r, c + 2)
zgt2(i) = Bangtinh.Cells(r + 1, c + 2)
vx(i) = Bangtinh.Cells(r, c + 3)
vy(i) = Bangtinh.Cells(r, c + 4)
vz(i) = Bangtinh.Cells(r, c + 5)
i = i + 1
r = r + 3
Loop While Abs(vx(i - 1)) + Abs(vy(i - 1)) + Abs(vz(i - 1)) > 0
i = i - 2
r = r - 3
89

ykmin = ygt1(1)
ykmax = ygt1(i)

d = Val(txtdelta.Text)
'=================Sap du lieu:
m = 4 'm:chi so vi tri cua cac cap so da chuyen
For yk = ykmin To ykmax Step (2 * d)
'---------------------------Day tang dan:---------------------------
sttd = 1
Do
b1 = ygt1(sttd)
sttd = sttd + 1
Loop While Abs(b1 - yk) > 0.0000001
sttd = sttd - 1 '------so tt cua so dau tien trong day
sttc = sttd
Do
b1 = ygt1(sttc)
sttc = sttc + 1
Loop While Abs(b1 - (yk + d)) > 0.0000001 And (sttc <= i + 1)
sttc = sttc - 2 '-------so tt cua so cuoi cung trong day
'---------------------------lay so dau cua day so:
a1 = xgt1(sttd)
a2 = xgt2(sttd)
c1 = zgt1(sttd)
c2 = zgt2(sttd)
d1 = vx(sttd)
e1 = vy(sttd)
f1 = vz(sttd)
'chuyen cho a1<a2:
If a2 < a1 Then
ap = a1: a1 = a2: a2 = ap
cp = c1: c1 = c2: c2 = cp
End If
For k = sttd + 1 To sttc Step 1
a3 = xgt1(k)
a4 = xgt2(k)
90
c3 = zgt1(k)
c4 = zgt2(k)
d3 = vx(k)
e3 = vy(k)
f3 = vz(k)
If (Abs(a1) + Abs(a2) + Abs(c1) + Abs(c2) <> 0) And a3 < a4 And a3 < a1
Then
a1 = a3: a2 = a4
c1 = c3: c2 = c4
d1 = d3
e1 = e3
f1 = f3
Else
If (Abs(a1) + Abs(a2) + Abs(c1) + Abs(c2) <> 0) And a4 < a3 And a4 <
a1 Then
a1 = a4: a2 = a3
c1 = c4: c2 = c3
d1 = d3
e1 = e3
f1 = f3
End If
End If
Next k
If (Abs(a1) + Abs(a2) + Abs(c1) + Abs(c2) <> 0) Then '-----luu bo so dau tien:
Bangtinh.Cells(m, 13) = a1
Bangtinh.Cells(m + 1, 13) = a2
Bangtinh.Cells(m, 14) = yk
Bangtinh.Cells(m + 1, 14) = yk
Bangtinh.Cells(m, 15) = c1
Bangtinh.Cells(m + 1, 15) = c2
Bangtinh.Cells(m, 16) = d1
Bangtinh.Cells(m, 17) = e1
Bangtinh.Cells(m, 18) = f1
m = m + 3
End If
'---------- tim cac cap so tiep theo cua day:
n = 0
91
Do
For k = sttd To sttc Step 1
a3 = xgt1(k)
a4 = xgt2(k)
c3 = zgt1(k)
c4 = zgt2(k)
d3 = vx(k)
e3 = vy(k)
f3 = vz(k)
If (a3 = a2 And c3 = c2) And (a4 <> a1 Or c4 <> c1) Then
Bangtinh.Cells(m, 13) = a3
Bangtinh.Cells(m + 1, 13) = a4
Bangtinh.Cells(m, 14) = yk
Bangtinh.Cells(m + 1, 14) = yk
Bangtinh.Cells(m, 15) = c3
Bangtinh.Cells(m + 1, 15) = c4
Bangtinh.Cells(m, 16) = d3
Bangtinh.Cells(m, 17) = e3
Bangtinh.Cells(m, 18) = f3
a1 = a3: a2 = a4
c1 = c3: c2 = c4
d1 = d3
e1 = e3
f1 = f3
m = m + 3
n = n + 1
Else
If (a4 = a2 And c4 = c2) And (a3 <> a1 Or c3 <> c1) Then
Bangtinh.Cells(m, 13) = a4
Bangtinh.Cells(m + 1, 13) = a3
Bangtinh.Cells(m, 14) = yk
Bangtinh.Cells(m + 1, 14) = yk
Bangtinh.Cells(m, 15) = c4
Bangtinh.Cells(m + 1, 15) = c3
Bangtinh.Cells(m, 16) = d3
Bangtinh.Cells(m, 17) = e3
Bangtinh.Cells(m, 18) = f3
92
a1 = a4: a2 = a3
c1 = c4: c2 = c3
d1 = d3
e1 = e3
f1 = f3
m = m + 3
n = n + 1
End If
End If
Next k
Loop While n < (sttc - sttd)
'============== Day giam dan:
sttd = sttc + 1 '----------so tt cua so dau tien trong day giam
sttc = sttd
Do
b1 = ygt1(sttc)
sttc = sttc + 1
Loop While Abs(b1 - (yk + 2 * d)) > 0.000001 And (sttc <= i + 1)
sttc = sttc - 2 '---------so tt cua so cuoi cung trong day
'------------------------------lay so dau cua day so:
a1 = xgt1(sttd)
a2 = xgt2(sttd)
c1 = zgt1(sttd)
c2 = zgt2(sttd)
d1 = vx(sttd)
e1 = vy(sttd)
f1 = vz(sttd)
'chuyen cho a1>a2:
If a2 > a1 Then
ap = a1: a1 = a2: a2 = ap
cp = c1: c1 = c2: c2 = cp
End If
For k = sttd + 1 To sttc Step 1
a3 = xgt1(k)
a4 = xgt2(k)
c3 = zgt1(k)
c4 = zgt2(k)
93
d3 = vx(k)
e3 = vy(k)
f3 = vz(k)
If (Abs(a1) + Abs(a2) + Abs(c1) + Abs(c2) <> 0) And a3 > a4 And a3 > a1
Then
a1 = a3: a2 = a4
c1 = c3: c2 = c4
d1 = d3
e1 = e3
f1 = f3
Else
If (Abs(a1) + Abs(a2) + Abs(c1) + Abs(c2) <> 0) And a4 <> a3 And a4 >
a1 Then
a1 = a4: a2 = a3
c1 = c4: c2 = c3
d1 = d3
e1 = e3
f1 = f3
End If
End If
Next k
If (Abs(a1) + Abs(a2) + Abs(c1) + Abs(c2) <> 0) Then 'luu bo so dau tien
Bangtinh.Cells(m, 13) = a1
Bangtinh.Cells(m + 1, 13) = a2
Bangtinh.Cells(m, 14) = yk + d
Bangtinh.Cells(m + 1, 14) = yk + d
Bangtinh.Cells(m, 15) = c1
Bangtinh.Cells(m + 1, 15) = c2
Bangtinh.Cells(m, 16) = d1
Bangtinh.Cells(m, 17) = e1
Bangtinh.Cells(m, 18) = f1
m = m + 3
End If
'----------tim cac cap so tiep theo cua day:
n = 0
Do
For k = sttd To sttc Step 1
94
a3 = xgt1(k)
a4 = xgt2(k)
c3 = zgt1(k)
c4 = zgt2(k)
d3 = vx(k)
e3 = vy(k)
f3 = vz(k)
If (a3 = a2 And c3 = c2) And (a4 <> a1 Or c4 <> c1) Then
Bangtinh.Cells(m, 13) = a3
Bangtinh.Cells(m + 1, 13) = a4
Bangtinh.Cells(m, 14) = yk + d
Bangtinh.Cells(m + 1, 14) = yk + d
Bangtinh.Cells(m, 15) = c3
Bangtinh.Cells(m + 1, 15) = c4
Bangtinh.Cells(m, 16) = d3
Bangtinh.Cells(m, 17) = e3
Bangtinh.Cells(m, 18) = f3
a1 = a3: a2 = a4
c1 = c3: c2 = c4
d1 = d3
e1 = e3
f1 = f3
m = m + 3
n = n + 1
Else
If (a4 = a2 And c4 = c2) And (a3 <> a1 Or c3 <> c1) Then
Bangtinh.Cells(m, 13) = a4
Bangtinh.Cells(m + 1, 13) = a3
Bangtinh.Cells(m, 14) = yk + d
Bangtinh.Cells(m + 1, 14) = yk + d
Bangtinh.Cells(m, 15) = c4
Bangtinh.Cells(m + 1, 15) = c3
Bangtinh.Cells(m, 16) = d3
Bangtinh.Cells(m, 17) = e3
Bangtinh.Cells(m, 18) = f3
a1 = a4: a2 = a3
c1 = c4: c2 = c3
95
d1 = d3
e1 = e3
f1 = f3
m = m + 3
n = n + 1
End If
End If
Next k
Loop While n < (sttc - sttd)
Next yk
End Sub
Sub Offset()

f = Val(txtRtool.Text) 'khoang cach offset
d = Val(txtdelta.Text)
'=================offset giao tuyen:
i = 4
Do While Abs(Bangtinh.Cells(i, 16)) + Abs(Bangtinh.Cells(i, 17)) +
Abs(Bangtinh.Cells(i, 18)) <> 0
vx = Bangtinh.Cells(i, 16)
vy = Bangtinh.Cells(i, 17)
vz = Bangtinh.Cells(i, 18)
xg1 = Bangtinh.Cells(i, 13)
xg2 = Bangtinh.Cells(i + 1, 13)
zg1 = Bangtinh.Cells(i, 15)
zg2 = Bangtinh.Cells(i + 1, 15)
If vx > 0 And vz > 0 Then
teta = Atn((zg2 - zg1) / (xg1 - xg2))
xf1 = xg1 + f * Sin(teta)
zf1 = zg1 + f * Cos(teta)
xf2 = xg2 + f * Sin(teta)
zf2 = zg2 + f * Cos(teta)
Else
If vx = 0 And vz > 0 Then
xf1 = xg1
zf1 = zg1 + f
xf2 = xg2
96
zf2 = zg2 + f
Else
If vx < 0 And vz > 0 Then
teta = Atn((zg1 - zg2) / (xg1 - xg2))
xf1 = xg1 - f * Sin(teta)
zf1 = zg1 + f * Cos(teta)
xf2 = xg2 - f * Sin(teta)
zf2 = zg2 + f * Cos(teta)
Else
If vx < 0 And vz < 0 Then
teta = Atn((zg1 - zg2) / (xg2 - xg1))
xf1 = xg1 - f * Sin(teta)
zf1 = zg1 - f * Cos(teta)
xf2 = xg2 - f * Sin(teta)
zf2 = zg2 - f * Cos(teta)
Else
If vx > 0 And vz < 0 Then
teta = Atn((zg2 - zg1) / (xg2 - xg1))
xf1 = xg1 + f * Sin(teta)
zf1 = zg1 - f * Cos(teta)
xf2 = xg2 + f * Sin(teta)
zf2 = zg2 - f * Cos(teta)
Else
If vx = 0 And vz < 0 Then
xf1 = xg1
zf1 = zg1 - f
xf2 = xg2
zf2 = zg2 - f
Else
If vx > 0 And vz = 0 Then
xf1 = xg1 + f
zf1 = zg1
xf2 = xg2 + f
zf2 = zg2
Else
'vx < 0 And vz = 0
xf1 = xg1 - f
97
zf1 = zg1
xf2 = xg2 - f
zf2 = zg2
End If
End If
End If
End If
End If
End If
End If
'----------------luu toa do offset:
Bangtinh.Cells(i, 19) = xf1
Bangtinh.Cells(i + 1, 19) = xf2
Bangtinh.Cells(i, 20) = Bangtinh.Cells(i, 14)
Bangtinh.Cells(i + 1, 20) = Bangtinh.Cells(i + 1, 14)
Bangtinh.Cells(i, 21) = zf1
Bangtinh.Cells(i + 1, 21) = zf2
i = i + 3
Loop
End Sub

Sub XuLyLine()
Dim vx1 As Double
Dim vx2 As Double
Dim vy1 As Double
Dim vy2 As Double
m = 16
j = 4
i = 4
Do While Abs(Bangtinh.Cells(i, m)) + Abs(Bangtinh.Cells(i, m + 1)) +
Abs(Bangtinh.Cells(i, m + 2)) <> 0
vx1 = Bangtinh.Cells(i, m)
vy1 = Bangtinh.Cells(i, m + 1)
vz1 = Bangtinh.Cells(i, m + 2)
x1 = Bangtinh.Cells(i, m + 3)
x2 = Bangtinh.Cells(i + 1, m + 3)
y1 = Bangtinh.Cells(i, m + 4)
98
z1 = Bangtinh.Cells(i, m + 5)
z2 = Bangtinh.Cells(i + 1, m + 5)

vx2 = Bangtinh.Cells(i + 3, m)
vy2 = Bangtinh.Cells(i + 3, m + 1)
vz2 = Bangtinh.Cells(i + 3, m + 2)
y3 = Bangtinh.Cells(i + 3, m + 4)
x3 = Bangtinh.Cells(i + 3, m + 3)
x4 = Bangtinh.Cells(i + 4, m + 3)
z3 = Bangtinh.Cells(i + 3, m + 5)
z4 = Bangtinh.Cells(i + 4, m + 5)
Do While vx2 = vx1 And vy2 = vy1 And vz2 = vz1 And y3 = y1
i = i + 3
x2 = x4: y2 = y4: z2 = z4
vx2 = Bangtinh.Cells(i + 3, m)
vy2 = Bangtinh.Cells(i + 3, m + 1)
vz2 = Bangtinh.Cells(i + 3, m + 2)
x3 = Bangtinh.Cells(i + 3, m + 3)
x4 = Bangtinh.Cells(i + 4, m + 3)
y3 = Bangtinh.Cells(i + 3, m + 4)
z3 = Bangtinh.Cells(i + 3, m + 5)
z4 = Bangtinh.Cells(i + 4, m + 5)
Loop
i = i + 3
Bangtinh.Cells(j, 22) = vx1
Bangtinh.Cells(j, 23) = vy1
Bangtinh.Cells(j, 24) = vz1
Bangtinh.Cells(j, 25) = x1
Bangtinh.Cells(j + 1, 25) = x2
Bangtinh.Cells(j, 26) = y1
Bangtinh.Cells(j + 1, 26) = y1
Bangtinh.Cells(j, 27) = z1
Bangtinh.Cells(j + 1, 27) = z2
j = j + 3

vx1 = vx2: vy1 = vy2: vz1 = vz2
x1 = x3: x2 = x4
99
y1 = y3
z1 = z3: z2 = z4
Loop
End Sub

Sub XuLyOverlap()
l = 4
Do While Abs(Bangtinh.Cells(l, 22)) + Abs(Bangtinh.Cells(l, 23)) +
Abs(Bangtinh.Cells(l, 24)) <> 0
l = l + 3
Loop
l = l - 3
ykmin = Bangtinh.Cells(4, 26)
ykmax = Bangtinh.Cells(l, 26)
d = Val(txtdelta.Text)
For yk = ykmin To ykmax Step d
i = 4 '--------so tt cua so dau tien trong day
Do While Abs(Bangtinh.Cells(i, 26) - yk) > 0.0000001
i = i + 3
Loop
j = i
Do While Abs(Bangtinh.Cells(j, 26) - (yk + d)) > 0.0000001 And j <= l
j = j + 3
Loop
j = j - 3 '----------so tt cua so cuoi cung trong day
'-----neu doan 1 va 5 giao nhau:
For v = i To j Step 3
x1 = Bangtinh.Cells(v, 25)
x2 = Bangtinh.Cells(v + 1, 25)
z1 = Bangtinh.Cells(v, 27)
z2 = Bangtinh.Cells(v + 1, 27)
x9 = Bangtinh.Cells(v + 12, 25)
x10 = Bangtinh.Cells(v + 13, 25)
y9 = Bangtinh.Cells(v + 12, 26)
z9 = Bangtinh.Cells(v + 12, 27)
z10 = Bangtinh.Cells(v + 13, 27)
100
If x9 <> 0 And x10 <> 0 And x1 <> 0 And x2 <> 0 And x1 <> x2 And x9
<> x10 And y9 = yk Then
If (((z1 - z2) / (x1 - x2)) - ((z9 - z10) / (x9 - x10))) <> 0 Then
xg = (x2 * ((z1 - z2) / (x1 - x2)) - x10 * ((z9 - z10) / (x9 - x10)) - z2 +
z10) / (((z1 - z2) / (x1 - x2)) - ((z9 - z10) / (x9 - x10)))
zg = xg * ((z9 - z10) / (x9 - x10)) - x10 * ((z9 - z10) / (x9 - x10)) + z10
If (x1 - xg) * (x2 - xg) < 0 And (x9 - xg) * (x10 - xg) < 0 Then
Bangtinh.Cells(v + 1, 25) = xg
Bangtinh.Cells(v + 12, 25) = xg
Bangtinh.Cells(v + 1, 27) = zg
Bangtinh.Cells(v + 12, 27) = zg

Bangtinh.Cells(v + 3, 25) = ""
Bangtinh.Cells(v + 4, 25) = ""
Bangtinh.Cells(v + 6, 25) = ""
Bangtinh.Cells(v + 7, 25) = ""
Bangtinh.Cells(v + 9, 25) = ""
Bangtinh.Cells(v + 10, 25) = ""
Bangtinh.Cells(v + 3, 26) = ""
Bangtinh.Cells(v + 4, 26) = ""
Bangtinh.Cells(v + 6, 26) = ""
Bangtinh.Cells(v + 7, 26) = ""
Bangtinh.Cells(v + 9, 26) = ""
Bangtinh.Cells(v + 10, 26) = ""
Bangtinh.Cells(v + 3, 27) = ""
Bangtinh.Cells(v + 4, 27) = ""
Bangtinh.Cells(v + 6, 27) = ""
Bangtinh.Cells(v + 7, 27) = ""
Bangtinh.Cells(v + 9, 27) = ""
Bangtinh.Cells(v + 10, 27) = ""
End If
End If
End If
Next v
'-----neu doan 1 va 4 giao nhau:
For v = i To j Step 3
x1 = Bangtinh.Cells(v, 25)
101
x2 = Bangtinh.Cells(v + 1, 25)
z1 = Bangtinh.Cells(v, 27)
z2 = Bangtinh.Cells(v + 1, 27)
x7 = Bangtinh.Cells(v + 9, 25)
x8 = Bangtinh.Cells(v + 10, 25)
y7 = Bangtinh.Cells(v + 9, 26)
z7 = Bangtinh.Cells(v + 9, 27)
z8 = Bangtinh.Cells(v + 10, 27)
If x7 <> 0 And x8 <> 0 And x1 <> 0 And x2 <> 0 And x1 <> x2 And x7 <>
x8 And y7 = yk Then
If (((z1 - z2) / (x1 - x2)) - ((z7 - z8) / (x7 - x8))) <> 0 Then
xg = (x2 * ((z1 - z2) / (x1 - x2)) - x8 * ((z7 - z8) / (x7 - x8)) - z2 + z8)
/ ((z1 - z2) / (x1 - x2)) - ((z7 - z8) / (x7 - x8)))
zg = xg * ((z7 - z8) / (x7 - x8)) - x8 * ((z7 - z8) / (x7 - x8)) + z8
If (x1 - xg) * (x2 - xg) < 0 And (x7 - xg) * (x8 - xg) < 0 Then
Bangtinh.Cells(v + 1, 25) = xg
Bangtinh.Cells(v + 9, 25) = xg
Bangtinh.Cells(v + 1, 27) = zg
Bangtinh.Cells(v + 9, 27) = zg

Bangtinh.Cells(v + 3, 25) = ""
Bangtinh.Cells(v + 4, 25) = ""
Bangtinh.Cells(v + 6, 25) = ""
Bangtinh.Cells(v + 7, 25) = ""
Bangtinh.Cells(v + 3, 26) = ""
Bangtinh.Cells(v + 4, 26) = ""
Bangtinh.Cells(v + 6, 26) = ""
Bangtinh.Cells(v + 7, 26) = ""
Bangtinh.Cells(v + 3, 27) = ""
Bangtinh.Cells(v + 4, 27) = ""
Bangtinh.Cells(v + 6, 27) = ""
Bangtinh.Cells(v + 7, 27) = ""
End If
End If
End If
Next v
'---------------neu doan 1 va 3 giao nhau:
102
For v = i To j Step 3
x1 = Bangtinh.Cells(v, 25)
x2 = Bangtinh.Cells(v + 1, 25)
x3 = Bangtinh.Cells(v + 3, 25)
x4 = Bangtinh.Cells(v + 4, 25)
x5 = Bangtinh.Cells(v + 6, 25)
x6 = Bangtinh.Cells(v + 7, 25)
y1 = Bangtinh.Cells(v, 26)
y3 = Bangtinh.Cells(v + 3, 26)
y5 = Bangtinh.Cells(v + 6, 26)
z1 = Bangtinh.Cells(v, 27)
z2 = Bangtinh.Cells(v + 1, 27)
z3 = Bangtinh.Cells(v + 3, 27)
z4 = Bangtinh.Cells(v + 4, 27)
z5 = Bangtinh.Cells(v + 6, 27)
z6 = Bangtinh.Cells(v + 7, 27)

If x5 <> 0 And x6 <> 0 And x1 <> 0 And x2 <> 0 And x1 <> x2 And x5 <>
x6 And y5 = yk Then
If (((z1 - z2) / (x1 - x2)) - ((z5 - z6) / (x5 - x6))) <> 0 Then
xg = (x2 * ((z1 - z2) / (x1 - x2)) - x6 * ((z5 - z6) / (x5 - x6)) - z2 + z6)
/ (((z1 - z2) / (x1 - x2)) - ((z5 - z6) / (x5 - x6)))
zg = xg * ((z5 - z6) / (x5 - x6)) - x6 * ((z5 - z6) / (x5 - x6)) + z6
End If
End If
'--------neu doan 1 va 3 giao nhau:
If (x1 - xg) * (x2 - xg) < 0 And (x5 - xg) * (x6 - xg) < 0 And xg <> 0 And zg
<> 0 Then
Bangtinh.Cells(v + 1, 25) = xg
Bangtinh.Cells(v + 6, 25) = xg
Bangtinh.Cells(v + 1, 27) = zg
Bangtinh.Cells(v + 6, 27) = zg
'---------------loai bo doan 2:
Bangtinh.Cells(v + 3, 25) = ""
Bangtinh.Cells(v + 4, 25) = ""
Bangtinh.Cells(v + 3, 26) = ""
Bangtinh.Cells(v + 4, 26) = ""
103
Bangtinh.Cells(v + 3, 27) = ""
Bangtinh.Cells(v + 4, 27) = ""
Else
If x1 <> 0 And x2 <> 0 And x1 <> x2 And x3 <> 0 And x4 <> 0 And x3
<> x4 Then
If (((z1 - z2) / (x1 - x2)) - ((z3 - z4) / (x3 - x4))) <> 0 Then
xg = (x2 * ((z1 - z2) / (x1 - x2)) - x4 * ((z3 - z4) / (x3 - x4)) - z2 +
z4) / (((z1 - z2) / (x1 - x2)) - ((z3 - z4) / (x3 - x4)))
zg = xg * ((z3 - z4) / (x3 - x4)) - x4 * ((z3 - z4) / (x3 - x4)) + z4
'neu doan 1 va 2 giao nhau:
If (x1 - xg) * (x2 - xg) < 0 And (x3 - xg) * (x4 - xg) < 0 Then
Bangtinh.Cells(v + 1, 25) = xg
Bangtinh.Cells(v + 3, 25) = xg

Bangtinh.Cells(v + 1, 27) = zg
Bangtinh.Cells(v + 3, 27) = zg
End If
End If
End If
End If
Next v
'doan 1,2,3 ko giao nhau;doan 3 nam giua 1va2:
For v = i To j Step 3
x2 = Bangtinh.Cells(v + 1, 25)
x3 = Bangtinh.Cells(v + 3, 25)
x5 = Bangtinh.Cells(v + 6, 25)
x6 = Bangtinh.Cells(v + 7, 25)
y6 = Bangtinh.Cells(v + 7, 26)
z2 = Bangtinh.Cells(v + 1, 27)
z3 = Bangtinh.Cells(v + 3, 27)
z5 = Bangtinh.Cells(v + 6, 27)
z6 = Bangtinh.Cells(v + 7, 27)
If x5 <> 0 And x6 <> 0 And x2 <> 0 And x3 <> 0 And x2 <> x3 And x5 <>
x6 And y6 = yk Then
If (((z2 - z3) / (x2 - x3)) - ((z5 - z6) / (x5 - x6))) <> 0 Then
xg = (x3 * ((z2 - z3) / (x2 - x3)) - x6 * ((z5 - z6) / (x5 - x6)) - z3 + z6)
/ (((z2 - z3) / (x2 - x3)) - ((z5 - z6) / (x5 - x6)))
104
zg = xg * ((z5 - z6) / (x5 - x6)) - x6 * ((z5 - z6) / (x5 - x6)) + z6
If (x2 - xg) * (x3 - xg) < 0 And (x5 - xg) * (x6 - xg) < 0 Then
Bangtinh.Cells(v + 1, 25) = xg
Bangtinh.Cells(v + 6, 25) = xg
Bangtinh.Cells(v + 1, 27) = zg
Bangtinh.Cells(v + 6, 27) = zg

Bangtinh.Cells(v + 3, 25) = ""
Bangtinh.Cells(v + 4, 25) = ""
Bangtinh.Cells(v + 3, 26) = ""
Bangtinh.Cells(v + 4, 26) = ""
Bangtinh.Cells(v + 3, 27) = ""
Bangtinh.Cells(v + 4, 27) = ""
End If
End If
End If
Next v
'neu doan 1,2,3 ko giao nhau;doan 1 nam giua 2,3:
For v = i To j Step 3
x1 = Bangtinh.Cells(v, 25)
x2 = Bangtinh.Cells(v + 1, 25)
x3 = Bangtinh.Cells(v + 3, 25)
x4 = Bangtinh.Cells(v + 4, 25)
x5 = Bangtinh.Cells(v + 6, 25)
x6 = Bangtinh.Cells(v + 7, 25)
y5 = Bangtinh.Cells(v + 6, 26)
z1 = Bangtinh.Cells(v, 27)
z2 = Bangtinh.Cells(v + 1, 27)
z4 = Bangtinh.Cells(v + 4, 27)
z5 = Bangtinh.Cells(v + 6, 27)
If x5 <> 0 And x6 <> 0 And x1 <> 0 And x2 <> 0 And y5 = yk And x1 <>
x2 And x5 <> x4 Then
If (((z1 - z2) / (x1 - x2)) - ((z5 - z4) / (x5 - x4))) <> 0 Then
xg = (x2 * ((z1 - z2) / (x1 - x2)) - x4 * ((z5 - z4) / (x5 - x4)) - z2 + z4)
/ (((z1 - z2) / (x1 - x2)) - ((z5 - z4) / (x5 - x4)))
zg = xg * ((z5 - z4) / (x5 - x4)) - x4 * ((z5 - z4) / (x5 - x4)) + z4
If (x1 - xg) * (x2 - xg) < 0 And (x4 - xg) * (x5 - xg) < 0 Then
105
Bangtinh.Cells(v + 1, 25) = xg
Bangtinh.Cells(v + 6, 25) = xg
Bangtinh.Cells(v + 1, 27) = zg
Bangtinh.Cells(v + 6, 27) = zg
Bangtinh.Cells(v + 3, 25) = ""
Bangtinh.Cells(v + 4, 25) = ""
Bangtinh.Cells(v + 3, 26) = ""
Bangtinh.Cells(v + 4, 26) = ""
Bangtinh.Cells(v + 3, 27) = ""
Bangtinh.Cells(v + 4, 27) = ""
End If
End If
End If
Next v
Next yk
'---------Don du lieu:
m = 4
For i = 4 To l Step 3
x1 = Bangtinh.Cells(i, 25)
y1 = Bangtinh.Cells(i, 26)
z1 = Bangtinh.Cells(i, 27)
If Abs(x1) + Abs(y1) + Abs(z1) <> 0 Then
Bangtinh.Cells(m, 22) = Bangtinh.Cells(i, 22)
Bangtinh.Cells(m, 23) = Bangtinh.Cells(i, 23)
Bangtinh.Cells(m, 24) = Bangtinh.Cells(i, 24)
Bangtinh.Cells(m, 25) = Bangtinh.Cells(i, 25)
Bangtinh.Cells(m + 1, 25) = Bangtinh.Cells(i + 1, 25)
Bangtinh.Cells(m, 26) = Bangtinh.Cells(i, 26)
Bangtinh.Cells(m + 1, 26) = Bangtinh.Cells(i + 1, 26)
Bangtinh.Cells(m, 27) = Bangtinh.Cells(i, 27)
Bangtinh.Cells(m + 1, 27) = Bangtinh.Cells(i + 1, 27)
m = m + 3
End If
Next i
For i = m To l Step 3
Bangtinh.Cells(i, 22) = ""
Bangtinh.Cells(i, 23) = ""
106
Bangtinh.Cells(i, 24) = ""
Bangtinh.Cells(i, 25) = ""
Bangtinh.Cells(i + 1, 25) = ""
Bangtinh.Cells(i, 26) = ""
Bangtinh.Cells(i + 1, 26) = ""
Bangtinh.Cells(i, 27) = ""
Bangtinh.Cells(i + 1, 27) = ""
Next i
End Sub
Sub XuLyGap()
l = 4
Do While Abs(Bangtinh.Cells(l, 22)) + Abs(Bangtinh.Cells(l, 23)) +
Abs(Bangtinh.Cells(l, 24)) <> 0
l = l + 3
Loop
l = l - 3
ykmin = Bangtinh.Cells(4, 26)
ykmax = Bangtinh.Cells(l, 26)
d = Val(txtdelta.Text)
For yk = ykmin To ykmax Step d
i = 4 'so tt cua so dau tien trong day
Do While Abs(Bangtinh.Cells(i, 26) - yk) > 0.0000001
i = i + 3
Loop
j = i
Do While Abs(Bangtinh.Cells(j, 26) - (yk + d)) > 0.0000001 And j <= l
j = j + 3
Loop
j = j - 3 'so tt cua so cuoi cung trong day
For v = i To j - 3 Step 3
x1 = Bangtinh.Cells(v, 25)
x2 = Bangtinh.Cells(v + 1, 25)
x3 = Bangtinh.Cells(v + 3, 25)
x4 = Bangtinh.Cells(v + 4, 25)
z1 = Bangtinh.Cells(v, 27)
z2 = Bangtinh.Cells(v + 1, 27)
z3 = Bangtinh.Cells(v + 3, 27)
107
z4 = Bangtinh.Cells(v + 4, 27)
If x2 <> x3 And (((z1 - z2) / (x1 - x2)) - ((z3 - z4) / (x3 - x4))) <> 0 Then
xg = (x2 * ((z1 - z2) / (x1 - x2)) - x4 * ((z3 - z4) / (x3 - x4)) - z2 + z4) /
(((z1 - z2) / (x1 - x2)) - ((z3 - z4) / (x3 - x4)))
zg = xg * ((z3 - z4) / (x3 - x4)) - x4 * ((z3 - z4) / (x3 - x4)) + z4
x2 = xg: x3 = xg
z2 = zg: z3 = zg
'keo dai cho doan 1 va doan 2 giao nhau:
Bangtinh.Cells(v + 1, 25) = x2
Bangtinh.Cells(v + 1, 27) = z2

Bangtinh.Cells(v + 3, 25) = x3
Bangtinh.Cells(v + 3, 27) = z3
End If
Next v
Next yk
End Sub

Sub CL_Data()
Bangtinh.Cells(4, 28) = Bangtinh.Cells(4, 22)
Bangtinh.Cells(4, 29) = Bangtinh.Cells(4, 23)
Bangtinh.Cells(4, 30) = Bangtinh.Cells(4, 24)
Bangtinh.Cells(4, 31) = Bangtinh.Cells(4, 25)
Bangtinh.Cells(4, 32) = Bangtinh.Cells(4, 26)
Bangtinh.Cells(4, 33) = Bangtinh.Cells(4, 27)
i = 7
j = 5
Do While Abs(Bangtinh.Cells(i, 22)) + Abs(Bangtinh.Cells(i, 23)) +
Abs(Bangtinh.Cells(i, 24)) <> 0
If Bangtinh.Cells(i, 25) = Bangtinh.Cells(i - 2, 25) And Bangtinh.Cells(i, 26) _
= Bangtinh.Cells(i - 2, 26) And Bangtinh.Cells(i, 27) = Bangtinh.Cells(i - 2, 27)
Then
Bangtinh.Cells(j, 28) = Bangtinh.Cells(i, 22)
Bangtinh.Cells(j, 29) = Bangtinh.Cells(i, 23)
Bangtinh.Cells(j, 30) = Bangtinh.Cells(i, 24)
Bangtinh.Cells(j, 31) = Bangtinh.Cells(i, 25)
Bangtinh.Cells(j, 32) = Bangtinh.Cells(i, 26)
108
Bangtinh.Cells(j, 33) = Bangtinh.Cells(i, 27)
j = j + 1
i = i + 3
Else
Bangtinh.Cells(j, 28) = Bangtinh.Cells(i - 3, 22)
Bangtinh.Cells(j, 29) = Bangtinh.Cells(i - 3, 23)
Bangtinh.Cells(j, 30) = Bangtinh.Cells(i - 3, 24)
Bangtinh.Cells(j, 31) = Bangtinh.Cells(i - 2, 25)
Bangtinh.Cells(j, 32) = Bangtinh.Cells(i - 2, 26)
Bangtinh.Cells(j, 33) = Bangtinh.Cells(i - 2, 27)

Bangtinh.Cells(j + 1, 28) = Bangtinh.Cells(i, 22)
Bangtinh.Cells(j + 1, 29) = Bangtinh.Cells(i, 23)
Bangtinh.Cells(j + 1, 30) = Bangtinh.Cells(i, 24)
Bangtinh.Cells(j + 1, 31) = Bangtinh.Cells(i, 25)
Bangtinh.Cells(j + 1, 32) = Bangtinh.Cells(i, 26)
Bangtinh.Cells(j + 1, 33) = Bangtinh.Cells(i, 27)
j = j + 2
i = i + 3
End If
Loop
Bangtinh.Cells(j, 28) = Bangtinh.Cells(i - 3, 22)
Bangtinh.Cells(j, 29) = Bangtinh.Cells(i - 3, 23)
Bangtinh.Cells(j, 30) = Bangtinh.Cells(i - 3, 24)
Bangtinh.Cells(j, 31) = Bangtinh.Cells(i - 2, 25)
Bangtinh.Cells(j, 32) = Bangtinh.Cells(i - 2, 26)
Bangtinh.Cells(j, 33) = Bangtinh.Cells(i - 2, 27)
End Sub

Sub LamTron2()
Dim xcl(0 To 65000) As Double
Dim ycl(0 To 65000) As Double
Dim zcl(0 To 65000) As Double
Dim vxcl(0 To 65000) As Double
Dim vycl(0 To 65000) As Double
Dim vzcl(0 To 65000) As Double

109
v = 4
m = 31
i = 1
Do
xcl(i) = Bangtinh.Cells(v, m)
ycl(i) = Bangtinh.Cells(v, m + 1)
zcl(i) = Bangtinh.Cells(v, m + 2)
vxcl(i) = Bangtinh.Cells(v, m - 3)
vycl(i) = Bangtinh.Cells(v, m - 2)
vzcl(i) = Bangtinh.Cells(v, m - 1)
v = v + 1
i = i + 1
Loop While Abs(vxcl(i - 1)) + Abs(vycl(i - 1)) + Abs(vzcl(i - 1)) > 0
i = i - 2
v = 1
Do While v < i + 1
x1 = xcl(v)
y1 = ycl(v)
z1 = zcl(v)
a1 = vxcl(v)
b1 = vycl(v)
c1 = vzcl(v)

x2 = xcl(v + 1)
y2 = ycl(v + 1)
z2 = zcl(v + 1)
a2 = vxcl(v + 1)
b2 = vycl(v + 1)
c2 = vzcl(v + 1)

x3 = xcl(v + 2)
y3 = ycl(v + 2)
z3 = zcl(v + 2)
a3 = vxcl(v + 2)
b3 = vycl(v + 2)
c3 = vzcl(v + 2)

110
Do While (Abs((x1 - x2) * (z3 - z2) - (z1 - z2) * (x3 - x2)) _
/ (Sqr((x3 - x1) ^ 2 + (z3 - z1) ^ 2))) < 0.01 And y1 = y3 And y2 = y3
v = v + 1
xcl(v) = 0
ycl(v) = 0
zcl(v) = 0
vxcl(v) = 0
vycl(v) = 0
vzcl(v) = 0

x2 = xcl(v + 1)
y2 = ycl(v + 1)
z2 = zcl(v + 1)
a2 = vxcl(v + 1)
b2 = vycl(v + 1)
c2 = vzcl(v + 1)

x3 = xcl(v + 2)
y3 = ycl(v + 2)
z3 = zcl(v + 2)
a3 = vxcl(v + 2)
b3 = vycl(v + 2)
c3 = vzcl(v + 2)
Loop
v = v + 1
Loop
'=====luu lai du lieu
m = 37
n = 4
For v = 1 To i Step 1
If Abs(vxcl(v)) + Abs(vycl(v)) + Abs(vzcl(v)) > 0 Then
Bangtinh.Cells(n, m) = xcl(v)
Bangtinh.Cells(n, m + 1) = ycl(v)
Bangtinh.Cells(n, m + 2) = zcl(v)
Bangtinh.Cells(n, m - 3) = vxcl(v)
Bangtinh.Cells(n, m - 2) = vycl(v)
Bangtinh.Cells(n, m - 1) = vzcl(v)
111
n = n + 1
End If
Next v

End Sub
Sub G_Code()
Dim a(0 To 2) As String
Dim j10 As String
Dim i As Long

Open App.Path & "\G_code.txt" For Output As #1
Print #1, Space(0); "%PM"
Print #1, "N70012"
Print #1, "N100 S3000 T21 M6"
m = 37
i = 4
Do While Abs(Bangtinh.Cells(i, m - 3)) + Abs(Bangtinh.Cells(i, m - 2)) +
Abs(Bangtinh.Cells(i, m - 1)) <> 0
a(0) = Str(Bangtinh.Cells(i, m))
a(1) = Str(Bangtinh.Cells(i, m + 1))
a(2) = Str(Bangtinh.Cells(i, m + 2))
j10 = "N" + LTrim(Str(100 + i * 5))
Print #1, Space(0); j10; " G01 X"; Left(a(0), 7); " Y"; Left(a(1), 7); " Z";
Left(a(2), 8) '; " A"; Left(a(3), 8); " B"; Left(a(4), 7)
'End If
i = i + 1
Loop
Close #1
End Sub

Sub MoPhong()
On Error Resume Next
' Ket noi AutoCAD
Dim acadApp As AcadApplication
Set acadApp = GetObject(, "AutoCAD.Application.16")
If Err Then
Err.Clear
112
Set acadApp = CreateObject("AutoCAD.Application.16")
If Err Then
MsgBox Err.Description
Exit Sub
End If
End If
' Ket noi ban ve
Dim acadDoc As AcadDocument
Set acadDoc = acadApp.ActiveDocument
' Khai bao doi tuong dao
Dim lineObj As AcadLine
Dim startPoint(0 To 2) As Double
Dim endPoint(0 To 2) As Double
Dim startPoint2(0 To 2) As Double
Dim endPoint2(0 To 2) As Double
m = 37
i = 4
l = 3
Do While (Abs(Bangtinh.Cells(i, m - 3)) + Abs(Bangtinh.Cells(i, m - 2)) +
Abs(Bangtinh.Cells(i, m - 1))) <> 0
l = l + 1
i = i + 1
Loop

For i = 4 To l - 1 Step 1
acadApp.Visible = True
ZoomAll
'xoa line dao:
lineObj.Delete
'line 1-2
startPoint(0) = Bangtinh.Cells(i, m)
startPoint(1) = Bangtinh.Cells(i, m + 1)
startPoint(2) = Bangtinh.Cells(i, m + 2)

endPoint(0) = Bangtinh.Cells(i + 1, m)
endPoint(1) = Bangtinh.Cells(i + 1, m + 1)
endPoint(2) = Bangtinh.Cells(i + 1, m + 2)
113

Set lineObj = acadDoc.ModelSpace.AddLine(startPoint, endPoint)
lineObj.Color = acGreen
'mo phong dao
startPoint2(0) = endPoint(0)
startPoint2(1) = endPoint(1)
startPoint2(2) = endPoint(2)

endPoint2(0) = startPoint2(0) + 12 * Bangtinh.Cells(i, m - 3)
endPoint2(1) = startPoint2(1) + 12 * Bangtinh.Cells(i, m - 2)
endPoint2(2) = startPoint2(2) + 12 * Bangtinh.Cells(i, m - 1)
Set lineObj = acadDoc.ModelSpace.AddLine(startPoint2, endPoint2)
lineObj.Color = acRed

Next i
acadDoc.SaveAs App.Path & "\" & CStr(Month(Date)) & "-" & CStr(Day(Date)) & "-"
& CStr(Year(Date)) & "_" & CStr(Hour(Time)) & "-" & CStr(Minute(Time)) + ".dwg"
End Sub


Private Sub Kiem_tra_Click()
On Error Resume Next
' Ket noi AutoCAD
Dim acadApp As AcadApplication
Set acadApp = GetObject(, "AutoCAD.Application.16")
If Err Then
Err.Clear
Set acadApp = CreateObject("AutoCAD.Application.16")
If Err Then
MsgBox Err.Description
Exit Sub
End If
End If
' Ket noi ban ve
Dim acadDoc As AcadDocument
Set acadDoc = acadApp.ActiveDocument
Dim lineObj As AcadLine
114
Dim startPoint(0 To 2) As Double
Dim endPoint(0 To 2) As Double
XlsFilename = "matcong4pppp.xls"
XlsSheetname = "Sheet1"
Dim i As Double
Dim j As Integer
Dim x1 As Double
Dim x2 As Double
Dim y1 As Double
Dim y2 As Double
Dim z1 As Double
Dim z2 As Double

Call Ketnoi_Excel(XlsFilename, XlsSheetname)
i = 4
j = 25
x1 = Bangtinh.Cells(i, j)
y1 = Bangtinh.Cells(i, j + 1)
z1 = Bangtinh.Cells(i, j + 2)
x2 = Bangtinh.Cells(i + 1, j)
y2 = Bangtinh.Cells(i + 1, j + 1)
z2 = Bangtinh.Cells(i + 1, j + 2)
Do
'--------ve---------
startPoint(0) = x1
startPoint(1) = y1
startPoint(2) = z1

endPoint(0) = x2
endPoint(1) = y2
endPoint(2) = z2
Set lineObj = acadDoc.ModelSpace.AddLine(startPoint, endPoint)
lineObj.Color = acRed
i = i + 3
x1 = Bangtinh.Cells(i, j)
y1 = Bangtinh.Cells(i, j + 1)
z1 = Bangtinh.Cells(i, j + 2)
115
x2 = Bangtinh.Cells(i + 1, j)
y2 = Bangtinh.Cells(i + 1, j + 1)
z2 = Bangtinh.Cells(i + 1, j + 2)
Loop While (Abs(x1) + Abs(y1) + Abs(z1) + Abs(x2) + Abs(y2) + Abs(z2)) <> 0

acadApp.Visible = True
ZoomAll
acadDoc.SaveAs App.Path & "\" & CStr(Month(Date)) & "-" & CStr(Day(Date)) &"-"
& CStr(Year(Date)) & "_" & CStr(Hour(Time)) & "-" & CStr(Minute(Time)) + ".dwg"
End Sub

'==========Module ket noi Visual Basic voi Excel:
Option Explicit
Public Excelapp As Object 'excel.Application
Public ExcelWB As Object 'excel.Workbook
Public ExcelWSh As Object 'excel.Worksheets
Public Bangtinh As Object 'excel.Worksheet
Public XlsFilename As String
Public XlsSheetname As String
Sub Ketnoi_Excel(ByVal XlsFile, ByVal XlsSheet)
Set Excelapp = GetObject(App.Path & "\" & XlsFile)
Set ExcelWB = Excelapp.Application.Workbooks(XlsFile)
Set ExcelWSh = ExcelWB.Sheets(XlsSheet)
Set Bangtinh = ExcelWSh.Rows
End Sub
Sub HuyKetnoi_Excel()
ExcelWB.Close
Set Excelapp = Nothing
Set ExcelWB = Nothing
End Sub
Public Function GetExcel(ByVal i&, ByVal j&) As Double
Call Ketnoi_Excel(XlsFilename, XlsSheetname)
GetExcel = Bangtinh.Cells(i, j)
Call HuyKetnoi_Excel
End Function
Public Sub PutExcel(ByVal i&, ByVal j&, ByVal data As Double)
Call Ketnoi_Excel(XlsFilename, XlsSheetname)
116
Bangtinh.Cells(i, j) = data
ExcelWB.Save
Call HuyKetnoi_Excel
End Sub
Public Sub OpenExel()
Dim MyXL As Object
Dim ExcelWasNotRunning As Boolean
On Error Resume Next
Set MyXL = GetObject("", "Excel.Application")
If Err.Number <> 0 Then ExcelWasNotRunning = True
Err.Clear
If ExcelWasNotRunning = True Then
MyXL.Application.Quit
Exit Sub
End If
Set MyXL = GetObject(App.Path & "\" & XlsFilename)
MyXL.Application.Visible = True
MyXL.Parent.Windows(1).Visible = True
MyXL.Worksheets(XlsSheetname).Visible = True
MyXL.Worksheets(XlsSheetname).Activate
End Sub






117
Ph lc 2. Chng trnh tnh ton qu o chy dao theo phng
php ng tham s.
- Giao din ca chng trnh tnh ton qu o chy dao theo
phng php ng tham s:

Hnh p.2: Giao din tnh ton qu o chy dao theo phng php ng
tham s
Option Explicit
Private Sub Cmd_CC_Click()
Call thamso
End Sub

Private Sub cmdCl_Click()
Dim i As Integer
Dim lineObj As AcadLine
startpoint(0) = excelsheet6.cells(1, 5)
startpoint(1) = excelsheet6.cells(1, 6)
startpoint(2) = excelsheet6.cells(1, 7)
i = 2
While excelsheet8.cells(i, 9) <> ""
endpoint(0) = excelsheet7.cells(i, 1)
endpoint(1) = excelsheet7.cells(i, 2)
endpoint(2) = excelsheet7.cells(i, 3)
Set lineObj = dra.ModelSpace.AddLine(startpoint, endpoint)
lineObj.Color = acCyan
118
startpoint(0) = endpoint(0): startpoint(1) = endpoint(1): startpoint(2) =
endpoint(2)
i = i + 1
Wend
End Sub

Private Sub CmdCL_data_Click()
Dim i, j As Integer
Dim i1 As Integer
Dim dem As Integer
dem = 0
Dim imax As Integer
u_cc(1) = excelsheet8.cells(1, 6)
v_cc(1) = excelsheet8.cells(1, 7)
Call mat_phang_diem(u_cc(1), v_cc(1))
CC_P(1).x = S.x
CC_P(1).y = S.y
CC_P(1).z = S.z
i = 2
j = 2
While excelsheet8.cells(j, 6) <> ""
u_cc(i) = excelsheet8.cells(j, 6)
v_cc(i) = excelsheet8.cells(j, 7)
If u_cc(i) <> u_cc(i - 1) Or v_cc(i) <> v_cc(i - 1) Then
Call mat_phang_diem(u_cc(i), v_cc(i))
CC_P(i).x = S.x
CC_P(i).y = S.y
CC_P(i).z = S.z
t(i) = phuongdao
CL(i).x = CC_P(i).x + R2 * t(i).x
CL(i).y = CC_P(i).y + R2 * t(i).y
CL(i).z = CC_P(i).z + R2 * t(i).z
excelsheet3.cells(i, 9) = CL(i).x
excelsheet3.cells(i, 10) = CL(i).y
excelsheet3.cells(i, 11) = CL(i).z
excelsheet3.cells(i, 12) = excelsheet7.cells(j, 7)
excelsheet3.cells(i, 13) = t(i).x
119
excelsheet3.cells(i, 14) = t(i).y
excelsheet3.cells(i, 15) = t(i).z
i = i + 1
End If
j = j + 1
Wend
End Sub
Private Sub CmdKetThuc_Click()
End
End Sub
Private Sub CmdTest_Click()
Call delta_v
End Sub

Private Sub CmdVemat_Click()
Dim u_parameter As Single
Dim v_parameter As Single
Dim point1(2) As Single
Dim Point2(2) As Single
Dim points() As Double
Dim lineObj As AcadLine
Dim meshObj As AcadPolygonMesh
Dim i As Integer
Dim step_n, step_m As Single
Dim k As Integer
Dim l As Integer
Dim Cur_Points(200, 200) As c_point
Dim Neta As Single
Dim H_vector As c_point
Dim IsoLength As Single
IsoLength = 0
step_m = 1 / (mSize - 1)
step_n = 1 / (nSize - 1)
point1(0) = 0: point1(1) = 0: point1(2) = 0
u_parameter = 0: v_parameter = 0
i = 0
ReDim points(mSize * nSize * 3 - 1)
120
For k = 1 To mSize
u_parameter = 0
For l = 1 To nSize
If u_parameter > 1 Then
u_parameter = 1
End If
If v_parameter > 1 Then
v_parameter = 1
End If
Call xuat_diem(u_parameter, v_parameter)
excelsheet3.cells((k - 1) * nSize + l, 5) = S.x
excelsheet3.cells((k - 1) * nSize + l, 6) = S.y
excelsheet3.cells((k - 1) * nSize + l, 7) = S.z
points(i) = S.x: points(i + 1) = S.y: points(i + 2) = S.z
u_parameter = u_parameter + step_n
i = i + 3
excelsheet4.cells(l + (k - 1) * nSize, 1) = S.x
excelsheet4.cells(l + (k - 1) * nSize, 2) = S.y
excelsheet4.cells(l + (k - 1) * nSize, 3) = S.z
Next
v_parameter = v_parameter + step_m
Next
Set meshObj = dra.ModelSpace.Add3DMesh(mSize, nSize, points)
Dim NewDirection(0 To 2) As Double
NewDirection(0) = -1: NewDirection(1) = -1: NewDirection(2) = 1
dra.ActiveViewport.Direction = NewDirection
dra.ActiveViewport = dra.ActiveViewport
meshObj.Update
meshObj.Color = 60
ZoomAll
dra.SendCommand "_shademode" & vbCr & "g" & vbCr
End Sub

Private Sub Form_initialize()
Call khoi_dau
Call CutterParameterSet(5, 5, 0, 0, 10)
Call diem_dieu_khien
121
End Sub

Option Explicit
Public u(100) As Single
Public v(100) As Single
Public Const n = 4
Public Const m = 9
Public Const p = 2
Public Const q = 2
Public funs_u(100), funs_v(100) As Single
Type c_point
x As Single
y As Single
z As Single
End Type
Type cw_point
x As Single
y As Single
z As Single
w As Single
End Type
Public diem_dau(0 To 2) As Double
Public diem_cuoi(0 To 2) As Double
Public u_cc(0 To 50000) As Single
Public v_cc(0 To 50000) As Single
Public i As Integer
Public j As Integer
'Public step_u As Single
'Public step_v As Single
Public Const h0 = 0.1
Public Const R = 0.8
Public Skl(5, 5) As c_point
Public l As Single
Public excelsheet As Object
Public excelsheet1 As Object
Public excelsheet2 As Object
Public excelsheet3 As Object
122
Public excelsheet4 As Object
Public excelsheet5 As Object
Public excelsheet6 As Object
Public Const mSize = 75
Public Const nSize = 36
Public S As c_point
Public dra As AcadDocument
Public CP(10, 10) As cw_point
Public Sw As cw_point
Public thamso_u As Single
Public thamso_v As Single
Public startpoint As c_point
Public khoangcach As Single
Public endpoint As c_point
Public Sub khoang_cach(a As c_point, b As c_point)
khoangcach = ((a.x - b.x) ^ 2 + (a.y - b.y) ^ 2 + (a.z - b.z) ^ 2) ^ 1 / 2
End Sub

Public Sub khoi_dau()
On Error Resume Next
Set excelapp = GetObject("C:\CNC\Dau_vao.xls")
Set excelsheet = excelapp.activesheet
Set excelsheet1 = excelapp.worksheets("sheet1")
Set excelsheet2 = excelapp.worksheets("sheet2")
Set excelsheet3 = excelapp.worksheets("sheet3")
Set excelsheet4 = excelapp.worksheets("sheet4")
Set excelsheet5 = excelapp.worksheets("sheet5")
Set excelsheet6 = excelapp.worksheets("sheet6")
Set acadapp = GetObject(, "autocad.application")
Set dra = acadapp.ActiveDocument
acadapp.Visible = True
End Sub
'================Cac ham cho ve mat phang===========
Public Sub CutterParameterSet(R1_val As Single, R2_val As Single, Beta1_val As
Single, Beta2_val As Single, L_val As Single)
R1 = R1_val
R2 = R2_val
123
Beta1 = Beta1_val * 3.141592 / 180
Beta2 = Beta2_val * 3.141592 / 180
Lt = L_val
e = R1 - R2 * Cos(Beta2)
h = R2 * Cos(Beta1) + R2 * Sin(Beta1) * Tan(Beta1) + e * Tan(Beta1)
End Sub
' ==========Ham tinh cac diem S.x,S.y,S.z nho vao S(u,v)=======
Public Sub xuat_diem(u_val As Single, v_val As Single)
Dim uspan, vspan, uind, vind, i, j As Integer
Dim temp As cw_point
uspan = FinSpan_u(u_val)
vspan = FinSpan_v(v_val)
Call BasisFuns_u(FinSpan_u(u_val), p, u_val)
Call BasisFuns_v(FinSpan_v(v_val), q, v_val)
uind = uspan - p
Sw.x = 0: Sw.y = 0: Sw.z = 0: Sw.w = 0
S.x = 0: S.y = 0: S.z = 0
For i = 0 To q
temp.x = 0: temp.y = 0: temp.z = 0: temp.w = 0
vind = vspan - q + i
For j = 0 To p
temp.x = temp.x + funs_u(j) * CP(uind + j, vind).x
temp.y = temp.y + funs_u(j) * CP(uind + j, vind).y
temp.z = temp.z + funs_u(j) * CP(uind + j, vind).z
temp.w = temp.w + funs_u(j) * CP(uind + j, vind).w
Next
Sw.x = Sw.x + funs_v(i) * temp.x
Sw.y = Sw.y + funs_v(i) * temp.y
Sw.z = Sw.z + funs_v(i) * temp.z
Sw.w = Sw.w + funs_v(i) * temp.w
If Sw.w <> 0 Then
S.x = Sw.x / Sw.w: S.y = Sw.y / Sw.w: S.z = Sw.z / Sw.w
Else
S.x = Sw.x: S.y = Sw.y: S.z = Sw.z
End If
Next
End Sub
124
' ==================De quy tham so u============
Public Function FinSpan_u(Parameter As Single) As Integer
Dim low, high As Integer
Dim mid As Integer
If Parameter = u(n + 1) Then
FinSpan_u = n
Else
low = p: high = n + 1
mid = Int((low + high) / 2)
While (Parameter < u(mid) Or Parameter >= u(mid + 1))
If Parameter < u(mid) Then
high = mid
Else
low = mid
End If
mid = Int((low + high) / 2)
Wend
FinSpan_u = mid
End If
End Function
' =====================De quy tham so v===========
Function FinSpan_v(Parameter As Single) As Integer
Dim low, high As Integer
Dim mid As Integer
If Parameter = v(m + 1) Then
FinSpan_v = m
Else
low = q: high = m + 1
mid = Int((low + high) / 2)
While (Parameter < v(mid) Or Parameter >= v(mid + 1))
If Parameter < v(mid) Then
high = mid
Else
low = mid
End If
mid = Int((low + high) / 2)
Wend
125
FinSpan_v = mid
End If
End Function
'=====================Tinh Ni,p(u)=================
Public Sub BasisFuns_u(i As Integer, p1 As Integer, Parameter As Single)
Dim temp, leftt(5), rightt(5), saved As Single
funs_u(0) = 1
Dim j, i1 As Integer
For j = 1 To p1
leftt(j) = Parameter - u(i + 1 - j)
rightt(j) = u(i + j) - Parameter
saved = 0
For i1 = 0 To j - 1
temp = funs_u(i1) / (rightt(i1 + 1) + leftt(j - i1))
funs_u(i1) = saved + rightt(i1 + 1) * temp
saved = leftt(j - i1) * temp
Next
funs_u(j) = saved

Next
End Sub
'=====================Tinh Nj,q(v)================
Public Sub BasisFuns_v(i As Integer, p1 As Integer, Parameter As Single)
Dim temp, leftt(5), rightt(5), saved As Single
funs_v(0) = 1
Dim j, i1 As Integer
For j = 1 To p1
leftt(j) = Parameter - v(i + 1 - j)
rightt(j) = v(i + j) - Parameter
saved = 0
For i1 = 0 To j - 1
temp = funs_v(i1) / (rightt(i1 + 1) + leftt(j - i1))
funs_v(i1) = saved + rightt(i1 + 1) * temp
saved = leftt(j - i1) * temp
Next
funs_v(j) = saved
Next
126
End Sub
'================Input cac diem dieu khien tu Exel=========
Public Sub diem_dieu_khien()
Dim i, j As Single
Dim scl As Single
slc = 200 / 18
For i = 0 To n
For j = 0 To m
CP(i, j).x = excelsheet2.cells(4 * i + 4, j + 17)
CP(i, j).y = excelsheet2.cells(4 * i + 5, j + 17)
CP(i, j).z = excelsheet2.cells(4 * i + 6, j + 17)
CP(i, j).w = excelsheet2.cells(4 * i + 7, j + 17)
CP(i, j).x = slc * CP(i, j).x * CP(i, j).w
CP(i, j).y = slc * CP(i, j).y * CP(i, j).w
CP(i, j).z = slc * CP(i, j).z * CP(i, j).w
Next
Next
i = 0
While i <= n + p + 1
If i <= p Then
u(i) = 0
End If
If i > p And i <= n Then
u(i) = u(i - 1) + 1 / (n - 1)
End If
If i > n Then
u(i) = 1
End If
excelsheet1.cells(1, i + 1) = u(i)
i = i + 1
Wend
i = 0
While i <= m + q + 1
If i <= q Then
v(i) = 0
End If
If i > q And i <= m Then
127
v(i) = v(i - 1) + 1 / (m - 1)
End If
If i > m Then
v(i) = 1
End If
excelsheet1.cells(2, i + 1) = v(i)
i = i + 1
Wend
End Sub
'===================KET THUC CAC HAM VE MAT=========
'===================BAT DAU TINH CAC DIEM CC=========
'======================HAM TINH DELTA_V===========
Public Sub delta_vv()
Dim delta_v As Single
Dim thamsou As Single
Dim thamsov As Single
Dim S_v As Single
Dim delta_u As Single
i = 1
thamsou = 0
delta_u = 0.02
delta_v = 0.25
l = 2 * (h0 * (2 * R - h0)) ^ 1 / 2
While thamsou < 1
thamsov = 0
S_v = 0
Call xuat_diem(thamsou, thamsov)
startpoint.x = S.x: startpoint.y = S.y: startpoint.z = S.z
While thamsov < 1
thamsov = thamsov + delta_v
Call xuat_diem(thamsou, thamsov)
endpoint.x = S.x: endpoint.y = S.y: endpoint.z = S.z
Call khoang_cach(startpoint, endpoint)
S_v = S_v + khoangcach
startpoint.x = endpoint.x: startpoint.y = endpoint.y: startpoint.z = endpoint.z
Wend
step_v = 100 * l / S_v
128
excelsheet1.cells(i, 1) = step_v
i = i + 1
thamsou = thamsou + delta_u
Wend
End Sub
Public Sub delta_v(step_v As Single)
Dim thamsou As Single
Dim thamsov As Single
Dim S_v As Single
Dim delta_v As Single
thamsou = 0.25
delta_v = 0.25
thamsov = 0
l = 2 * (h0 * (2 * R - h0)) ^ 1 / 2
S_v = 0
Call xuat_diem(thamsou, thamsov)
startpoint.x = S.x: startpoint.y = S.y: startpoint.z = S.z
While thamsov < 1
thamsov = thamsov + delta_v
Call xuat_diem(thamsou, thamsov)
endpoint.x = S.x: endpoint.y = S.y: endpoint.z = S.z
Call khoang_cach(startpoint, endpoint)
S_v = S_v + khoangcach
startpoint.x = endpoint.x: startpoint.y = endpoint.y: startpoint.z = endpoint.z
step_v = l / S_v
excelsheet1.cells(2, 1) = step_v
Wend
End Sub
'==============HAM TINH DELTA_U========================
Public Sub delta_u(thamso_v)
Dim hc As c_point
Call xuat_diem(thamso_u, 0)
startpoint.x = S.x: startpoint.y = S.y: startpoint.z = S.z
Call xuat_diem(thamso_u, 1)
endpoint.x = S.x: endpoint.y = S.y: endpoint.z = S.z
Call xuat_diem(thamso_u, thamso_v)
hc.x = 0: hc.y = 0: hc.z = S.z
129
End Sub
'======================TINH DAO HAM S(U,V)=============
Public Sub dao_ham(u_val As Single, v_val As Single, D As Integer)
Dim du As Integer
Dim dv As Integer
Dim dd As Integer
Dim i, j, k, l As Integer
Dim uspan As Integer
Dim vspan As Integer
Dim tmp As cw_point
Dim utemp As Single
du = Min(D, p)
For k = p + 1 To D
For l = 0 To D - k
Skl_w(k, l).x = 0
Skl_w(k, l).y = 0
Skl_w(k, l).z = 0
Skl_w(k, l).w = 0
Next
Next
dv = Min(D, q)
For l = q + 1 To D
For k = 0 To D - l
Skl_w(k, l).x = 0
Skl_w(k, l).y = 0
Skl_w(k, l).z = 0
Skl_w(k, l).w = 0
Next
Next
utemp = u_val
uspan = FinSpan_u(utemp)
AllBasisFuns_u (u_val)
vspan = FinSpan_v(v_val)
AllBasisFuns_v (v_val)
Call SurfaceDrivCpts(D, uspan - p, uspan, vspan - q, vspan)
For k = 0 To du
dd = Min(D - k, dv)
130
For l = 0 To dd
Skl_w(k, l).x = 0
Skl_w(k, l).y = 0
Skl_w(k, l).z = 0
Skl_w(k, l).w = 0
For i = 0 To q - l
tmp.x = 0: tmp.y = 0: tmp.z = 0: tmp.w = 0
For j = 0 To p - k
tmp.x = tmp.x + Nu(j, p - k) * Pkl(k, l, j, i).x
tmp.y = tmp.y + Nu(j, p - k) * Pkl(k, l, j, i).y
tmp.z = tmp.z + Nu(j, p - k) * Pkl(k, l, j, i).z
tmp.w = tmp.w + Nu(j, p - k) * Pkl(k, l, j, i).w
Next
Skl_w(k, l).x = Skl_w(k, l).x + Nv(i, q - l) * tmp.x
Skl_w(k, l).y = Skl_w(k, l).y + Nv(i, q - l) * tmp.y
Skl_w(k, l).z = Skl_w(k, l).z + Nv(i, q - l) * tmp.z
Skl_w(k, l).w = Skl_w(k, l).w + Nv(i, q - l) * tmp.w
Next
Next
Next
Call xuat_diem(u_val, v_val)
'Su
If Sw.w = 0 Then
Skl(1, 0).x = Skl_w(1, 0).x
Skl(1, 0).y = Skl_w(1, 0).y
Skl(1, 0).z = Skl_w(1, 0).z
'Sv
Skl(0, 1).x = Skl_w(0, 1).x
Skl(0, 1).y = Skl_w(0, 1).y
Skl(0, 1).z = Skl_w(0, 1).z
'Suu
Skl(2, 0).x = Skl_w(2, 0).x
Skl(2, 0).y = Skl_w(2, 0).y
Skl(2, 0).z = Skl_w(2, 0).z
'Svv
Skl(0, 2).x = Skl_w(0, 2).x
Skl(0, 2).y = Skl_w(0, 2).y
131
Skl(0, 2).z = Skl_w(0, 2).z
'Suv
Skl(1, 1).x = Skl_w(1, 1).x
Skl(1, 1).y = Skl_w(1, 1).y
Skl(1, 1).z = Skl_w(1, 1).z
Else
Skl(1, 0).x = (Skl_w(1, 0).x - Skl_w(1, 0).w * S.x) / Sw.w
Skl(1, 0).y = (Skl_w(1, 0).y - Skl_w(1, 0).w * S.y) / Sw.w
Skl(1, 0).z = (Skl_w(1, 0).z - Skl_w(1, 0).w * S.z) / Sw.w
'Sv
Skl(0, 1).x = (Skl_w(0, 1).x - Skl_w(0, 1).w * S.x) / Sw.w
Skl(0, 1).y = (Skl_w(0, 1).y - Skl_w(0, 1).w * S.y) / Sw.w
Skl(0, 1).z = (Skl_w(0, 1).z - Skl_w(0, 1).w * S.z) / Sw.w
'Suu
Skl(2, 0).x = (Skl_w(2, 0).x - 2 * Skl_w(1, 0).w * Skl(1, 0).x - Skl_w(2, 0).w *
S.x) / Sw.w
Skl(2, 0).y = (Skl_w(2, 0).y - 2 * Skl_w(1, 0).w * Skl(1, 0).y - Skl_w(2, 0).w *
S.y) / Sw.w
Skl(2, 0).z = (Skl_w(2, 0).z - 2 * Skl_w(1, 0).w * Skl(1, 0).z - Skl_w(2, 0).w *
S.z) / Sw.w
'Svv
Skl(0, 2).x = (Skl_w(0, 2).x - 2 * Skl_w(0, 1).w * Skl(0, 1).x - Skl_w(0, 2).w *
S.x) / Sw.w
Skl(0, 2).y = (Skl_w(0, 2).y - 2 * Skl_w(0, 1).w * Skl(0, 1).y - Skl_w(0, 2).w *
S.y) / Sw.w
Skl(0, 2).z = (Skl_w(0, 2).z - 2 * Skl_w(0, 1).w * Skl(0, 1).z - Skl_w(0, 2).w *
S.z) / Sw.w
'Suv
Skl(1, 1).x = (Skl_w(1, 1).x - Skl_w(1, 0).w * Skl(0, 1).x - Skl_w(1, 1).w * S.x
- Skl_w(0, 1).w * Skl(1, 0).x) / Sw.w
Skl(1, 1).y = (Skl_w(1, 1).y - Skl_w(1, 0).w * Skl(0, 1).y - Skl_w(1, 1).w * S.y
- Skl_w(0, 1).w * Skl(1, 0).y) / Sw.w
Skl(1, 1).z = (Skl_w(1, 1).z - Skl_w(1, 0).w * Skl(0, 1).z - Skl_w(1, 1).w * S.z -
Skl_w(0, 1).w * Skl(1, 0).z) / Sw.w
End If
End Sub
'==========================CAC HAM TINH CC=============
132
Public Sub thamso()
Dim delta_vv As Single
Dim delta_uu As Single
Dim dem As Integer
Dim lineObj As AcadLine
delta_uu = 0.02
Call delta_v(delta_vv)
'delta_vv = delta_vv * 180 * 1000
'excelsheet1.cells(3, 3) = delta_vv
delta_vv = 0.01
thamso_u = 0
thamso_v = 0
u_cc(0) = 0
v_cc(0) = 0
Call xuat_diem(thamso_u, thamso_v)
diem_dau(0) = S.x: diem_dau(1) = S.y: diem_dau(2) = S.z
While thamso_v <= 1
If thamso_u = 0 Then
While thamso_u <= 1
Call xuat_diem(thamso_u, thamso_v)
diem_cuoi(0) = S.x: diem_cuoi(1) = S.y: diem_cuoi(2) = S.z
excelsheet3.cells(dem + 1, 1) = S.x
excelsheet3.cells(dem + 1, 2) = S.y
excelsheet3.cells(dem + 1, 3) = S.z
Set lineObj = dra.ModelSpace.AddLine(diem_dau, diem_cuoi)
diem_dau(0) = diem_cuoi(0): diem_dau(1) = diem_cuoi(1): diem_dau(2) =
diem_cuoi(2)
dem = dem + 1
u_cc(dem) = thamso_u
v_cc(dem) = thamso_v
thamso_u = thamso_u + delta_uu
Wend
End If
If thamso_u = 1 Then
While thamso_u > 0
Call xuat_diem(thamso_u, thamso_v)
diem_cuoi(0) = S.x: diem_cuoi(1) = S.y: diem_cuoi(2) = S.z
133
excelsheet3.cells(dem + 1, 1) = S.x
excelsheet3.cells(dem + 1, 2) = S.y
excelsheet3.cells(dem + 1, 3) = S.z
Set lineObj = dra.ModelSpace.AddLine(diem_dau, diem_cuoi)
diem_dau(0) = diem_cuoi(0): diem_dau(1) = diem_cuoi(1): diem_dau(2) =
diem_cuoi(2)
dem = dem + 1
u_cc(dem) = thamso_u
v_cc(dem) = thamso_v
thamso_u = thamso_u - delta_uu
Wend
End If
If thamso_u > 1 Then
thamso_u = 1
End If
If thamso_u < 0 Then
thamso_u = 0
End If
thamso_v = thamso_v + delta_vv
Call xuat_diem(thamso_u, thamso_v)
diem_cuoi(0) = S.x: diem_cuoi(1) = S.y: diem_cuoi(2) = S.z
excelsheet3.cells(dem + 1, 1) = S.x
excelsheet3.cells(dem + 1, 2) = S.y
excelsheet3.cells(dem + 1, 3) = S.z
Set lineObj = dra.ModelSpace.AddLine(diem_dau, diem_cuoi)
diem_dau(0) = diem_cuoi(0): diem_dau(1) = diem_cuoi(1): diem_dau(2) =
diem_cuoi(2)
dem = dem + 1
u_cc(dem) = thamso_u
v_cc(dem) = thamso_v
Wend
For i = 0 To dem
excelsheet4.cells(i, 6) = u_cc(dem)
excelsheet4.cells(i, 7) = v_cc(dem)
Next
End Sub

You might also like