Bài giảng Đồ họa máy tính - Bài: Vẽ đường thẳng và đường tròn - Ma Thị Châu
Đồ họa máy tính
Vẽ đường thẳng và đường tròn
1
2/17/17
Ma Thị Châu - Bộ môn KHMT
Hướng tới một đường thẳng lý tưởng
l Chúng ta chỉ có thể vẽ xấp xỉ đường thẳng một cách
rời rạc
l Chiếu sáng các điểm gần nhất với đường thẳng
thực tế trong trường hợp chỉ có hai cách thể hiện
một điểm:
– Điểm được thắp sáng hoặc không thắp sáng
2
2/17/17
Ma Thị Châu - Bộ môn KHMT
Thế nào là một đường thẳng lý tưởng
l Trông phải thẳng và liên tục
– Trong máy tính chỉ có thể được như vậy với các đường
thẳng song song với trục tọa độ hoặc có góc 45o với trục tọa
độ
l Phải đi qua hai điểm đầu và cuối
l Phải có mật độ và cường độ sáng đều
– Đều trên một đường thẳng và đều trên tất cả các đường
thẳng
l Thuật toán vẽ phải hiệu quả và có thể thực hiện
nhanh
3
2/17/17
Ma Thị Châu - Bộ môn KHMT
Đường thẳng đơn giản
Dựa trên phương trình đường
thẳng:
y = mx + b
Cách tiếp cận đơn giản:
tăng x, rồi tìm ra y
Cần các tính toán số thực
4
2/17/17
Ma Thị Châu - Bộ môn KHMT
Thuật toán đó có tốt không?
Thuật toán có vẻ ổn với những
đường thẳng có hệ số góc nghiêng
(slope) bằng 1 hoặc nhỏ hơn,
tuy nhiên, nó không tốt cho những
đường thẳng với hệ số góc nghiêng
lớn hơn 1 – các đường thẳng trông
rời rạc – phải thêm các điểm vào các
cột thì trông mới ổn.
Giải pháp? - sử dụng phương pháp
đối xứng.
5
2/17/17
Ma Thị Châu - Bộ môn KHMT
Thay đổi thuật toán cho từng góc phần
tám (45°) của hệ tọa độ
Có thể thay đổi tên của trục tọa độ, HOẶC, tăng theo trục x nếu
dy<dx, nếu không thì tăng theo trục y
6
2/17/17
Ma Thị Châu - Bộ môn KHMT
Thuật toán DDA
l DDA = Digital Differential Analyser
(Phân tích vi phân số hóa)
l Xét đường thẳng theo phương trình tham số theo t:
x(t) = x1 +t(x2 - x1)
(x1, y1)
(x2 , y2 )
Start point -
End point -
y(t) = y1 +t(y2 - y1)
7
2/17/17
Ma Thị Châu - Bộ môn KHMT
x(t) = x1 +t(x2 - x1)
y(t) = y1 +t(y2 - y1)
Thuật toán DDA
l Bắt đầu với t = 0
l Tại mỗi bước, tăng t một lượng
dt
dx
xmoi = xcu +
dt
dy
ymoi = ycu +
dt
l Chọn giá trị thích hợp cho dt
l Sao cho không bỏ mất điểm nào:
dx
dt
dy
dt
– Nghĩa là:
và
<1
<1
l Chọn dt là giá trị max của dx và dy
8
2/17/17
Ma Thị Châu - Bộ môn KHMT
Thuật toán DDA
line(int x1, int y1, int x2, int y2)
n - range of t.
{
float x,y;
int dx = x2-x1, dy = y2-y1;
int n = max(abs(dx),abs(dy));
float dt = n, dxdt = dx/dt, dydt = dy/dt;
x = x1;
y = y1;
while( n-- ) {
point(round(x),round(y));
x += dxdt;
y += dydt;
}
9
}
2/17/17
Ma Thị Châu - Bộ môn KHMT
Thuật toán DDA
l Vẫn còn sử dụng rất nhiều phép toán số
thực.
– 2 phép làm tròn và hai phép cộng số thực.
l Liệu có cách nào đơn giản hơn không?
l Có cách nào mà chúng ta chỉ cần dùng các
phép toán số nguyên?
– Như vậy sẽ có thể cài đặt dễ dàng trên máy tính
hiện thời và có thể chạy rất nhanh.
10
2/17/17
Ma Thị Châu - Bộ môn KHMT
Bạn đang xem tài liệu "Bài giảng Đồ họa máy tính - Bài: Vẽ đường thẳng và đường tròn - Ma Thị Châu", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
File đính kèm:
bai_giang_do_hoa_may_tinh_bai_ve_duong_thang_va_duong_tron_m.pdf

