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

Bài giảng đồ họa máy tính thuật toán vẽ đường thẳng bresenham

15 618 0

Đ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

Định dạng
Số trang 15
Dung lượng 301,5 KB

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

Nội dung

Thuật toán vẽ đường thẳng Bresenham... Mối tương quan giữa X & Y khi độ lớn hệ số góc nhỏ hơn 1  x tăng 1 và y giữ nguyên hay tăng 1 Điều này bảo đảm cho đường thẳng Điều này bảo đảm ch

Trang 1

Thuật toán vẽ đường thẳng Bresenham

Trang 2

Mối tương quan giữa X & Y khi độ lớn hệ số góc nhỏ hơn 1

 x tăng 1 và y giữ nguyên hay tăng 1

Điều này bảo đảm cho đường thẳng

Điều này bảo đảm cho đường thẳng liên tụcliên tục

Nếu độ lớn của hệ số góc lớn hơn 1, chúng ta đổi vai trò của x

& y

 x được gọi là giá trị độc lập và y là giá trị phụ thuộcx được gọi là giá trị độc lập và y là giá trị phụ thuộc

Dx

Dy

Trang 3

Thuật toán Bresenham

Giới thiệu:

• 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à (xi+1,yi+1) sẽ được xác định như thế nào

• Trong trường hợp hệ số góc 0<=m<=1, chúng ta có xi+1=xi+1 và

yi+1=yi hay yi+1=yi+1

x

yi

yi+1

yi-1

x

Trang 4

Thuật toán

Nếu d 1 -d 2 <0 thì chọn y i+1 =y i

Ngược lại, chọn y i+1 =y i +1

xi

yi

xi+1=xi+1 S

d2

d1

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

Trang 5

Thuật toán (cont.)

C = 2Dy + (2b - 1)Dx

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

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

2Dy – Dx

Trang 6

p = 2Dy - Dx;

const1=2Dy; const2=2(Dy-Dx);

x = x1; y = y1;

putpixel(x,y,color);

x<x2

p<0

p=p+const1;

x=x+1;

putpixel(x,y,color);

p=p+const2;

y = y + 1;

End

Trang 7

Chương trình (Dx>Dy>0)

void BresenhamLine(int x1, int y1, int x2, int y2, int color) {

int Dx = x2 – x1, Dy = y2 – y1;

int x = x1, y = y1;

int p = 2 * Dy – Dx;

int const1 = 2 * Dy, const2 = 2 * (Dy-Dx);

putpixel(x, y, color);

while (x < x2) {

if (p < 0) {

p += const1;

} else {

p += const2;

y++;

} x++;

putpixel(x, y, color);

}

}

Trang 8

Tổng kết

xi

yi

xi+1=xi+1 S

d2

d1

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

Trang 9

Mở rộng

1 4

8

7 6

5

Dx>0,Dy>0,Dx>Dy

Dx>0,Dy<0,Dx>|Dy| Dx<0,Dy>0,|Dx|>Dy

Dx<0,Dy<0,|Dx|>|Dy|

Trang 10

Kết hợp vùng 1 và 8

Vùng 1 y tăng Vùng 1 y tăng còn vùng 2 y giảm còn vùng 2 y giảm

int dy = (Dy < 0) ? -1 : 1;

Dy = abs(Dy);

while (x < x2) {

if (p < 0) {

p += const1;

} else {

p += const2;

y += dy;

} x++;

putpixel(x, y, color);

}

Trang 11

Kết hợp vùng 1 và 4

Vùng 1 x tăng Vùng 1 x tăng 1, vùng 4 x giảm 1, vùng 4 x giảm 1

y tăng y tăng

int dx = (Dx < 0) ? -1 : 1;

Dx = abs(Dx);

while (

if (p < 0) {

p += const1;

} else {

p += const2;

y++;

}

x += dx;

putpixel(x, y, color);

}

Trang 12

Kết hợp vùng 1, 4, 5, 8

x tăng x tăng 1 khi Dx > 0, giảm 1 khi Dx > 0, giảm 1 khi Dx < 0

y tăng y tăng khi Dy > 0, giảm khi Dy > 0, giảm khi Dy < 0

int dx = (Dx < 0) ? -1 : 1;

Dx = abs(Dx);

int dy = (Dy < 0) ? -1 : 1;

Dy = abs(Dy);

while (

if (p < 0) {

p += const1;

} else {

p += const2;

y += dy;

}

x += dx;

putpixel(x, y, color);

}

Trang 13

Kết hợp vùng 2, 3, 6, 7:

Kết hợp vùng 2, 3, 6, 7: x tính theo y x tính theo y

y tăng y tăng 1 khi Dy > 0, giảm 1 khi Dy > 0, giảm 1 khi Dy < 0

x tăng x tăng khi Dx > 0, giảm khi Dx > 0, giảm khi Dx < 0

int dx = (Dx < 0) ? -1 : 1;

Dx = abs(Dx);

int dy = (Dy < 0) ? -1 : 1;

Dy = abs(Dy);

while (

if (p < 0) {

p += const1;

} else {

p += const2;

x += dx;

}

y += dy;

putpixel(x, y, color);

}

Trang 14

Chương trình hoàn chỉnh BresenhamLine(int x1, int y1, int x2, int y2, int color) {

int Dx = x2 – x1, Dy = y2 – y1;

int x = x1, y = y1;

int dx = (Dx < 0) ? -1 : 1; Dx = abs(Dx);

int dy = (Dy < 0) ? -1 : 1; Dy = abs(Dy);

putpixel(x, y, color);

if (Dx > Dy)

{

int p = 2 * Dy – Dx;

int const1 = 2 * Dy, const2 = 2 * (Dy-Dx);

while (

while (x != x2 x != x2) {

if (p < 0) {

p += const1;

} else {

p += const2;

y += dy;

}

x += dx;

putpixel(x, y, color);

} } else {// đổi vai trò giữa x và y

… }

}

Trang 15

Bài tập

Cài đặt thuật toán Bresenham cho:

Ngày đăng: 03/12/2015, 06:43

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm