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

thuật toán vẽ đường thẳng bresenham

7 506 12

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 7
Dung lượng 371,13 KB
File đính kèm VeDuongThangC#.rar (371 KB)

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

Nội dung

chương trình vẽ đường thẳng bằng c Phân tích dữ liệu đầu vào đầu ra, tương tác của người dùng Dữ liệu đầu vào + Dữ liệu: khoảng dịch chuyển (kiểu dữ liệu: nguyên, thực), vận tốc 11000m Dữ liệu đầu ra: + Tương tác người dùng: Bàn phím, chuột,chuột trái. thiết kế giao diện + Khung cửa sổ: kích thước : màu nền : màu trắng Thiết kế chức năng + Các chức năng của chương trình : Chức năng chọn màu của đường thẳng Chức năng chọn màu nhạt dần cho đường thẳng Chức năng chọn vẽ nét liền nét đứt.

Trang 1

Đề tài: Vẽ Đường Thẳng Dùng Thuật Toán

Bresenham

HÀ NỘI, 12/2017

1 Nguyên Lý Thuật Toán

Cho 2 điểm đầu mút M1 (x1, y1), M2(x2, y2) và màu vẽ C

Trong bài nguyên lý chung vẽ đoạn thẳng chúng ta đã xây dựng phương trình đường thẳng có dạng:

Để đơn giản hóa giải thuật ta xét đường thẳng với

Tại mỗi bước ta cho x tăng lên 1 đơn vị tức là Bước tiếp theo là ta tính nhưng ta sẽ không làm giống thuật toán DDA vì nó phải xử lỹ dữ liệu trên số thực và làm tròn số dẫn tới mất thời gian Ta sẽ tìm các tính theo các số nguyên

Giả sử tại bước thứ k ta có được hình vẽ như sau:

Trang 2

Gọi y là tung độ chính xác của y_{k + 1} Ta sẽ lấy giá trị y là giá trị gần nhất với y_{k} + 1 hay y_{k} Để làm việc này ta xét d1 và d2

d1 = y - y_{k} = m(x_{i} + 1) + b - y_{k} \\ d2 = y_{k} + 1 - y = y_{k} + 1 - m(x_{i} +1) - b\\ => d1 - d2 = 2m(x_{i} +1) - 2y_{k} + 2b - 1

Nếu d1 > d2 khi đó y_{k + 1} = y_{k} + 1

Nếu d1 < d2 khi đó y_{k + 1} = y_{k}

Do đó nếu ta xác định được dấu của d1 – d2 thì ta sẽ biết được giá trị của y_{k+1} Ta xét hằng số P_{k} = (x1-x2)(d1-d2) (Ta nhân với (x1-x2) để triệt tiêu được mẫu khi thay

m vào khi tính toán)

Do Dx > 0 nên P_{k} chỉ phụ thuộc vào d1 -d2 Ta có:

m = \frac{y2-y1}{x2-x1} \\ \Rightarrow P_{k} = (x2-x1)(d1 - d2) = (x2x1).\frac{2(y2y1)(x_{k}+1) +(x2x1)(2y_{k} + 2b 1)}{x2x1} \\ \\ \indent \indent = 2(y2y1)x_{k} -2(x2-x1)y_{k} + 2(y2-y1) + (x2-x1)(2b-1) \\ \indent \indent = 2x_{k}Dy - 2y_{k}.Dx +

c \\ \\ \Rightarrow P_{k+1} = 2(x_{k}+1)Dy - 2y_{k+1}Dx + c, voi : \left (c= 2Dy + (2b-1)Dx \right )\\ \\ TH1: P_{k} \geq 0 \Rightarrow d1 \geq d2 \\ \indent \indent

\Rightarrow y_{k+1} = y_{k} + 1 \\ \indent \indent \Rightarrow P_{k+1} = 2(x_{k}

Trang 3

+1)Dy - 2(y_{k} + 1)Dx + c = P_{k} + 2(Dy - Dx)\\ \\ TH2: P_{k} < 0 \Rightarrow d1 < d2 \\ \indent \indent \Rightarrow y_{k+1} = y_{k} \\ \indent \indent \Rightarrow

P_{k+1} = 2(x_{k}+1)Dy - 2y_{k}Dx + c = P_{k} + 2Dy

Tính P1, ta có:

y1 = m.x1 + b = \frac{Dy}{Dx}x1 + b\\ P_{1} = 2x1.Dy - 2y1.Dx + c \\ = 2x1.Dy - 2(\frac{Dy}{Dx}x1 + b)Dx + 2Dy + (2b - 1)Dx\\ = 2Dy - Dx

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

Trang 4

3 Phần code cho các trường hợp

3.1 ve duog thang = bresensham

3.2 Vẽ đường thẳng với kích thước

Trang 5

3.3 Vẽ đường thẳng từ màu này qua màu khác

Trang 6

4 Phân tích dữ liệu đầu vào / đầu ra, tương tác của người dùng

- Dữ liệu đầu vào

+ Dữ liệu:

- khoảng dịch chuyển (kiểu dữ liệu: nguyên, thực),

- vận tốc 1/1000m

- Dữ liệu đầu ra:

+ Tương tác người dùng: Bàn phím, chuột,chuột trái

- thiết kế giao diện

+ Khung cửa sổ:

- kích thước :

- màu nền : màu trắng

- Thiết kế chức năng

+ Các chức năng của chương trình :

- Chức năng chọn màu của đường thẳng

- Chức năng chọn màu nhạt dần cho đường thẳng

Trang 7

- Chức năng chọn vẽ nét liền nét đứt.

5 Hình ảnh kết quả

5.1 Giao diện chạy chương trình

5.3 Kết quả sau khi thực hiện các chức năng

Ngày đăng: 14/12/2017, 14:27

TỪ KHÓA LIÊN QUAN

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

w