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.
Đề tài: Vẽ Đường Thẳng Dùng Thuật Toán Bresenham HÀ NỘI, 12/2017 Nguyên Lý Thuật Toán Cho đ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 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 bước ta cho x tăng lên đơn vị tức là Bước là ta tính ta khơng làm giống thuật tốn DDA phải xử lỹ liệu số thực và làm tròn số dẫn tới thời gian Ta tìm tính theo số ngun Giả sử bước thứ k ta có hình vẽ sau: Gọi y là tung độ xác y_{k + 1} Ta lấy giá trị y là giá trị gần với y_{k} + 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} + - y = y_{k} + - m(x_{i} +1) - b\\ => d1 - d2 = 2m(x_{i} +1) - 2y_{k} + 2b - Nếu d1 > d2 y_{k + 1} = y_{k} + Nếu d1 < d2 y_{k + 1} = y_{k} Do ta xác định dấu d1 – d2 ta biết giá trị y_{k+1} Ta xét số P_{k} = (x1-x2)(d1-d2) (Ta nhân với (x1-x2) để triệt tiêu mẫu thay m vào tính tốn) Do Dx > nên P_{k} phụ thuộc vào d1 -d2 Ta có: m = \frac{y2-y1}{x2-x1} \\ \Rightarrow P_{k} = (x2-x1)(d1 - d2) = (x2-x1).\frac{2(y2y1)(x_{k}+1) +(x2-x1)(-2y_{k} + 2b - 1)}{x2-x1} \\ \\ \indent \indent = 2(y2-y1)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 \Rightarrow d1 \geq d2 \\ \indent \indent \Rightarrow y_{k+1} = y_{k} + \\ \indent \indent \Rightarrow P_{k+1} = 2(x_{k} +1)Dy - 2(y_{k} + 1)Dx + c = P_{k} + 2(Dy - Dx)\\ \\ TH2: P_{k} < \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 Lưu đồ thuật toán Phần code cho trường hợp 3.1 ve duog thang = bresensham 3.2 Vẽ đường thẳng với kích thước 3.3 Vẽ đường thẳng từ màu này qua màu khác Phân tích liệu đầu vào / đầu ra, tương tác người dùng - Dữ liệu đầu vào + Dữ liệu: - khoảng dịch chuyển (kiểu 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 + Các chức chương trình : - Chức chọn màu đường thẳng - Chức chọn màu nhạt dần cho đường thẳng - Chức chọn vẽ nét liền nét đứt Hình ảnh kết 5.1 Giao diện chạy chương trình 5.3 Kết sau thực chức