– 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 45 o với trục tọa[r]
Trang 1Đồ họa máy tính
Vẽ đường thẳng và đường tròn
Trang 2Hướng tới một đường thẳng lý tưởng
rời rạc
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
Trang 3Thế nào là một đường thẳng lý tưởng
– 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 độ
– Đều trên một đường thẳng và đều trên tất cả các đường thẳng
nhanh
Trang 4Đườ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
Trang 5Thuậ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
Trang 6Thay đổ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
Trang 7Thuật toán DDA
(Phân tích vi phân số hóa)
) (
) (
) (
) (
1 2
1
1 2
1
y y
t y
t y
x x
t x
t
x
-+
=
-+
=
) , (
) , (
2 2
1 1
y x
y x
Start point
End point
Trang 8-Thuật toán DDA
dt
) (
) (
) (
) (
1 2
1
1 2
1
y y
t y t
y
x x
t x t
x
-+
=
-+
=
dt
dy y
y
dt
dx x
x
cu moi
cu moi
+
=
+
=
1
<
dt
dx
1
<
dt dy
Trang 9Thuật toán DDA
line(int x1, int y1, int x2, int y2)
{
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;
n - range of t.
Trang 10Thuật toán DDA
thực.
phép toán số nguyên?
hiện thời và có thể chạy rất nhanh