Tải bản đầy đủ (.doc) (4 trang)

Sự chuyển động trên ảnh hai chiều

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (54.39 KB, 4 trang )

Sự chuyển động trên ảnh hai chiều
I. Bài toán
Cho ảnh nền I, kích thớc MìN, và ảnh đối tợng D, kích thớc aìb, chứa một
số trạng thái mô tả một chuyển động của đối tợng. Hãy thể hiện sự chuyển
động của đối tợng trên nền I.
Ví dụ, trong hình 2 là ảnh nền I và trong hình 1 là ảnh đối tợng D gồm 4
trạng thái. Các trạng thái này thể hiện sự di chuyển của con sâu đo.
II. Thuật toán
1. Cắt các trạng thái của đối tợng thành các frames
Các frames đợc lu vào các biến D(1) , ,D(qm), với qm là số trạng thái.
Hình 1. ảnh đối tợng D gồm 4 trạng thái
Hình 2. ảnh nền I
Hình 3. Các frames của đối tợng D
2. Yêu cầu kỹ thuật khi vẽ các frames trên ảnh nền I: Chỉ vẽ phần của đối
tợng, không vẽ phần nền của đối tợng. Nếu vẽ phần nền của đối tợng,
ảnh nền sẽ bị hỏng.
Nếu vẽ frame chứa ảnh đối tợng nh hình 4.b trên nền I thì nền sẽ bị phá vỡ
(hình 4.d). Yêu cầu đặt ra là vẽ frame chứa đối tợng trên nền sao cho nền
không bị phá vỡ.
Cách giải quyết:
1. Cách giải quyết thứ nhất:
Trong trờng hợp nền của frame đợc biết trớc, có số hiệu b. Kí hiệu
chiều cao và chiều rộng của frame là a và br. Khi vẽ frame D(q) trên I,
xét từng điểm ảnh trên D(q): nếu điểm đang đợc xét trên D(q) khác màu
với b thì vẽ; nếu có màu là b thì không vẽ:
For i:=1 to a do
For j:=1 to br do
If D(q)[i,j] <> b Then Vẽ điểm tơng ứng với màu D(q)[i,j].
Hình 4. a) ảnh nền I; b) Frame chứa đối tợng; d) Vẽ frame chứa đối tợng
trên nền I; e) Nền I chứa đối tợng theo đúng yêu cầu đặt ra không phá vỡ
nền.


Theo cách giải quyết thứ nhất:
1. Đọc và vẽ ảnh nền I;
2. Xác định đờng đi của đối tợng;
3. Tính chiều cao H và chiều rộng W của mỗi frame;
4. Đọc ảnh đối tợng vào các frames D(1), D(2), , D(qm)
5. Vị trí đầu tiên x := 1; y:= y0;
6. Frame đầu tiên q:=1;
7. Repeat
a) Cắt nền ở vị trí (x,y)-(x+W-1,y+H-1) vào biến NB;
b) Vẽ frame D(q) từ vị trí (x,y);
c) Delay(?);
d) Vẽ nền NB từ vị trí (x,y);
e) Tính vị trí mới x := (x+1) mod 320 chẳng hạn;
f) Tính frame mới q := (q +1) mod qm ;
Until KeyPressed;
2. Cách giải quyết thứ hai:
1. Từ ảnh D tạo ra Mask M (hình 5.a) sao cho phần của đối tợng có màu
số hiệu 0, màu của nền frame có số hiệu 255 hoăc 15 (nếu số màu là
16) và Sprite S (hình 5.b) sao cho mầu của đối tợng trên frame đợc
giữ nguyên và màu nền trên frame có số hiệu 0.
2. Bớc vẽ bảo toàn nền:
a) Vẽ Mask M với phép toán AND: khi này phần tơng ứng với đối
tợng trên nền I chuyển thành màu số 0 (nền I AND với 0) và
phần nền I tơng ứng với nền frame đợc giữ nguyên (nền I AND
với 255 hoặc 15);
Hình 5. Tạo ra Mask (M) và
Sprite (S)
b) Vẽ Sprite S với phép toán OR: khi này phần tơng ứng với đối t-
ợng trên nền I chính là đối tợng I (nền I là 0 OR với đối tợng)
và phần nền I tơng ứng với nền frame đợc giữ nguyên ( nền I

OR với 0);
- Chứng minh 2 cách vẽ này bảo toàn nền

×