1. Trang chủ
  2. » Công Nghệ Thông Tin

Tài liệu Chương 1_ Cơ sở đồ họa (ky thuat do hoa) pdf

56 486 2
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Các giải thuật sinh thực thể cơ sở
Người hướng dẫn Nguyễn Viết Cường
Trường học Trường Đại học Húc Môn TP. Hồ Chí Minh
Chuyên ngành Cơ sở đồ họa
Thể loại Giáo trình
Năm xuất bản 2009
Thành phố TP. Hồ Chí Minh
Định dạng
Số trang 56
Dung lượng 1,14 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

NỘI DUNG• Các đối tượng đồ họa cơ sở – Hệ tọa độ thực và hệ tọa độ thiết bị – Điểm và đoạn thẳng • Các giải thuật xây dựng các thực thể cơ sở – Giải thuật vẽ đường thẳng thông thường – T

Trang 2

NỘI DUNG

Các đối tượng đồ họa cơ sở

– Hệ tọa độ thực và hệ tọa độ thiết bị

– Điểm và đoạn thẳng

Các giải thuật xây dựng các thực thể cơ sở

– Giải thuật vẽ đường thẳng thông thường

– Thuật toán DDA (Digital Differential Analizer) – Giải thuật Bresenham

– Giải thuật trung điểm-Midpoint

– Giải thuật sinh đường tròn

– Giải thuật sinh đường tròn Midpoint

– Giải thuật sinh đường ellipse

– Giải thuật sinh ký tự

– Giải thuật sinh đa giác (Polygon)

Trang 3

HỆ TỌA ĐỘ THẾ GiỚI THỰC VÀ THIẾT BỊ

Các toạ độ thế giới thực cho phép người sử dụng bất

kì một thứ nguyên (dimension) qui ước: foot, cm, nm, km, inch tuỳ ý

Trang 4

HỆ TỌA ĐỘ THẾ GiỚI THỰC VÀ THIẾT BỊ

System)

Hệ toạ độ thiết bị là hệ toạ độ được dùng bởi một thiết

bị xuất cụ thể nào đó như máy in, màn hình

Các điểm được biểu diễn bởi cặp toạ độ (x,y), nhưng x,y  N Điểm trong toạ độ thực được định nghĩa liên tục, còn trong toạ độ thiết bị thì rời rạc do tính chất của tập các số tự nhiên Các toạ độ (x,y) có giới hạn trong một khoảng nào đó

Trang 5

HCMUS - 2009 Bài giảng Đồ họa máy tính – Đặng Nguyễn Đức Tiến - Vũ Quốc Hoàng - Lê Phong 5

Trang 6

HCMUS - 2009 Bài giảng Đồ họa máy tính – Đặng Nguyễn Đức Tiến - Vũ Quốc Hoàng - Lê Phong 6

Quy ước bàn tay phải Quy ước bàn tay trái

HỆ TỌA ĐỘ THẾ GiỚI THỰC VÀ THIẾT BỊ

Trang 9

+ Biểu diễn tường minh: y = f(x)

– Một đoạn thẳng được xác định nếu biết 2 điểm thuộc nó Phương trình đoạn thẳng đi qua 2 điểm P (x1,y1) và Q(x2,y2) như sau:

= y1- kx1 Đoạn chắn trên trục y

y = m  x (tức là khi x thay đổi thì y thay đổi theo)

Trang 10

ĐIỂM VÀ ĐOẠN THẲNG

+ Biểu diễn không tường minh: ax+by+c=0

– Ta có

(y2-y1)x - (x2-x1)y + (x2-x1)y1 - (y2-y1)x1 = 0

 (y2-y1)x - (x2-x1)y + x2y1 - x1y2 = 0

hay rx + sy + t = 0

 s = -(x2-x1 )

 r = (y2-y1) và t = x2y1 - x1y2

+ Biểu diễn thông qua tham số:

– x(u) = (1- u )x1 + u x2

– y (u)= (1- u )y1 + u y2

Trang 11

GIẢI THUẬT VẼ ĐOẠN THẲNG THÔNG THƯỜNG

• Nguyên lý chung: cho một thành phần toạ độ x hay y

biến đổi theo từng đơn vị và tính độ nguyên còn lại sao cho gần với toạ độ thực nhất

Ta có

1

1 1

2

1

xx

Trang 12

GIẢI THUẬT VẼ ĐOẠN THẲNG THÔNG THƯỜNG

• Lưu đồ giải thuật:

Input: x 1 ,

x 2 , y 1 , y 2 , color

x =x 1, y = y 1

x <

x2

y = y + (x-x 1 )*(y 2 -y 1 )/(x 2 -x 1 ) putpixel(x, round(y),

Trang 13

THUẬT TOÁN DDA (Digital Differential Analizer)

Trang 14

THUẬT TOÁN DDA (Digital Differential Analizer)

• Việc quyết định chọn yi+1 là yi hay yi+1 dựa vào đường thẳng y=mx+b

• Tính toạ độ điểm (xi+1,y) thuộc về đoạn thẳng thực, tiếp đó yi+1 sẽ trị sau khi làm tròn tung độ y

y=m(xi+1)+b=yi+m

yi+1= round(y)

Trang 15

THUẬT TOÁN DDA (Digital Differential Analizer)

• Lưu đồ thuật toán

x = x 1 , y = y 1 m=(y 2 -y 1 )/(x 2 -x 1 ) putpixel(x,round

(y),c) x<x 2 x=x+1; y=

y+m putpixel(x,round

Trang 16

THUẬT TOÁN DDA (Digital Differential Analizer)

• Tốc độ xử lý nhanh hơn phương pháp vẽ thông

thường do đã khử được phép nhân với số thực

• Hạn chế về mặt tốc độ do phải thực hiện phép cộng

số thực và làm tròn

Trang 17

THUẬT TOÁN BRESENHAM

• Giả sử đường cong được xấp xỉ

thành các điểm lần lượt là (xi,yi)

Các điểm này có tọa độ nguyên

và được hiển thị trên màn hình.

• Bài toán đặt ra là nếu biết được

tọa độ (xi,yi) của bước thứ i, thì

điểm ở bước i+1 là (x i+1 ,y i+1 ) sẽ

được xác định như thế nào

Trang 18

THUẬT TOÁN BRESENHAM

của yi+1 phụ thuộc vào d1

và d2 (hay dấu của d1 - d2):

d 2

d 1

(x i+1,y=f(xi+1 ))

Trang 19

THUẬT TOÁN BRESENHAM

pi+1 – pi = (2Dy xi+1 - 2Dx yi+1 + C) - (2Dy xi - 2Dx yi + C)

= 2Dy – 2Dx(yi+1 – yi)

Từ đây, ta suy ra cách tính pi+1 theo pi:

– Nếu p i <0 thì y i+1 =y i nên p i+1 = p i + 2Dy

– Ngược lại thì yi+1=yi+1 nên pi+1 = pi + 2Dy – 2Dx

Giá trị p đầu tiên được tính tại (x1, y1) là p1 = 2Dy x1 -2Dx

y1 + C = 2Dy – Dx

Trang 21

và mang giá trị nguyên

- Tính pi+1 theo pi theo

d 2

d 1

(x i+1,y=f(xi+1 ))

Trang 22

GIẢI THUẬT TRUNG ĐIỂM –Mid Point

Xét trung điểm M của đoạn

Công thức đơn giản hơn, tạo

được các điểm tương tự như

với Bresenham

d = f(xi + 1, yi + 1/2) là trung điểm của đoạn AB

Trang 23

GIẢI THUẬT TRUNG ĐIỂM –Mid Point

So sánh hay kiểm tra M sẽ được thay bằng việc xét giá trị d

- d > 0 điểm B được chọn khi đó yi+1 = yi

- nếu d<0 điểm A được chọn khi đó yi+1=yi + 1 Trường hợp d = 0 chúng ta có thể chọn điểm bất kỳ hoặc

A, hoặc B

Sử dụng phương pháp biểu diễn không tường minh ta có: f(x,y)= ax +by +c =0 (1)

Trang 24

GIẢI THUẬT TRUNG ĐIỂM –Mid Point

Sử dụng phương pháp biểu diễn tường minh:

dx =x2-x1 dy =y2-y1

y= (dy/dx)x +B hay f(x,y)=0= xdy - ydx +Bdx (2)

So sánh (1) và (2)

a=dy b=-dx c= Bdx

Có f(x,y)=0 với mọi (x,y) thuộc đường thẳng

Trang 25

GIẢI THUẬT TRUNG ĐIỂM –Mid Point

+ Nếu chọn A (d<0) thì M sẽ tăng theo 2 hướng x,y

di+1=f(xi+2,yi+3/2) = a(xi+2) +b(yi +3/2) +c

di+1 – di = a+b Hay di+1 = di + dy - dx

+ Nếu chọn B (d>0) thì M sẽ tăng theo x

di+1=f(xi+2,yi+1/2) = a(xi+2) +b(yi +1/2) +c

di+1 - di = a Hay di+1 = di + dy

Trang 26

GIẢI THUẬT TRUNG ĐIỂM –Mid Point

No

Bắt đầu

Trang 27

GIẢI THUẬT SINH ĐƯỜNG TRÒN

Trong hệ tọa độ Descartes, phương trình đường tròn bán kính R có dạng:

Với tâm O(0,0) : x2 + y2 = R2

Với tâm C(xc,yc): (x - xc )2 + (y - yc )2 = R2

Trong hệ tọa độ cực :

x = xc + R.cosθ

y = yc + Y.sinθ với θ  [0, 2π] ]

Do tính đối xứng của đường tròn C (xem sau) nên ta chỉ cần vẽ 1/8 cung tròn, sau đó lấy đối xứng qua 2 trục tọa độ

và 2 đường phân giác thì ta vẽ được cả đường tròn

Trang 28

GIẢI THUẬT SINH ĐƯỜNG TRÒN

Trang 34

• p0 = ?

GIẢI THUẬT SINH ĐƯỜNG TRÒN

Trang 35

Bắt đầu

x = 0; y = R;

P = 5/4 - R putpixel(x,y,c)

Trang 36

GIẢI THUẬT SINH ĐƯỜNG ELLIPSE

Tính đối xứng được thực hiện trên 4 cách

Vector giao với tiếp tuyến gradient =1

Ta có tiếp tuyến với cung tròn (độ dốc) = -1= dy/dx = - fx/fyTrong đó fx=2b2x đạo hàm riêng phần của f(x,y) với x

Và fy=2a2y đạo hàm riêng phần của f(x,y) với y

Trang 37

GIẢI THUẬT SINH ĐƯỜNG ELLIPSE

Giả sử ta chỉ xét trên góc phần tư thứ nhất: giả sử ta chia cung từ (0,b) đến (a,0) tại Q, có độ dốc -1

Trên phần 1: x thay đổi thì y thay đổi theoTrên phần 2: y thay đổi thì x thay đổi theo+ Xét trên phần 1:

Bắt đầu từ (0,b), bước thứ i (xi,yi) chọn tiếp

A(xi+1, yi)B(xi+1,yi-1)Tham số quyết định:

Pi = f(xi+1,yi-1/2) = b2(xi+1)2 + a2(yi-1/2)2 -a2b2

Pi+1 = f(xi+1+1,yi+1-1/2) = b2(xi+1+1)2 + a2(yi+1-1/2)2 -a2b2

Pi+1- Pi =b2((xi+1+1)2 - (xi+1)2 )+ a2((yi+1-1/2)2 - (yi-1/2)2)

Pi+1 = Pi + 2b2xi+1+ b2 + a2((yi+1-1/2)2 - (yi-1/2)2 )

Trang 38

GIẢI THUẬT SINH ĐƯỜNG ELLIPSE

- Tính P 1 ? tại (0,b)

P 1 = f(x 1 +1,y 1 -1/2) = b 2 + a 2 (b-1/2) 2 -a 2 b 2

P1 = b 2 - a 2 b +a 2 /4

Trang 39

GIẢI THUẬT SINH ĐƯỜNG ELLIPSE

+ Xét trên phần 2:

Ta lấy toạ dộ của Pixel sau cùng trong phần 1 của đường cong để tính giá trị ban đầu cho phần 2

Giả sử pixel (xk,yk) vừa chuyển quét cuối cùng của phần

1 nhập vào bước j cho phần 2 (xj,yj)

Pixel kế tiếp có thể là:

C(xj,yj-1)D(xj+1, yj-1)Tham số quyết định:

qj = f(xj+1/2,yj-1) = b2(xj+1/2)2 + a2(yj-1)2 -a2b2

qj+1 = f(xj+1+1/2,yj+1-1)=b2(xj+1+1/2)2+ a2(yj+1-1)2-a2b2

qj+1 - qj = b2((xj+1+1/2)2-(xj+1/2)2)+ a2((yj+1-1)2 - (yj-1)2 )

qj+1 = qj + b2((xj+1+1/2)2 - (xj+1/2)2)+ a2- 2a2yj+1

Trang 40

GIẢI THUẬT SINH ĐƯỜNG ELLIPSE

- Nếu qj >=0 chọn C

yj+1=yj -1

xj+1= xj

qj+1 = qj + a2- 2a2(yj-1)Hay qj+1 = qj + a2(3 - 2yj )

- Tính q1?

q1 = f(xk+1/2,yk -1) = b2(xk+1/2)2 + a2(yk-1)2 -a2b2

Trang 41

GIẢI THUẬT SINH KÝ TỰ

Trong màn hình text, truy xuất các ký tự trên màn hình được hỗ trợ bởi phần cứng Các ký tự được lưu trữ trong bộ nhớ ROM, dưới dạng bitmap hay các ma trận ảnh Phần cứng sẽ đưa ký tự lên màn hình tại ví trí xác định, tính toán cuốn trang và xuống dòng.

Trong đồ hoạ:

+ Vector: định nghĩa các ký tự theo

những đường cong mềm bao ngoài của

Trang 42

GIẢI THUẬT SINH KÝ TỰ + Bitmap: định nghĩa mỗi ký tự với 1

font chữ cho trước là 1 ảnh bitmap

- Kích thước không đổi

+ Bitmap: sử dụng hàm copypixel (copy điểm ảnh) được

lưu trữ trong bộ nhớ cố định - Fontcache, đưa vào bộ nhớ đệm hiển thị Mỗi 1 ký tự như 1 ma trận 2 chiều của các điểm ảnh - mặt nạ.

Trang 43

GIẢI THUẬT SINH ĐA GIÁC

a Thuật giải vẽ đường bao đa giác

Việc biểu diễn đa giác thông qua:

Trang 44

GIẢI THUẬT SINH ĐA GIÁC

Đa giác lồi: là đa giác có đường thẳng nối bất ký 2 điểm bên trong nào của đa giác đều nằm trọn trong

đa giác Đa giác không lồi là đa giác lõm.

Các đường thẳng bao đa giác - cạnh của đa giác Các điểm giao của cạnh - đỉnh của đa giác Thông tin cần thiết để xác định đa giác:

- Số cạnh

- Toạ độ các đỉnh của đa giác

Trang 45

GIẢI THUẬT SINH ĐA GIÁC

Giải thuật:

Polygon (arrayx, arrayy,n)

{y

if (n<3) exit; //không phải đa giác exit;

for (i=1 ; i<= n-1; i++) // Vẽ N-1 cạnh giữa các đỉnh

line(arrayx[i],arrayy[i], arrayx[i+1], arrayy[i+1]);

line(arrayx[i+1],arrayy[i+1], arrayx[1], arrayy[1]);}

Trang 46

GIẢI THUẬT SINH ĐA GIÁC

b Các thuật toán tô miền kín đa giác

Lợi thế của hiển thị raster là: khả năng lưu trữ, copy, tô màu một vùng Có hai dạng vùng tô thường gặp đó là: tô bằng một màu thuần nhất (solid fill), tô theo mẫu tô (fill pattern) nào đó

Còn thiết bị vector thì hạn chế do các vùng tô màu tạo ra bởi một tập các đoạn thẳng sát nhau - làm chậm quá trình làm tươi

Trang 47

GIẢI THUẬT SINH ĐA GIÁC

+ Giải thuật đường biên (Boundary - fill Algorithm)

- Bắt đầu từ 1 điểm (x,y) trong vùng cần được tô màu:

+ Xác định màu điểm: getpixel(x,y,c)+ Tô màu putpixel(x,y,c)

- Bước tiếp: kiểm tra thuộc tính màu các điểm lân cận

+ điểm lân cận đã tô màu (exit)+ trùng với màu đường biên(exit)+ Nếu không thì tô màu

Các phương pháp xác định điểm lân cận

Trang 48

GIẢI THUẬT SINH ĐA GIÁC

Giải thuật tô màu đường biên:

void FloodFill (int x, int y, int in_color, int new_color)

{y

if (getpixel(x, y) == in_color) {y

putpixel(x, y, new_color);

FloodFill(x-1, y, in_color, new_color);

FloodFill(x+1, y, in_color, new_color); FloodFill(x,

y-1, in_color, new_color); FloodFill(x, y+y-1, in_color,

new_color);

}

}

Trang 49

GIẢI THUẬT SINH ĐA GIÁC

Thuật toán tô màu bằng dựa theo dòng quyét

- Tìm ytop, ybottom lần lượt là giá trị lớn nhất, nhỏ nhất của tập các tung độ của các đỉnh của đa giác đã cho

ytop = max{yyi,(xi,yi) P}, ybottom = min{yyi,(xi,yi) P}

- Ứng với mỗi dòng quét y=k, với k thay đổi từ ybottom đến

Trang 50

GIẢI THUẬT SINH ĐA GIÁC

Nhận xét

- Ứng với mỗi dòng quét không phải lúc nào tất cả các cạnh của đa giác cũng tham gia cắt dòng quét Do đó để cải thiện tốc độ cần phải có một cách nào đó để hạn chế được số cạnh cần tìm giao điểm ứng với mỗi dòng quét

- Tìm giao điểm giữa cạnh của đa giác và dòng quét sẽ thực hiện các phép toán phức tạp như: nhân chia

- Nếu số giao điểm tìm được giữa các cạnh đa giác và dòng quét là lẻ (điều này chỉ xảy ra khi dòng quét sẽ đi qua các đỉnh của đa giác) khi đó ta sẽ tính số điểm là 2 thì có thể

tô không chính xác Ngoài ra, việc tìm giao điểm của dòng quét với các cạnh nằm ngang là trường hợp đặt biệt

Trang 51

GIẢI THUẬT SINH ĐA GIÁC

Trang 52

Để giải quyết các vấn đề trên ta có các phương

ymin: giá trị nhỏ nhất trong 2 đỉnh của cạnh

xIntersect: hoành độ giao điểm của cạnh với dòng quét hiện đang xét

Dx PerScan: giá trị 1/m (m là hệ số góc của cạnh) Delta Y: khoảng cách từ dòng quét hiện hành tới đỉnh ymax

Trang 53

GIẢI THUẬT SINH ĐA GIÁC

Danh sách các cạnh kích hoạt AET: dùng để lưu các tập cạnh của đa giác có thể cắt ứng với dòng quét hiện hành và tập các điểm giao tương ứng Nó có một số đặc điểm:

Thay đối ứng với mỗi dòng quét đang xét, do đó danh sách này sẽ được cập nhật liên tục trong quá trình thực hiện thuật toán Đầu tiên ta có danh dách chứa toàn bộ các cạnh của đa giác gọi là ET (Edge Table) được sắp xếp theo thứ tự tăng dần của ymin, rồi sau mỗi lần dòng quét thay đổi sẽ di chuyển các cạnh trong ET thoả điều kiện sang AET.

Trang 54

GIẢI THUẬT SINH ĐA GIÁC

Các cạnh trong danh sách được sắp xếp theo thứ tự tăng dần của các hoành độ giao điểm để có thể tô màu các đoạn giao một cách dễ dàng.

Một dòng quét y=k chỉ cắt 1 cạnh của đa giác khi và chỉ khi k>=ymin và Delta Y >0 Chính vì vậy

mà với các tổ chức của ET (sắp theo thứ tự tăng dần của ymin) điều kiện để chuyển các cạnh từ ET sang AET sẽ là k>=ymin; và điều kiện để loại một cạnh

ra khỏi AET là Delta Y <=0

Trang 55

GIẢI THUẬT SINH ĐA GIÁC

+ Công thức tìm giao điểm nhanh

Nếu gọi xk,xk+1 lần lượt là các hoành độ giao điểm của một cạnh nào đó với các dòng quét y=k và y=k+1 ta có:

xk+1 - xk = 1/m ((k+1) - k) = 1/m hay xk+1= xk +1/m

Như vậy nếu lưu hoành độ giao điểm ứng với dòng quét trước lại, cùng với hệ số góc của cạnh, ta xác định được hoành độ giao điểm ứng với dòng quét kế tiếp theo công thức trên Nên thông tin của cạnh có 2 biến: DxPerScan , xIntersect k>=ymin; và điều kiện để loại một cạnh ra khỏi AET là DeltaY <=0

Trang 56

GIẢI THUẬT SINH ĐA GIÁC

+ Trường hợp dòng quét đi ngang qua một đỉnh:

Tính 1 giao điểm nếu chiều của 2 cạnh kề của đỉnh

đó có xu hướng tăng hay giảm

Tính 2 giao điểm nếu chiều của 2 cạnh kề của đỉnh

đó có xu hướng thay đổi, nghĩa là tăng- giảm hay giảm-tăng.

Ngày đăng: 15/12/2013, 02:15

HÌNH ẢNH LIÊN QUAN

Màn hình đồ hoạ trong Turbo C - Tài liệu Chương 1_ Cơ sở đồ họa (ky thuat do hoa) pdf
n hình đồ hoạ trong Turbo C (Trang 8)

TỪ KHÓA LIÊN QUAN

w