Professional Documents
Culture Documents
ª Thieát bò queùt raster (refresh CRT, raster-scan display): ñaõ ñöôïc trình
baøy
ª Thieát bò hieån thò ñoaïn thaúng (line-drawing display): chæ hieån thò ñöôïc
ñoaïn thaúng
– Pen plotter
ª Leänh cô baûn:
Pen_Up
Pen_Down
Go_To(x, y)
Get_Pen(i)
– Vector-refresh display
(1023, 767)
caây vieát
x
(0, 0)
(x1, y1)
x
1.
p. 37 Chöong 3: Caùc thieát bò ñoà hoïa vaø söï 5
ñieàu khieån chuùng
(x1, y1)
x
1.
procedure Box(x1, y1, x2, y2 : real);
{Veõ hình chöõ nhaät coù ñænh döôùi beân traùi (x1, y1)
vaø ñænh treân beân phaûi (x2, y2) trong NDC}
begin
LineNDC_(x1, y1, x2, y1);
LineNDC_(x2, y1, x2, y2);
LineNDC_(x2, y2, x1, y2);
LineNDC_(x1, y2, x1, y1)
end; {Box}
Chöong 3: Caùc thieát bò ñoà hoïa vaø söï 6
ñieàu khieån chuùng
AÙnh xaï NDC vaøo moät thieát bò
ª Hieån thò moät ñieåm trong NDC thaønh moät ñieåm cuûa thieát bò
ª AÙnh xaï sao cho NDC aùnh xaï thaønh hình vuoâng ôû giöõa lôùn nhaát cuûa
thieát bò hieån thò
NDC → thieát bò
( x, y ) α (dx, dy )
dx = Ax + B
y
dy = Cy + D Hình vuoâng
lôùn nhaát
NDC
1.
Q
P dy
y Display
x dx
x 1.
Chöong 3: Caùc thieát bò ñoà hoïa vaø söï 7
ñieàu khieån chuùng
ymax 767
1.
NDC
dx
128 895 1023
x xmax
1.
Hình vuoâng
lôùn nhaát
y dy
ymax 767
1.
NDC
dx
128 895 1023
x xmax
0. 1.
ª Thuû tuïc veõ töø NDC leân hình vuoâng ôû giöõa lôùn nhaát cuûa thieát bò
procedure LineNDC_(x1, y1, x2, y2 : real);
{aùnh xaï leân hình vuoâng lôùn nhaát. Giaû söû Maxy ≤ Maxx}
const Maxx = 1023; phuï thuoäc thieát bò
Maxy = 767;
var dx1, dy1, dx2, dy2 : integer;
offset : real;
begin
offset := (Maxx - Maxy)/2.0;
dx1 := round(Maxy*x1 + offset); {aùnh xaï leân hình vuoâng }
dy1 := round(Maxy*y1); {lôùn nhaát }
dx2 := round(Maxy*x2 + offset);
dy2 := round(Maxy*y2);
Pen_Up;
Go_To(dx1, dy1);
Pen_Down;
Go_To(dx2, dy2)
end;
Code fragment 2.3 Chöong 3: Caùc thieát bò ñoà hoïa vaø söï 10
ñieàu khieån chuùng
AÙnh xaï töø NDC leân toaøn thieát bò
R = Heä soá tyû leä (cuûa moät hình chöõ nhaät) = cao
roäng
ª Giaû söû R cuûa thieát bò < 1.
ª Laøm theá naøo ñeå taän duïng ñöôïc caû beà maët cuûa thieát bò?
y RNDC Rdev
NDC
1.
x
1.
Giaûi phaùp: Chæ söû duïng moät phaàn thích hôïp cuûa NDC
dx = Ax + B
⇒ dx = xmax x
dy = Cy + D dy = xmax y
y RNDC Rdev
NDC
1.
x
0 1.
Code fragment 2.4 Chöong 3: Caùc thieát bò ñoà hoïa vaø söï 13
ñieàu khieån chuùng
Polyline
Code fragment 2.6 Chöong 3: Caùc thieát bò ñoà hoïa vaø söï 14
ñieàu khieån chuùng
Polymarker
♣
♣
♣
♣
Text
ª Veõ aûnh chæ goàm caùc ñoaïn thaúng duøng thuû tuïc LineNDC_( )
ª LineNDC_(x1, y1, x2, y2 : real)
procedure House;
begin
LineNDC_(0.5, 0.7, 0.8, 0.5); {veõ daùng cuûa nhaø}
LineNDC_(0.8, 0.5, 0.8, 0.1);
LineNDC_(0.8, 0.1, 0.2, 0.1);
LineNDC_(0.2, 0.1, 0.2, 0.5);
LineNDC_(0.2, 0.5, 0.5, 0.7);
LineNDC_(0.35, 0.1, 0.35, 0.3); {veõ cöûa}
LineNDC_(0.35, 0.3, 0.5, 0.3);
LineNDC_(0.5, 0.3, 0.5, 0.1)
end;
Code fragment 3.1 Chöong 3: Caùc thieát bò ñoà hoïa vaø söï 17
ñieàu khieån chuùng
ª Ví duï moät chöông trình ñoà hoïa goïi thuû tuïc House
program DrawHouse;
<khai baùo House, LineNDC_, StartGraphics,...>
begin
StartGraphics;
House;
ExitGraphics
end.
ª Moät giôùi haïn cuûa thuû tuïc House laø khoâng tieän söû duïng laïi
ª Tham soá hoùa thuû tuïc House ñeå deã söû duïng laïi.
Code fragment 3.3 Chöong 3: Caùc thieát bò ñoà hoïa vaø söï 19
ñieàu khieån chuùng
LineNDC_(x, y, x, Top);
LineNDC_(x , Top, Door_right, Roof_Top);
LineNDC_(Door_right, Roof_Top, Right, Top);
LineNDC_(Right, Top, Right, y);
LineNDC_(Right, y, x, y);
LineNDC_(Door_right, y, Door_right, Door_Top);
LineNDC_(Door_right, Door_Top, Door_Left, Door_Top); {veõ cöûa}
LineNDC_(Door_Left, Door_Top, Door_Left, y)
end;
end;
Code fragment 3.3 Chöong 3: Caùc thieát bò ñoà hoïa vaø söï 20
ñieàu khieån chuùng
Thuû tuïc ñöôïc tham soá hoùa
– Muïc ñích: töø moâ hình suy dieãn ñöôïc haønh vi cuûa ñoái töôïng hay
heä thoáng.
Chöong 3: Caùc thieát bò ñoà hoïa vaø söï 22
ñieàu khieån chuùng
Moâ hình vaø toïa ñoä thöïc
ª Vieäc nhìn (viewing): quaù trình veõ moät pheùp nhìn (view) cuûa moâ hình
leân moät thieát bò. Ba vaán ñeà:
– Phaàn naøo cuûa moâ hình/ñoái töôïng caàn ñöôïc veõ?
– Veõ ôû ñaâu treân thieát bò?
– Veõ lôùn côõ naøo? (Bieán ñoåi toïa ñoä thöïc sang NDC)
Vuøng nhìn
Cöûa soå
1.
ª Cöûa soå vaø vuøng nhìn coù caùc caïnh song song vôùi caùc truïc toïa ñoä (tröø khi ñöôïc
yeâu caàu khaùc)
ª Kích thöôùc vaø vò trí cuûa cöûa soå laø tuøy yù
ª Vuøng nhìn phaûi naèm trong NDC
ª Heä soá tyû leä cuûa cöûa soå vaø vuøng nhìn khoâng caàn phaûi baèng nhau.
R
Cöûa soå
Vuøng nhìn
1.
Chöong 3: Caùc thieát bò ñoà hoïa vaø söï 25
ñieàu khieån chuùng
ª Pheùp aùnh xaï: ( x, y ) α ( dx, dy ) thoõa bieåu thöùc tuyeán tính vaø aûnh
cuûa W laø V
dx = sx x + tx
dy = sy y + ty
Heä toïa ñoä thöïc dy NDC
y
V
W l: left Vt
Wt r: right
(x, y) b: bottom
(dx, dy)
t: top
Wb
Vb
x dx
Wl Wr Vl Vr
ª Töông töï, coù ñöôïc heä thoáng phöông trình baäc nhaát vôùi 2 aån soá sy vaø ty
Töø ñoù xaùc ñònh ñöôïc sy vaø ty .
Caùc heä soá cuûa aùnh xaï töø cöûa soå tôùi vuøng nhìn
Vr − Vl
sx =
Wr − Wl
Vt − Vb
sy =
Wt − Wb
VlWr − WlVr
tx =
Wr − Wl
VbWt − WbVt
ty =
Wt − Wb
Code fragment 3.4 Chöong 3: Caùc thieát bò ñoà hoïa vaø söï 29
ñieàu khieån chuùng
Hieän thöïc aùnh xaï töø cöûa soå leân vuøng nhìn
ª Cho cöûa soå W vaø vuøng nhìn V, thuû tuïc sau xaùc ñònh caùc heä soá cuûa
aùnh xaï töø W leân V:
ª AÙnh xaï ñieåm trong toïa ñoä thöïc pWorld : point ñeán ñieåm NDC : point
Code fragment 3.5 Chöong 3: Caùc thieát bò ñoà hoïa vaø söï 30
ñieàu khieån chuùng
Veõ ñoaïn thaúng
Code fragment 3.7 Chöong 3: Caùc thieát bò ñoà hoïa vaø söï 31
ñieàu khieån chuùng
ª Caét ñi caùc phaàn cuûa ñoaïn thaúng naèm ngoaøi cöõa soå
ª Baøi toaùn: xeùn ñoaïn thaúng sao cho phí toån thôøi gian thaáp.
Window
W p1
W.t
A d
W.b e
p2
x
W.l W.r
B p2
D
A
p1
ª 1. Hieän thöïc caùc thuû tuïc LineNDC_( ) vaø LineNDC( ) cho maøn hình
coù kích thöôùc cao = 640 vaø roäng = 480 pixel. Caùc thuû tuïc caàn taän
duïng ñöôïc caû maøn hình.
ª 2. Hieän thöïc thuû tuïc Clip( ).