chương v · web viewbảo toàn tỷ lệ về khoảng cách: giả sử c là điểm chia...
TRANSCRIPT
Chng V
Chng III. Cc php bin hnh
Cc php bin i hnh hc c s bao gm:
tnh tin /di hnh (translation)
quay (rotation)
t l /v t / (scaling)
V d:
mt bo co vin mun thu nh cc biu trong bo co
mt kin trc s mun nhn ta nh nhng gc nhn khc nhau
nh thit k mun quan st, tch ri v chnh sa tng chi tit ca mu thit k
...
C hai quan im v php bin i hnh hc, c lin quan vi nhau v u c nhng li th ring:
Bin i i tng (object transformation): ta ca tng im trn i tng c bin i theo cng thc ca php bin hnh, to ra nh ca i tng qua php bin hnh .
Bin i h ta (coordinate transformation): to ra mt h ta mi, sau tt c cc im ca i tng s c chuyn v h ta .
Php bin hnh affin
nh x
T: R2 ( R2
P(x,y) (Q(x*,y*)
trong :
v f() v g() l hai hm tuyn tnh th c gi l php bin hnh Affin (affine). Ta ch kho st cc php bin hnh loi ny. Php bin hnh affin c nhng tnh cht sau:
Bo ton ng thng: nh ca ng thng qua php bin hnh affine l ng thng.
Bo ton tnh song song ca cc ng thng: nh ca cc ng thng song song qua php bin hnh affine cng l cc ng thng song song.
Bo ton t l v khong cch: gi s C l im chia on AB theo t l x v A,B,C ln lt l nh ca A,B,C qua mt php bin hnh affin. Khi C cng chia on AB theo t l x.
4.1. Cc php bin hnh phng
4.1.1 Cc php bin hnh trong h ta Decac
Php tnh tin
nh ca php tnh tin theo vector (a,b) ca im P(x,y) l im Q(x*,y*)
+
=
+
=
b
y
y
a
x
x
*
*
Vector tnh tin (a,b) cn gi l vector di. Chng ta c th p dng quy tc trn cho mi im ca i tng dch chuyn n. n gin hn, tnh tin mt a gic ch cn tnh tin cc nh ca n ri v li a gic mi. Tng t, i vi ng trn, ellip ta tnh tin tm ca chng ti v tr mi ri v li.
Php t l
Lm thay i kch thc ca i tng.
=
=
y
ty
y
x
tx
x
.
*
.
*
trong ty, tx l h s co dn theo trc tung v trc honh. Khi tx,ty nh hn 1, php bin i s thu nh i tng. Khi tx,ty ln hn 1, php bin i s phng to i tng. Khi tx=ty: ta gi l php ng dng (uniform scaling), n bo ton t l v kch thc ca vt th.
=
=
)
,
(
*
)
,
(
*
y
x
g
y
y
x
f
x
Php quay
Php quay lm thay i hng ca i tng. xc nh php quay, ta cn bit tm quay v gc quay. Php quay im P(x,y) quanh gc ta mt gc ( to thnh im nh Q(x*,y*) c cng thc nh sau:
+
=
-
=
a
a
a
a
cos
.
sin
.
*
sin
.
cos
.
*
y
x
y
y
x
x
4.1.2 Ma trn ca php bin hnh.
Nu ta biu din im P,Q di dng vector dng (x,y) (x*,y*) nh trn th ma trn ca cc php bin hnh nh sau:
Php tnh tin:
(x*,y*) = (x,y) + (a,b)
Q = P + T trong T = (a,b)
Php t l:
(
)
(
)
=
ty
tx
y
x
y
x
0
0
,
*
*,
Q = P(S trong
=
ty
tx
S
0
0
l ma trn ca php ng dng
Php quay quanh gc ta :
(
)
(
)
-
=
a
a
a
a
cos
sin
sin
cos
,
*
*,
y
x
y
x
hay Q=P(R trong
-
=
a
a
a
a
cos
sin
sin
cos
R
l ma trn ca php quay
Tuy nhin, cch biu din trn s gp kh khn khi kt hp cc php bin i li vi nhau v biu din ca php tnh tin (cng ma trn) khc vi hai php bin hnh cn li (nhn ma trn). Chng hn, khi thit k mt ng c, ta mun tho ring mt chi tit ra ngoi (tnh tin), xoay 1 gc (quay) ri lp vo ch c (tnh tin). Khi ta phi thc hin 3 php tnh trn ma trn (+ ( + ). Ngi ta tm ra cch biu din trong h ta thun nht, nh rt gn chui bin i trn v ch mt php tnh.
4.1.3 H ta thun nht (homogeneous coordinates)
Ta thun nht (i khi cn gi l ng nht) ca im (x,y) trn mt phng c biu din bng b ba (xh,yh,h) lin h vi ta (x,y) bi cng thc
h
y
y
h
x
x
h
h
=
=
,
Nu mt im c ta thun nht l (x,y,z) trong khng gian Decac th n cng c ta thun nht l (x.h,y.h,z.h) trong h l s thc khc khng bt k. Ngc li im (x,y,z) trong h ta thun nht s c tng ng vi im (x/z,y/z) trong h ta Decac. Ta thun nht ca mt im trong khng gian 3 chiu hay nhiu chiu cng c xc nh theo cch tng t. n gin ha, ngi ta thng chn h=1, lc ny im P(x,y) s c biu din di dng ta thun nht l (x,y,1)
4.1.4 Ma trn ca cc php bin hnh trong h ta thun nht
Php tnh tin:
(
)
(
)
=
1
0
1
0
0
0
1
1
,
,
1
*,
*,
b
a
y
x
y
x
Hay Q = P ( T trong T l ma trn ca php tnh tin
=
1
0
1
0
0
0
1
b
a
T
Php t l:
(
)
(
)
=
1
0
0
0
0
0
0
1
,
,
1
*,
*,
ty
tx
y
x
y
x
Hay Q = P ( S trong S l ma trn ca php t l
=
1
0
0
0
0
0
0
ty
tx
S
Php quay quanh gc ta :
(
)
(
)
-
=
1
0
0
0
cos
sin
0
sin
cos
1
,
,
1
*,
*,
a
a
a
a
y
x
y
x
Hay Q = P ( R trong R l ma trn ca php quay
-
=
1
0
0
0
cos
sin
0
sin
cos
a
a
a
a
R
4.1.5 Kt hp cc php bin hnh
Bt k php bin hnh no cng c kt hp t php tnh tin, t l v quay.
Khi p dng lin tip cc php bin hnh trn i tng, ta phi thc hin nhiu php nhn vi cc ma trn tng ng. Thay vo , ta s chun b sn ma trn tch v s dng nh ma trn ca php bin hnh tng th.
Kt hp cc php tnh tin
Ta thc hin php tnh tin T1 vi vector tnh tin (a,b) ln im P(x,y) v thu c nh Q, sau thc hin tip php tnh tin T2(c,d) i vi Q v thu c Q(x*,y*)
*)
*,
(
)
'
,
'
(
'
)
,
(
)
,
(
)
,
(
2
1
y
x
Q
y
x
Q
y
x
P
d
c
T
b
a
T
Kt hp ca 2 hay nhiu php tnh tin cho kt qu l php tnh tin c ma trn l tng cc ma trn hnh phn:
+
+
=
+
+
=
1
0
1
0
0
0
1
1
0
1
0
0
0
1
1
0
1
0
0
0
1
)
,
(
)
,
(
).
,
(
2
1
d
b
c
a
d
c
b
a
d
b
c
a
T
d
c
T
b
a
T
Kt hp cc php t l
Tng t nh php tnh tin, kt hp ca nhiu php t l l mt php t l. Gi s ta kt hp hai php t l sau: S = S1. S2 Ma trn kt hp s l
=
1
0
0
0
0
0
0
1
0
0
0
0
0
0
1
0
0
0
0
0
0
2
1
2
1
1
2
1
1
ty
ty
tx
tx
ty
tx
ty
tx
Kt hp cc php quay
Tng t nh php tnh tin, kt hp ca nhiu php quay quanh gc ta cng l mt php quay quanh gc ta . Gi s php quay R1c gc quay l (1, php quay R2 c gc quay (2, ma trn kt hp ca hai php quay R1. R2 l
(
)
(
)
(
)
(
)
+
+
-
+
+
=
-
-
1
0
0
0
cos
sin
0
sin
cos
1
0
0
0
cos
sin
0
sin
cos
1
0
0
0
cos
sin
0
sin
cos
2
1
2
1
2
1
2
1
2
2
2
2
1
1
1
1
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
Php quay vi tm quay bt k
Php quay quanh tm quay A(x,y) gc quay ( c th phn tch thnh cc php bin hnh c s sau:
Tnh tin theo vector (-x,-y) a tm quay v gc ta
Quay quanh gc ta mt gc (
Tnh tin theo vector (x,y) a i tng v ch c
(
)
(
)
-
+
-
+
-
-
=
=
-
-
-
1
cos
1
.
sin
sin
.
cos
1
0
cos
sin
0
sin
cos
1
0
1
0
0
0
1
1
0
0
0
cos
sin
0
sin
cos
1
0
1
0
0
0
1
y
x
y
x
y
x
y
x
a
a
a
a
a
a
a
a
a
a
a
a
Php i xng
Php i xng trc c th xem l php quay 1800 quanh trc i xng. Php i xng qua trc honh v trc tung c ma trn ln lt l
-
=
-
=
1
0
0
0
1
0
0
0
1
,
1
0
0
0
1
0
0
0
1
Oy
Ox
M
M
Php bin dng
L php bin hnh lm thay i t l v kch thc, ni cch khc l lm mo m i tng. Hai php bin dng l:
Php bin dng theo trc honh lm thay i honh cn tung gi nguyn
Php bin dng theo trc tung lm thay i tung cn honh gi nguyn
=
=
1
0
0
0
1
0
0
1
,
1
0
0
0
1
0
0
1
t
M
t
M
Oy
Ox
Php bin i ngc
Mt v d cho php bin i ngc chnh l thao tc Undo m cc phn mm v thit k lun c. Gi s php bin hnh M c ma trn nh sau:
=
1
0
0
f
e
d
c
b
a
M
gi thit ad-bc ( 0. Khi php bin i ngc ca M, k hiu l M-1, c biu din nh sau:
-
-
-
-
-
=
-
1
0
0
1
1
af
be
de
cf
a
c
b
d
bc
ad
M
Gi S (tx,ty) l php ng dng, S-1 c biu din nh sau:
(
)
=
-
1
0
0
0
1
0
0
0
1
,
1
ty
tx
ty
tx
S
Php quay quanh gc ta R(() c bin i ngc nh sau:
(
)
)
(
1
0
0
0
cos
sin
0
sin
cos
1
a
a
a
a
a
a
-
=
-
=
-
R
R
4.2. Cc php bin hnh trong khng gian 3 chiu
Hon ton tng t nh trong mt phng, ta cng s dng cc ma trn trong h ta thun nht biu din cc php bin hnh: tnh tin, quay v ng dng.
Php tnh tin
Ma trn ca php tnh tin T(a,b,c) l
=
1
0
1
0
0
0
0
1
0
0
0
0
1
)
,
,
(
c
b
a
c
b
a
T
Php t l
Ma trn ca php t l S(a,b,c) l
=
1
0
0
0
0
0
0
0
0
0
0
0
0
)
,
,
(
c
b
a
c
b
a
S
trong a,b,c l h s t l tng ng theo cc trc ta Ox,Oy,Oz
Php quay
Nu trong mt phng ta c php quay quanh mt tm quay th trong khng gian 3 chiu ta c php quay quanh mt trc. K hiu ma trn ca cc php quay quanh 3 trc Ox, Oy, Oz ln lt l R(x,(), R(y,(), R(z,() vi ( l gc quay. Ta c
-
=
-
=
-
=
1
0
0
0
0
cos
sin
0
0
sin
cos
0
0
0
0
1
)
,
(
1
0
0
0
0
cos
0
sin
0
0
1
0
0
sin
0
cos
)
,
(
1
0
0
0
0
1
0
0
0
0
cos
sin
0
0
sin
cos
)
,
(
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
x
R
y
R
z
R
Ch : vn nh trc, gc quay ( c gi tr i s. Chiu quay dng c xc nh theo quy tc nh sau:
- Quay quanh trc Ox: chiu quay dng l chiu quay t trc y n trc z
- Quay quanh trc Oy: chiu quay dng l chiu quay t trc z n trc x
- Quay quanh trc Oz: chiu quay dng l chiu quay t trc x n trc y
Ni cch khc, nu t mt nhn thng vo trc ta i ti th chiu quay dng l ngc chiu kim ng h. Hoc c th dng quy tc bn tay phi: ngn ci ch chiu i ti (vector php tuyn), bn ngn khum li ch chiu quay dng.
Chng IV. Th vin ha 2D, 3D
Trong chng ny chng ta s kho st th vin ha ly t cun GRAPHICSME DANS LE PLAN ET DANS LESPACE AVEC TURBO PASCAL, R.DONY, 1990.
1. Nguyn tc thit k ca th vin
1. Chng ta s xy dng nhng cng c chuyn i t h ta Ton hc (h Decac thun, ta l s thc khng gii hn) sang h ta mn hnh (h Decac ngc, ta l s nguyn). B cng c gm cc th tc sau:
Th tc
Chc nng
Procedure CAT( )
- o tung y,
- chiu ca s ln mn hnh,
- ct nhng phn nm ngoi phm vi ca s
Procedure CUASO( )
thit lp nn ca s
Procedure TAMNHIN( )
thit lp nn tm nhn
2. Sau khi c b cng c chuyn ta trn, cc lnh v v sau u coi nh ang v trn h ta Ton hc quen thuc. Vic bin i v h ta mn hnh v hin th c thc hin t ng bi cc cng c c.
3. on thng c chn lm nguyn th ha. Mi i tng hnh hc khc u c xy dng t on thng, chng hn mt im c v nh mt on thng vi 2 u mt trng nhau, cc ng cong c v bng mt lot on thng ngn lin tip nhau, ng trn c xp x ha bi mt a gic u nhiu cnh ...
2. Khi nim ca s, tm nhn
V l thuyt, khng gian 2D thc t l v hn nhng con ngi khng th bao qut ht m thng ch quan tm ti mt vng no . Ca s c nh ngha l hnh ch nht cha nhng i tng ang c kho st. Chng hn nhn ln mt bc tranh tng, ta ch vo mt ha tit no , khi ca s l hnh ch nht nh nht c th cha n. Khi chuyn s ch sang nhng phn khc, ca s s c di chuyn theo.
Th tc tit lp ca s nh sau: CuaSo (F1,F2,F3,F4: Real)
Trong F1, F2, F3, F4 l ta cc nh ca s (hnh v) v phi tha mn:
F1 < F2, F3 < F4
PROCEDURE Cuaso (F1,F2,F3,F4 : Real);
BEGIN
XgFen := F1; {Hoanh do trai}
XdFen := F2; {Hoanh do phai}
YbFen := F3; {Tung do duoi}
YhFen := F4 {Tung do tren}
END;
V d ta gi th tc sau thit lp ca s vung: CuaSo (13.5, 22, 18.5, 27);
Hnh nh m ta ang kho st trn ca s phi c th hin ln mn hnh my tnh. Khng phi lc no ta cng dng ton b mn hnh m thng chia thnh nhiu vng, mi vng cho mt mc ch, hin th mt ca s khc nhau. Ta gi vng mn hnh l tm nhn ca ca s tng ng.
Th tc thit lp tm nhn nh sau: TamNhin (C1, C2, C3, C4: Integer) trong
0( C1 < C2 ( GetMaxX
0( C3 < C4 ( GetMaxY
PROCEDURE TamNhin (C1,C2,C3,C4 : Integer);
BEGIN {C i chiu trc Y }
XgClot := C1; {Honh tri}
XdClot := C2; {Honh phi}
YbClot := C3; {Tung di}
YhClot := C4; {Tung trn}
Xtl := (XdClot - XgClot) / (XdFen - XgFen); {t l chiu ngang}
Ytl := (YhClot - YbClot) / (YhFen - YbFen); {t l chiu dc}
SetviewPort (XgClot, MaxY-YhClot, XdClot, MaxY-YbClot, ClipOn) {khng v ra ngoi}
END;
V d: thit lp ch lm vic ton mn hnh ta gi th tc
PROCEDURE TamNhinDay; {tm nhn y}
BEGIN
TamNhin (0,MaxX,0,MaxY) {Tm nhn l ton b mn hnh}
END;
3. on thng, im
on thng l nguyn th ha nh nht. Ta v on thng bng cch trc ht t con tr ha vo im u mt th nht, sau v on ni ti u mt th hai. Ta dng cp bin (XP1, YP1) thao di v nh v con tr ha.
PROCEDURE VeDen (X,Y : Real);{ V on ni (XP1,YP1) n (X,Y) v clipping n}
BEGIN
XP2 := X;
YP2 := Y;
Cat (XP1,YP1,XP2,YP2); {clipping}
XP1 := XP2; {chuyn con tr ti u mt th hai va xc nh }
YP1 := YP2
END;
PROCEDURE Diem (X,Y : Real);
BEGIN
XP1 := X;
YP1 := Y;
VeDen (X,Y)
END;
4. Chiu ca s ln tm nhn
Sau khi xc nh c ca s (vng cn kho st) v tm nhn (vng dnh cho vic hin th), cng vic tip theo l chiu ton b ni dung ca s ln mn hnh. lm vic ny ta cn c cng thc ton hc ca php chiu cho php xc nh ta nh (Xe, Ye) ca im thc (Xr, Yr) qua php chiu.
u tin ta tnh t l gia ca s v tm nhn:
Xtl=(C2-C1)/(F2-F1), Ytl = (C4-C3) /(F4-F3)
Khi ta c:
Xe = (Xr-F1). Xtl; Ye = (F4-Yr). Ytl
V d:
Xt ca s (-3,3,-2,3), tm nhn (100,700,50,300)
Gi s (Xr,Yr) = (1.5, 1)
Ta c
Xtl = (700-100) / (3+3) = 100;
Ytl = (300 -50) / (3+2) = 50
Vy
Xe = (1.5+3).100 = 450;
Ye = (3-1).50 = 100;
Hin tng mo hnh
Gi B v H l y v chiu cao ca s, cn B, H l y v chiu cao ca tm nhn. Khi chiu ca s ln tm nhn, nu t l B/H ( B/H th s xy ra hin tng mo hnh, ngha l i tng khng cn gi c nguyn vn hnh dng lc u
Hiu ng Zoom
Ta c nh tm nhn trn mn hnh v xt cc trng hp sau:
Trong khi gi nguyn kch thc ca s, ta di chuyn n ti nhng v tr khc nhau trong khng gian thc, khi trn tm nhn hin ra nhng phn khc nhau ca nh. Hnh ca nh c chiu ln mn hnh c kch thc khng i
Khi kch thc ca s b thu nh li, phn din tch c kho st ca i tng cng thu nh li theo nhng nh ca n trn mn hnh li c phng to ra
Ngc li, nu ca s c phng to ra th phn din tch c kho st ca i tng cng tng ln nhng nh ca n trn mn hnh li thu nh li
Vn Clipping (ct b nhng phn khng nm trong ca s)
Vn t ra l cn phi ct b nhng phn ca i tng khng nm trong ca s. V ta coi on thng l nguyn th ha nn vn quy v vic lm sao clipping mt on thng. Sau y ta p dng thut ton Cohen Sutherland gii quyt vn ny.
Trc ht xt mt im (X,Y). Nu ta ca n vi phm mt trong cc iu kin sau th im nm ngoi ca s v s b loi b
F1( X ( F2 v F3( Y ( F4
Du bng cho thy cc im nm trn bin c coi nh nm trong ca s.
Vi on thng, ta ko di cc ng bin ca s thnh cc ng thng. Chng chia mt phng lm 9 vng. Mi im trong mt phng s tng ng vi m 4 bit c xc nh theo quy tc sau:
bit th 1 l 1 nu im nm bn tri ca s
bit th 2 l 1 nu im nm bn phi ca s
bit th 3 l 1 nu im nm bn di ca s
bit th 4 l 1 nu im nm bn trn ca s
Nhn xt;
on thng nm hon ton trong ca s khi v ch khi m ca c 2 u mt l 0000. Ngc li, nu mt trong hai m khc 0000 th on thng c 1 phn hoc ton b nm ngoi ca s
Nu kt qu php AND hai m ca 2 u mt khc 0000 th on thng tng ng hon ton nm ngoi ca s v s khng c hin th ln mn hnh.
Cc bc:
Nu c hai m thuc tnh u l 0000 th on thng hon ton nm trong ca s
Nu kt qu php AND hai m khc 0000 th on thng hon ton nm ngoi ca s
Trng hp khng ri vo hai kh nng trn: giao im ca on thng vi bin ca s chia on thng cho thnh nhiu on. Ta xt tng on theo cch nh trn.
Ton b cc bc k trn c th hin trong th tc CAT di y:
PROCEDURE Cat (X1,Y1,X2,Y2 : Real);
TYPE Region = (Left,Right,Low,High);
Code = SET OF Region;
VAR C,C1,C2 : Code;
X,Y : Real;
XX1,YY1 : Integer;
XX2,YY2 : Integer;
PROCEDURE MaNhiPhan (X,Y : Real; VAR C : Code); {To m thuc tnh cho 2 u, xy dng tp C ca im (X,Y)}
BEGIN
C := [];
IF X < XgFen THEN C := [Left]{nm bn tri ng thng X=XgFen}
ELSE IF X > XdFen THEN C := [Right];
IF Y < YbFen THEN C := C+[Low]
ELSE IF Y > YhFen THEN C := C+[High]
END; {MaNhiPhan}
BEGIN
MaNhiPhan (X1,Y1,C1);
MaNhiPhan (X2,Y2,C2);
WHILE (C1 []) OR (C2 []) DO
{chng no t nht 1 trong 2 im cn nm ngoi ca s }
BEGIN {Ct dn tm on hin th}
IF (C1*C2) [] THEN Exit; {C1(C2 ((: ct ton b}
IF C1 = [] THEN C := C2 ELSE C := C1; {chn C l im nm ngoi}
IF Left IN C
THEN
BEGIN
{tm giao im (X,Y) vi dt X=XgFen}
X := XgFen;
Y := Y1+(Y2-Y1)*(XgFen-X1)/(X2-X1)
END
ELSE IF Right IN C
THEN
{tm giao im (X,Y) vi dt X=XdFen}
BEGIN
X := XdFen;
Y := Y1+(Y2-Y1)*(XdFen-X1)/(X2-X1)
END
ELSE IF Low IN C
THEN
BEGIN
Y := YbFen;
X := X1+(X2-X1)*(YbFen-Y1)/(Y2-Y1)
END
ELSE IF High IN C THEN
BEGIN
Y := YhFen;
X := X1+(X2-X1)*(YhFen-Y1)/(Y2-Y1)
END;
IF C = C1 {X1,Y1 nm ngoi ca s}
THEN BEGIN
X1 := X; {gn giao im (X,Y) mi tm c cho (X1,Y1)}
Y1 := Y;
MaNhiPhan (X,Y,C1) {tnh li tp C1}
END
ELSE BEGIN {X2,Y2 nm ngoi ca s }
X2 := X;
Y2 := Y;
MaNhiPhan (X,Y,C2)
END
END; {While}
XX1 := Round ((X1-XgFen)*Xtl);
YY1 := Round ((YhFen-Y1)*Ytl);
XX2 := Round ((X2-XgFen)*Xtl);
YY2 := Round ((YhFen-Y2)*Ytl);
MoveTo (XX1,YY1);
LineTo (XX2,YY2)
END;
5. V trc ta
V tr tng i gia h trc v ca s c rt nhiu trng hp. Ta quy c ch v trc mt cch tng i, khng tnh ton chnh xc theo v tr tuyt i, ni cch khc vic v trc ch mang tnh trang tr, mang li cho ngi xem cm gic v v tr tng i ca i tng so vi h trc.
Trc no ct ca s th nguyn v v ln tm nhn
Trc no khng ct qua ca s: tnh tin p st vo mp tri hoc mp di ca s
Trc no vn trng vi mp tri hoc mp di ca s th nguyn
Nh vy cui cng hnh dng ca s c km theo h trc ta s c mt trong 4 dng sau:
PROCEDURE Truc;
CONST dX = 5;
dY = 4;
PROCEDURE MuiTenTrenX; {gi s lc u con tr CP A}
BEGIN {Ve mui ten tren truc X}
MoveRel (-dX,dY); {ko CP v B}
LineRel (dX,-dY); {v BA}
MoveRel (-dX,-dY); {ko CP v C}
LineRel (dX,dY) {v CA}
END;
PROCEDURE MuiTenTrenY;
BEGIN {Ve mui ten tren truc Y}
MoveRel (-dY,dX);
LineRel (dY,-dX);
MoveRel (dY,dX);
LineRel (-dY,-dX)
END;
BEGIN
IF (XgFen < 0) AND (XdFen > 0)
THEN XOrig := 0
ELSE XOrig := XgFen; {mep trai}
IF (YbFen < 0) AND (YhFen > 0)
THEN YOrig := 0
ELSE YOrig := YbFen; {mep duoi}
Diem (XgFen,YOrig);
VeDen (XdFen,YOrig); {Ve truc X}
MuiTenTrenX;
Diem (XOrig,YbFen);
VeDen (XOrig,YhFen); {Ve truc Y}
MuiTenTrenY;
END;
V vch chia
Khi v trc ta ta phi v cc vch chia th hin o trn cc trc . Vn l khong chia phi i qua gc ta . hnh sau minh ha mt trng hp v sai vch chia
Cc th tc sau m nhim vic v cc vch chia trn trc ta :
Procedure ChinhTrucX;
Procedure ChinhTrucY;
Procedure DoDo;
ng vin v li
Th tc Luoi() v li vung nhm gip ngi xem nh gi v tr ta d dng hn. Th tc Vien() v mt ng vin bao quanh tm nhn
PROCEDURE Vien (Mau : Byte);
BEGIN
SetColor (Mau);
Diem (XgFen,YbFen);
VeDen (XdFen,YbFen);
VeDen (XdFen,YhFen);
VeDen (XgFen,YhFen);
VeDen (XgFen,YbFen)
END;
PROCEDURE VeVien;
BEGIN
Vien (White)
END;
PROCEDURE XoaVien;
BEGIN
Vien (Black)
END;
5. V a gic
Nu a gic c ta nguyn ta dng cng c DrawPoly ca Pascal v. Nu ta l s thc, ta s dng th tc DaGiac() vi cc tham s:
X,Y: bng cha cc ta a gic
Lim: s nh ca a gic
Mode: gi tr boolean ch th v a gic kn hay m
PROCEDURE DaGiac (X,Y : Table; Lim : Integer; Mode : Integer);
VAR I : Integer;
BEGIN
Diem(X[1],Y[1]);
FOR I := 2 TO Lim DO VeDen(X[I],Y[I]);
IF Mode = Dong THEN VeDen(X[1],Y[1]) {Net cuoi}
END;
PROCEDURE VeDaGiac (X,Y : Table; Lim : Integer; Mode : Integer);
BEGIN
SetColor(White);
DaGiac(X,Y,Lim,Mode)
END;
PROCEDURE XoaDaGiac(X,Y : Table; Lim : Integer; Mode : Integer);
BEGIN
SetColor(Black);
DaGiac(X,Y,Lim,Mode)
END;
5. V ng trn
Ta xp x ha ng trn bng mt a gic u c s cnh ln (72). Gi (XC,YC) l tm ng trn, R l bn knh. Gi Da l gc gia 2 nh lin tip, (Xn, Yn) l nh th n. C 2 cch tnh ta cc nh. Cch trc tip:
(
)
(
)
)
1
(
.
sin
.
.
cos
.
1
1
=
=
+
+
Da
n
R
Y
Da
n
R
X
n
n
Cch 2: ta nh th n l
(
)
(
)
=
=
a
R
Y
a
R
X
n
n
sin
.
cos
.
vi a l gc tm tng ng. Ta c
(
)
+
=
-
=
+
=
+
=
+
+
+
+
)
sin(
).
cos(
.
)
cos(
)
sin(
.
)
sin(
)
sin(
.
)
cos(
)
cos(
.
sin
.
)
cos(
.
1
1
1
1
Da
a
R
Da
a
R
Y
Da
a
R
Da
a
R
X
Da
a
R
Y
Da
a
R
X
n
n
n
n
cui cng ta c:
)
2
(
)
sin(
.
)
cos(
.
)
sin(
.
)
cos(
.
1
1
+
=
-
=
+
+
Da
X
Da
Y
Y
Da
Y
Da
X
X
n
n
n
n
n
n
Phng php (1) tn 2 php nhn v 2 php sin/cos cho mi nh. Phng php (2) tn 4 php nhn v 2 php (. Lu l my tnh phi dng cng thc Taylo tnh sin/cos
...
!
6
!
4
!
2
1
)
cos(
6
4
2
x
x
x
x
-
+
-
=
PROCEDURE VeTron (XC,YC,R : Real; Cham : Boolean);
VAR S,C,X,Y,Aux : Real;
N : Integer;
BEGIN
S := Sin(Pi/36);
{Da=Pi/36}
C := Cos(Pi/36);
X := XC+R;
Y := YC;
Diem(X,Y);
FOR N := 2 TO 73 DO
BEGIN
Aux := XC+(X-XC)*C-(Y-YC)*S;
Y := YC+(X-XC)*S+(Y-YC)*C;
X := Aux;
IF Cham THEN Diem(X,Y);
VeDen(X,Y)
END
END;
Sau y l mt s chng trnh ng dng th vin DOHOA v cc ng trong mt phng.
6. V hnh Bolygone
Xt ng trn n v (bn knh bng 1, tm gc ta ). Hnh Bolygone bc N gia s gc a l tp cc dy cung ni cc im sau:
im u
im cui
00
00
a0
(N.a)0
(2a)0
(N.2a)0
(3a)0
(N.3a)0
...
...
Phng trnh ng trn bn knh R, tm gc ta l:
X = R.Cos(()
Y=R.Sin(()
vi ng trn n v (R=1) ta c
X=cos(()
Y=sin(().
Khi chng trnh v Bolygone nh sau:
PROGRAM Bolygone;
USES Crt,Dohoa;
VAR Ordre, Pas : Integer;
ADeg,ARad : Real;
F1,F2,F3,F4 : Real;
C1,C2,C3,C4 : Integer;
PROCEDURE NhapSoLieu;
BEGIN
ClrScr;
Write ('G s nguyn ch bc (2,3,5 ...): g 0 kt thc');
Readln (Ordre);
Writeln;
IF Ordre 0 THEN
BEGIN
Write ('Cho gia s gc (1,3,5,7,11 ... ): ');
ReadLn (Pas);{
Write ('Cho toa do cua so (F1,F2,F3,F4): ');
ReadLn (F1,F2,F3,F4);
Write ('G ta tm nhn (C1,C2,C3,C4): ');
ReadLn (C1,C2,C3,C4);}
F1:=-1;F2:=1; F3:=-1;F4:=1;
C1:=100;C2:=540;C3:=20;C4:=460;
END
END;
PROCEDURE VeBolygone (Ordre,Pas : Integer);
BEGIN
ADeg := 0;
REPEAT
ARad := Pi*ADeg/180;
Diem (Cos(ARad),Sin(ARad));
VeDen (Cos(Ordre*ARad),Sin(Ordre*ARad));
ADeg := ADeg+Pas;
UNTIL ADeg > 360; {nu tng gii hn 360 ln, chng hn 3600, th s dy cung s tng ln}
END;
BEGIN
NhapSoLieu;
WHILE Ordre 0 DO
BEGIN
MhDohoa;
CuaSo (F1,F2,F3,F4);
TamNhin (C1,C2,C3,C4);
VeVien;
VeBolygone (Ordre,Pas);
Cho;
MhVanBan;
NhapSoLieu
END
END.
7. V cc ng Cycloide
nh ngha:
ng Cycloide l ng cong c v bi mt im ca vng trn ln khng trt trn mt ng thng. Phng trnh tham s ca cycloide l:
X=R.(T-sin(T))
Y=R.(1-cos(T))
ng Epicycloide l ng cong c v bi mt im ca vng trn ln khng trt bn ngoi mt vng trn c nh khc.
ng Hypocycloide l ng cong c v bi mt im ca vng trn ln khng trt bn trong mt vng trn c nh khc.
+
-
+
=
+
-
+
=
T
R
R
R
R
L
T
R
R
Y
T
R
R
R
R
L
T
R
R
X
2
2
1
2
2
1
2
2
1
2
2
1
sin
.
)
sin(
).
(
cos
.
)
cos(
).
(
Trong :
R1 l bn knh ng trn c nh
R2 l bn knh ng trn di ng
T: gc to bi trc Ox v ng ni tm ca vng trn di ng vi gc ta
L l tham bin
L>1: ng cong gin ra
L=1: ng cong bnh thng
L0 ta nhn c ng Epicycloide
Nu R2= 0;
aux1 := R1 + R2;
aux2 := (R1 + R2)/R2;
aux3 := L*R2;
Writeln;
Write ('Co ve duong tron sinh khong? (C/K) ');
Readln (Sinh)
END;
PROCEDURE Timcuaso;
BEGIN
rmax := 0;
IF L >= 1
THEN rmax := R1 + R2 + Abs(L*R2)
ELSE IF R2 > 0
THEN rmax := R1 + 2*R2
ELSE rmax := R1
END;
PROCEDURE Veduongcong;
VAR a,giaso : Real;
BEGIN
a := 0;
giaso := Pi/48;
Diem (Fx(0),Fy(0));
REPEAT
a := a+giaso;
VeDen (Fx(a),Fy(a))
UNTIL a >= chuky
END;
PROCEDURE Vongtronsinh;
BEGIN
Troncham (0,0,R1);
Troncham (R1+R2,0,R2)
END;
PROCEDURE Trinhbaythambien;
VAR s1,s2,s3,s4,s5 : string;
BEGIN
Str (R1:5:2,s1);
Str (R2:5:2,s2);
Str (L:5:2,s3);
Str (chuky:8:5,s4);
Str (rmax:8:5,s5);
Tamnhin (0,maxX,0,11);
OutTextXY (10,0,'R1 ='+s1+' R2 ='+s2+' L ='+s3
+' Chu ky ='+s4+' Rmax ='+s5)
END;
BEGIN
Nhapdulieu;
Timtudongchuky;
Timcuaso;
Mhdohoa;
Cuaso (-rmax,rmax,-rmax,rmax);
Tamnhin (0,maxX,0,maxY);
Vevien;
Tamnhin (140,580,15,345);
IF upcase (sinh) = 'C' THEN Vongtronsinh;
Veduongcong;
Trinhbaythambien;
Cho;
MhVanban
END.
7. Tng hp hai giao ng iu ha
Phng trnh tng qut ca giao ng iu ha l hm
Y=A.Sin(F.T)
trong A l bin , F l tn s, F.T l pha.
Ta s lp trnh v th hai giao ng
Y1=A1.sin(F1.T)
Y2=A2.sin(F2.T+D)
vi D l lch pha gia Y1 v Y2. Sau , trn cng mn hnh ta v th giao ng tng hp Y=Y1+Y2. Mn hnh c chia thnh 3 tm nhn dnh cho 3 ca s tng ng:
CuaSo(0,2Pi,-A1,A1) kho st giao ng th nht
CuaSo(0,2Pi,-A2,A2) kho st giao ng th hai
CuaSo(0,2Pi,-A1-A2,A1+A2) kho st giao ng tng hp
uses crt,Graph,dohoa;
const pas=0.02;
var f1,f2,a1,a2,D,B,P,X:real;
cy:integer; { b rng ca s 1,2 }
PROCEDURE NhapSolieu;
Begin
clrscr;
Writeln ('------------ TNG HP 2 GIAO NG ------------');
GotoXY(1,10); Write('Giao ng 1: bin , tn s');
readln(F1,A1); {c th th vi: 5,1}
GotoXY(1,14); Write('Giao ng 2: bin , tn s, lch pha (radian)');
readln(F2,A2,D); {c th th vi:: 3, 1, 3.14}
{th vi f1=f2, d=0: ( lch pha =0}
End;
FUNCTION Func1(X:real) : real;
Begin
Func1:=A1*sin(F1*x);
End;
FUNCTION Func2(X:real) : real;
Begin
Func2:=A2*sin(F2*x+D);
End;
FUNCTION FuncSum(X:real) : real;
Begin
FuncSum:=Func1(x)+Func2(x);
End;
PROCEDURE VeHam1;
Begin
Cuaso(0,2*pi,-A1,A1);
TamNhin(10,getmaxX-10,3*cy,4*cy);
Truc; DoDo(1,0);
x:=0;mausac(white);
Diem(x,Func1(x));
Repeat
x:=x+Pas;
Veden(x,func1(x));
Until x>=2*pi;
End;
PROCEDURE VeHam2;
Begin
Cuaso(0,2*pi,-A2,A2);
TamNhin(10,getmaxX-10,2*cy,3*cy);
Truc; DoDo(1,0);
x:=0;mausac(Green);
Diem(x,Func2(x));
Repeat
x:=x+Pas;
Veden(x,func2(x));
Until x>=2*pi;
End;
PROCEDURE VeHamTong;
Begin
Cuaso(0,2*pi,-A1-A2,A1+A2);
TamNhin(10,getmaxX-10,0,2*cy);
Truc; DoDo(1,0);
x:=0;mausac(Magenta);
Diem(x,FuncSum(x));
Repeat
x:=x+Pas;
Veden(x,FuncSum(x));
Until x>=2*pi;
End;
BEGIN
NhapSolieu; Mhdohoa;
cy:=getmaxY div 4;
Veham1; Cho;
Veham2; Cho;
VehamTong;Cho;
{ TamnhinDay;
Cho; }
Mhvanban;
END.
Chng V. Hnh hc Fractal
I. S cn thit ca hnh hc Fractal
Hnh hc l ngn ng c bit m phng t nhin, v hnh hc Euclide ng tr mt thi gian di trong lnh vc m t, x l cc hnh dng ca t nhin. Tuy nhin trong th gii thc c mt lp hnh dng khng d dng c m t bi hnh hc Euclide nh: ni, my, tri, bin ... c tnh ca nhng i tng ny l khi phng to mt phn chi tit no th s c c dng lp li ca ton hnh, c tnh c gi l t tng t (self- similarity). Hnh hc Fractal (vit tt ca Fractional phn on) ra i thch nghi vi vic m phng lp hnh dng : lp hnh c c tnh Fractal t tng t. (Xem v chy th file fractal.exe)
ng cong Fractal khng th c m t nh ng hai chiu thng thng, mt Fractal khng th m t nh mt 3 chiu m i tng Fractal c thm chiu hu t. Mc d cc i tng Fractal trong tng trng hp c th ch cha mt s hu hn chi tit, nhng n cha ng bn cht cho php m t v hn chi tit, tc l ti mt thi im xc nh th l hu hn, nhng xt v tng th l v hn v bn cht Fractal cho php phng i ln mt mc bt k mt chi tit ty .
Hin nay hnh hc Fractal v cc khi nim ca n tr thnh cng c trung tm trong cc lnh vc ca khoa hc t nhin nh: vt l, ha hc, sinh hc, a cht hc, kh tng hc, khoa hc vt liu ...
hiu th no l hnh hc Fractal, ta hy so snh vi hnh hc Euclide c in
Hnh hc Euclide
Hnh hc Fractal
1) Xut hin t rt lu, trn 2000 nm trc
1) Xut hin nm 1975 (nm nh ton hc Benoit Mandelbrot cng b cng trnh v tp Mandelbrot)
2) Vt th hnh hc Euclide c kch thc c trng
2) Khng c kch thc xc nh
3) Thch hp vi vic m t nhng thc th c to ra bi con ngi.
3) Thch hp m t nhng vt th trong t nhin
4) c m t bi cng thc (phng trnh tham s, phng trnh b mt, qu o ...)
4) c m t bi thut ton lp
Hnh hc Euclide cho s m t gn gng, chnh xc nhng vt th c to bi con ngi (khi lp phng, mt tr, mt cu ... ) nhng khng thch hp khi dng m t nhng hnh dng t nhin v i hi mt khi lng tnh ton (s v bc ca phng trnh, lng bin ... ) rt cng knh m vn khng chnh xc. Cn s m t ca hnh hc Fractal (cc thut lp) li c bit thch hp vi vic to sinh bng my tnh. Thc th Fractal l kt qu ca mt qu trnh lp theo mt thut ton xc nh, c to sinh l tng bng my tnh v rt kh c to mt cch th cng.
II Mt s khi nim c bn
Cc thc th Fractal c 3 c tnh quan trng:
T tng t (self-similarity)
T tng t a phn (statistical self-similarity)
T Affine
Chng ta ch kho st c tnh u tin v quan trng nht: c tnh t tng t (self-similarity)
Mt thc th c c tnh t tng t nu n l hp ca N tp con khng giao nhau, mi tp con c to sinh t tp gc qua cc php bin i nh: co dn, dch chuyn, quay.
Pht biu mt cch hnh thc hn, xt tp S gm nhng im:
x = (x1, x2, ... xE) trong khng gian E chiu
Di php ng dng vi h s co 0 < T < 1, tp S bin thnh tp TS vi nhng im:
Tx = (Tx1, Tx2, ... TxE)
Tp S l t tng t nu S l hp ca N tp con khng giao nhau, mi tp con tng ng vi TA (c th sai khc mt php tnh tin, quay hoc v t). Khi s chiu ca S c nh ngha bi
T
N
D
1
log
log
=
Tp S cng c gi l t tng t nu cc tp con c to sinh t tp gc theo cc h s co Ti khc nhau. Trong trng hp ny s chiu D c tnh t cng thc sau
1
1
=
=
N
i
D
i
T
III V d minh ha
Ta hy xt mt v d minh ha tnh t tng t ca mt thc th Fractal kinh in: ng Von-Koch. ng Von- Koch (cn gi l Bng hoa tuyt Von-Koch nh trong Wikipedia) l mt trong nhng ng Fractal c cng b sm nht, vo nm 1904 bi nh ton hc Thy in Helge Von Koch. Thut ton lp cho ng Von-Koch gm nhng bc sau:
a) Mt on thng cho trc c chia lm 3 phn bng nhau
b) on gia c thay bi 2 on c chiu di tng ng
c) Mi on trong s 4 on ny li c thay bi 4 on mi c chiu di bng 1/3 on trc
d) Qu trnh c th lp li
c im ca ng Von-Koch
ng cong ny c tnh t tng t, mi phn nh khi c phng to c th to sinh li ging nh phn ln hn, ni cch khc n bt bin di s phng to hnh.
Qua mi bc lp, di ng von-Koch tng ln 4/3 ln
ng cong (sau v hn bc) c di v hn mc d n ch chim mt phn din tch hu hn ca mt phng
Khng t ct
Thut ton to sinh ng Von-Koch kh n gin, nhng khng c cng thc i s xc nh nhng im trn ng cong
S chiu ca ng Von-Koch l hu t:
...
26
,
1
)
3
log(
)
4
log(
1
log
log
=
=
T
N
D
D phn nh mc lan ta ca ng cong. Khi D bin thin t 1 n 2, ng cong bin thin t ng thng lan dn n lp y mt phng hn.
S bc lp
di phn on
S phn on
Tng chiu di ng Koch
1
1
1
1.00
2
1/3
4
1.33
3
1/9
16
1.77
4
1/27
64
2.37
5
1/81
256
3.16
6
1/243
1024
4.21
...
...
...
...
10
1/19683
262144
13.31
25
1/2.82e+11
2.81e+14
996.62
50
1/2.39e+23
3.17e+29
1324335.72
100
1/1.71e+47
4.02e+59
2338486807656.00
Chng trnh v ng Von-Koch
{ V 3 ng Von Koch gip nhau to thnh hnh bng tuyt}
Uses crt,graph;
{ h s i t sang radian }
Const
RADS = 0.017453293;
Var
i,gd,gm:integer;
temp:real;
Procedure Koch(dir:integer; len:real; n:integer);
Begin
if (n>0) then
begin
Koch(dir, len / 3, n-1);
dir := dir + 60;
Koch(dir, len / 3, n-1);
dir := dir - 120;
Koch(dir, len / 3, n-1);
dir := dir + 60;
Koch(dir, len / 3, n-1);
end
else
linerel(round(len * cos(RADS * dir)), round(len * sin(RADS * dir)));
End;
Begin
gd:=detect;
initgraph(gd,gm,'');
for i:=1 to 4 do
begin
setcolor(White);
rectangle(0, 0, getmaxx, getmaxy);
moveto(100,350); Koch(0, 420 , i);
setcolor(blue); Koch(-120, 420 , i);
setcolor(yellow); Koch(120, 420 , i);
readln;
cleardevice;
end;
closegraph;
End.
ng Hilbert do nh ton ha c David Hilbert cng b nm 1891. di ca n ti bc lp th n l
n
n
n
L
2
1
2
-
=
tc l di tng theo hm m i vi n
Chng trnh v ng Hilbert
{V cc ng Hilbert}
Uses Crt,Graph;
Var
gd,gm,h:integer;
Procedure A (i:integer);FORWARD;
Procedure B (i:integer);FORWARD;
Procedure C (i:integer);FORWARD;
Procedure D (i:integer);FORWARD;
Procedure A(i:integer);
Begin
if (i>=0) then
Begin
D(i-1); linerel(-h, 0);
A(i-1); linerel(0, -h);
A(i-1); linerel(h, 0);
B(i-1);
End;
End;
Procedure B(i:integer);
Begin
if (i>=0) then
Begin
C(i-1); linerel(0, h);
B(i-1); linerel(h, 0);
B(i-1); linerel(0, -h);
A(i-1);
End;
End;
Procedure C(i:integer);
Begin
if (i>=0) then
Begin
B(i-1); linerel(h, 0);
C(i-1); linerel(0, h);
C(i-1); linerel(-h, 0);
D(i-1);
End;
End;
Procedure D(i:integer);
Begin
if (i>=0) then
Begin
A(i-1); linerel(0, -h);
D(i-1); linerel(-h, 0);
D(i-1); linerel(0, h);
C(i-1);
End;
End;
Procedure Hilbert;
Var
i:integer;
Begin
for i:=0 to 5 do
begin
h:= 30 - 5 * i;
moveto(getmaxx - 130, getmaxy - 50);
A(i);
readln; cleardevice;
end;
End;
Begin
gd:=detect;
initgraph(gd,gd,'');
setcolor(YELLOW);
rectangle(0, 0, getmaxx, getmaxy);
Hilbert;
closegraph;
End.
Chng trnh v Nhn s (Sphinx)
{ V con nhn s Sphinx }
Uses Crt,Graph;
{ h s i t sang radian }
Const
RADS = 0.017453293;
Var
curangle,curx, cury:real;
gd,gm:integer;
Procedure lineforward(angle, length:real);
Begin
curangle :=curangle+ angle;
curx := curx + length*cos(curangle*RADS);
cury := cury + length*sin(curangle*RADS);
lineto(round(curx), round(cury));
End;
Procedure moveforward(angle,length:real);
Begin
curangle := curangle + angle;
curx := curx + length*cos(curangle*RADS);
cury := cury + length*sin(curangle*RADS);
lineto(round(curx), round(cury));
End;
Procedure Sphinx(angle, length: real; level,leftright:integer);
Var
len4, len2, len1, oldx, oldy, oldangle: real;
Begin
if (leftright0) then
Begin
if (level = 0) then
begin
len1 := length / 3;
lineforward(angle, length);
lineforward(-120,len1*2);
lineforward(-120,len1);
lineforward(+60,len1);
lineforward(-60,len1);
end
else
begin
Sphinx(angle, length, 0, leftright);
len4 := length / 4;
Sphinx(240, len4, 0, 1);
moveforward(240, len4);
Sphinx(0, len4, 0, 1);
moveforward(240, len4);
Sphinx(0, len4, 0, 1);
moveforward(240, len4);
Sphinx(0, len4, 0, 1);
moveforward(240, len4);
moveforward(-120, len4*2/3);
Sphinx(0, len4, 0, 0);
moveforward(240, len4);
Sphinx(0, len4, 0, 0);
moveforward(-180, len4*2/3);
Sphinx(-120, len4, 0, 0);
moveforward(240, len4/3);
Sphinx(-240, len4, 0, 1);
moveforward(240, len4);
Sphinx(0, len4, 0, 1);
moveforward(240, len4);
Sphinx(-60, len4, 0, 0);
moveforward(-180, len4*2/3);
lineforward(-60, len4);
moveforward(60, len4/3);
moveforward(-120, len4);
Sphinx(-180, len4, 0, 0);
end;
end
else
begin
if (level = 0) then
begin
len1 := length / 3;
lineforward(angle, length);
lineforward(-120,len1);
lineforward(-60,len1);
lineforward(60,len1);
lineforward(-120,len1*2);
end
else
begin
Sphinx(angle, length, 0, leftright);
len4 := length / 4;
end;
end;
End;
Begin
curangle := 0.0;
gd:=detect;
initgraph(gd,gm,'');
moveto(10, 470);
curx := 10;
cury := 470;
Sphinx(0, 600, 1, 1);
readln;
closegraph;
End.
Chng trnh v Phong cnh (Fractal.exe)
Uses crt,graph;
Const
CLIP_ON = 1;
Var
n,c,t,mau:integer;
hs,go:real;
i,gd,gm:integer;
ch:char;
Function dau:integer;
Begin
if (random(2) = 0) then
dau:= -1
else
dau:= 1;
End;
Procedure cay(x,y:integer; h,g,gw:real; k:integer);
Var
x1,y1,i,j,d,leaf,c:integer;
dg,tt:real;
Begin
if (k > 0) then
for j:= 1 to (random(t) + t) do
begin
x1:= x + round(h * cos(g));
y1:= y + round(h * sin(g));
setcolor(DARKGRAY);
for i:= 0 to round((h/35)*(h/35)) do
begin
line(x + i, y, x1 + i, y1);
delay(10); {Ve cay cham de quan sat }
for d:= 1 to round((h/5)) do
begin
tt:= random(1);
putpixel(round((1-tt)*x+tt*x1+i),
round((1-tt)*y+tt*y1), LIGHTGRAY);
end;
end;
dg := gw/(2*n+1);
for i:= -n to n do
if (random(1000)*0.001 > 0.5) then
cay(x1,y1,h*(0.5+(random(1000)*0.001)/3),g+i*dg,gw*hs,k-1);
x := x1;
y := y1;
g := g + PI/18;
end
else
begin
setfillstyle(1,random(15));
setcolor(random(15));
for leaf:= 1 to 2 do
fillellipse(x+random(8)*dau,y+random(5)*dau,random(5)+2,random(2)+1);
for leaf:= 1 to 70 do
begin
case leaf of
0..20:
begin
putpixel(x+random(15)*dau,y+random(5)*dau,BLUE);
break;
end;
21..25:
begin
putpixel(x+random(15)*dau,y+random(5)*dau,LIGHTBLUE);
break;
end;
26..49:
begin
putpixel(x+random(15)*dau,y+random(5)*dau,LIGHTGREEN);
break;
end;
End;
End;
End;
End;
Procedure cloud(x,y:integer; Rx,Ry:real; k:integer);
Var
i:integer;
Begin
if (k > 0) then
for i:= 1 to 5 do
cloud(x+random(round(Rx)),y+random(round(Ry)),Rx*0.8,Ry*0.6,k-1)
else
for i:= 1 to round(sqrt(Rx*Ry)/3.5) do
putpixel(x+random(round(Rx)),y+random(round(Ry)),WHITE);
End;
Procedure phong;
Var
l,i:integer;
Begin
l := (getmaxy div 7) * 5;
mau:=random(15);
setfillstyle(1,mau);
bar(0,0,getmaxx,l);
setfillstyle(1,LIGHTGRAY);
bar(0,l,getmaxx,getmaxy);
for i:= 1 to 20000-1 do
case (random(8)) of
0..4:
begin
putpixel(random(getmaxx),l+random(getmaxy-l),GREEN);
break;
end;
5,6:
begin
putpixel(random(getmaxx),l+random(getmaxy-l),YELLOW);
break;
end;
7:
begin
putpixel(random(getmaxx),l+random(getmaxy-l),LIGHTRED);
break;
end;
end;
if (mauRED) then
Begin
if (mauBLACK) then
begin
setfillstyle(1,RED);
setcolor(RED);
end;
end
else
begin
setfillstyle(1,YELLOW);
setcolor(YELLOW);
end;
fillellipse(random(getmaxx div 2)+300,100,30,30);
for i:= 1 to 5 do
cloud(random(getmaxx),random(150)+10,random(60)+60,random(40)+20,5);
End;
BEGIN
randomize;
gd:=detect;
initgraph(gd,gm,'');
setviewport(0,0,getmaxx,getmaxy,CLIPON);
repeat
n := 1;
hs := 1.2;
go := PI /2.8;
t := 2;
phong;
cay(((getmaxx-100) div 5)+random(60),(getmaxy div 7)*6 +random(30)*dau,getmaxy div 6,-PI/2,go,5);
ch:=readkey;
until (ch=#27);
closegraph;
END.
Chng trnh v cy Pytago
{ Cy Pythagoras }
Uses Crt,Graph;
Const
{ 1 / sqrt(2) }
FCT = 0.7071067;
{ he so doi tu do sang radian }
RADS = 0.017453293;
Var
gd,gm:integer;
Procedure quadrat(x,y,a,angle:real);
Var
cp,sp:real;
Begin
setcolor(RED);
if (a < 35) then
setcolor(2);
if (a < 8) then
setcolor(7);
cp := a * cos(angle);
sp := a * sin(angle);
line(round(x), 200 - round(y), round(x + cp), 200 - round(y+sp));
line(round(x), 200 - round(y), round(x - cp), 200 - round(y+cp));
line(round(x+cp), 200 - round(y+sp), round(x - sp + cp), 200 - round(y+sp+cp));
line(round(x-sp), 200 - round(y+cp), round(x - sp + cp), 200 - round(y+sp+cp));
if (a > 2) then
Begin
quadrat(x - sp, y + cp, 3 * a / 5, angle + 0.93);
quadrat(x - sp + 3 * a / 5 * cos(angle + 0.93),
y + cp + 3 * a / 5 * sin (angle + 0.93), a * 4 / 5,
angle - 0.64);
End;
End;
Begin
gd:=detect;
initgraph(gd,gm,'');
setcolor(7);
quadrat(250, -120, 70, 0);
readln;
closegraph;
End.
Ca s
YhFen
F4
YbFen
F3
XdFen
F2
XgFen
F1
XgClot
C1
XdClot
C2
YbClot
C3
YhClot
C4
Tm nhn
Ca s
Tm nhn
F1
(Xr,Yr)
F3
F4
C1
C2
C3
C4
(Xe,Ye)
B
H
H
B
Ca s
Ca s
Tm nhn
Tm nhn
1001
1000
1010
0001
0101
Ca s
0000
0100
0010
0110
0110
0010
0100
0000
0101
0001
1010
1000
1001
a
b
m
n
j
f
g
e
c
d
h
i
2 trc khng ct ca s
2 trc u ct ca s: nguyn
trc Oy ct ca s: gi nguyn
trc Ox ct ca s: gi nguyn
V vch chia sai
V vch chia ng
C
A
B
dY
dX
Mo hnh: B/H ( B/H
Bolygone bc 184, gia s gc 10
Bolygone bc 192, gia s gc 10
00
200
400
600
800
1000
1200
1600
2000
Bolygone bc 2, gia s gc 200
a)
b)
c)
Quay 900 th nh nhau
C 4 quy tc (rules) thc cht ch l 1
1
5
4
3
2
1
tx=3; ty=1
tx=ty=3
Php t l
Php tnh tin trong mt phng
2
3
4
5
6
6
Php quay quanh mt im
1800
(1,3)
(3,3)
(3,1)
(1,1)
(4,1)
(6,1)
(10,3)
(12,3)
Php bin dng theo trc Ox, h s bin dng t =3
Php t l
Php tnh tin
z
x
y
y
x
z
z
x
y
y
z
x
x
z
y
Php quay quanh trc Oy
Php quay quanh trc Ox
Php quay quanh trc Oz
z
x
y
x
y
z
+
+
Xc nh chiu quay dng
(
PAGE
45
_1266074046.unknown
_1266136526.unknown
_1266222723.unknown
_1266237613.unknown
_1266257958.unknown
_1266335119.unknown
_1268375127.unknown
_1266258552.unknown
_1266245774.unknown
_1266223727.unknown
_1266223971.unknown
_1266237481.unknown
_1266222733.unknown
_1266171875.unknown
_1266173457.unknown
_1266152231.unknown
_1266075372.unknown
_1266075588.unknown
_1266135752.unknown
_1266075428.unknown
_1266075258.unknown
_1266075293.unknown
_1266075050.unknown
_1266072602.unknown
_1266073138.unknown
_1266073233.unknown
_1266072864.unknown
_1262426754.unknown
_1266071360.unknown
_1266071710.unknown
_1262427057.unknown
_1266070729.unknown
_1262426796.unknown
_1262426207.unknown
_1262426372.unknown
_1250153239.unknown
_1250232337.unknown
_1250251813.unknown
_1250153043.unknown