Tải bản đầy đủ (.docx) (13 trang)

Bài tập lớn kỹ thuật đồ họa và thực tại ảo IT32

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 (176.68 KB, 13 trang )

VIỆN ĐẠI HỌC MỞ HÀ NỘI

KHOA CÔNG NGHỆ THÔNGTIN

BÀI TẬP LỚN
MÔN KỸ THUẬT
ĐỒ HỌA VÀ THỰC TẠI ẢO(IT32)
Họ và tên sinh viên:
Lớp:
Mã sinh viên:



3

BÀI TẬP LỚN SỐ 1
Câu 1: (4 điểm) Trình bày giải thuật vẽ đường thẳng theo thuật toán DDA. Cho ví dụ minh
họa
Là thuật tốn tính tốn các điểm vẽ dọc theo đường thẳng dựa vào hệ số góc của
phương trình đường thẳng y = mx+b.

Trong đó:

m

Δy

Δx


y



 y2  y , xΔ
1

 x  x1 .
2

Nhận thấy tọa độ của điểm x sẽ tăng 1 đơn vị trên mỗi điểm vẽ, còn việc quyết định chọn
yi +1 là yi +1 hay yi sẽ phụ thuộc vào giá trị sau khi làm trịn của tung độ y. Tuy nhiên, nếu tính
trực tiếp giá trị thực của y ở mỗi bước từ phương trình y = mx+b thì cần một phép tốn nhân và một
phép toán cộng số thực: yi +1 = mxi +1 + b = m(xi + 1) + b = mxi + b + m

Để cải thiện tốc độ, người ta khử phép nhân trên số thực. Ta có:
yi = mxi + b ⇒ yi +1 = yi + m →int(yi +1)
Có 2 khả năng:
 0xi +1 = xi + 1,
yi +1 = yi + m→int(yi +1)
 m>1:
xi +1 = xi + 1/m → int(xi+1), yi +1 = yi + 1


4

Hai trường hợp này dùng để vẽ một điểm bắt đầu từ bên trái đến điểm cuối cùng bên phải của đường
thẳng (xem hình). Nếu điểm bắt đầu từ bên phải đến điểm cuối cùng bên trái thì xét ngược lại :
 0 m>1: xi +1 = xi - 1/m → int(xi+1), yi +1 = yi - 1

Hai dạng đường thẳng có 0

Tương tự, có thể tính tốn các điểm vẽ cho trường hợp m<0: khi |m|<=1 hoặc |m|>1

#define Round(a) int(a+0.5)
int Color = GREEN;
void LineDDA (int x1, int y1, int x2, int y2)
{

Ví dụ: Áp dụng thuật tốn DDA vẽ đoạn thẳng từ điểm (2,2) đến
int x = x1; float y = y1;

điểm (8,4) m=2/6=0.33

float m = float(y2-y1)/(x2-x1); putpixel(x, Round(y), Color);
for(int i=x1; i{
x++;
y +=m;
putpixel(x, Round(y), Color);
}
}


5

i

xi

yi


y

0

2

2

2

1

3

2

2.33

2

4

3

2.66

3

5


3

3

4

6

3

3.33

5

7

4

3.66

6

8

4

4

Câu 2: (6 điểm) Sử dụng ngôn ngữ thực tại ảo VRML vẽ cái bàn như sau (kích thước
1200*600*750mm)

#VRML V2.0 utf8
#matban
Transform {
translation

000

rotation 0 0 1 0
children [


6

Shape {
appearance Appearance {
material Material {diffuseColor
}
geometry Box {
size 120 5 60
}
}
]
}
#chan1
Transform {
translation

-58.5 -37.5 -28.5

rotation 0 0 1 0

children [
Shape {
appearance Appearance {
material Material {diffuseColor
}
geometry Box {
size 3 70 3
}
}
]
}
#chan2
Transform {
translation

58.5 -37.5 -28.5

rotation 0 0 1 0

1 1 1}

1 1 0}


7

children [
Shape {
appearance Appearance {
material Material {diffuseColor


1 1 1}

}
geometry Box {
size 3 70 3
}
}
]
}
#chan3
Transform {
translation

58.5 -37.5 28.5

rotation 0 0 1 0
children [
Shape {
appearance Appearance {
material Material {diffuseColor
}
geometry Box {
size 3 70 3
}
}
]
}
#chan4
Transform {

translation

-58.5 -37.5 28.5

1 1 1}


8

rotation 0 0 1 0
children [
Shape {
appearance Appearance {
material Material {diffuseColor

1 1 1}

}
geometry Box {
size 3 70 3
}
}
]
}
#thanh_ngang1
Transform {
translation

-58.5 -72 0


rotation 0 0 1 0
children [
Shape {
appearance Appearance {
material Material {diffuseColor
}
geometry Box {
size 3 3 60
}
}
]
}
#thanh_ngang2

1 1 1}


9

Transform {
translation

58.5 -72 0

rotation 0 0 1 0
children [
Shape {
appearance Appearance {
material Material {diffuseColor
}

geometry Box {
size 3 3 60
}
}
]
}

1 1 1}


10


11


12


13



×