Tương tự thuật toán vẽ đường tròn, sử dụng thuật toán Bresenham để vẽ, ta chỉ cần vẽ 1/4 ellipse, sau đó lấy đối xứng qua các trục tọa độ sẽ vẽ được toàn bộ ellipse.
Trang 1R
2
R
O
y
x
Trang 2Begin
P = 5/4 - R
x = & y =
P8P(x, y, c)
Yes
P < 0 Yes
P = P + 2x + 3
No
P = P + 2(x - y) + 5
y = y - 1
x = x + 1
P8P(x, y, c)
End
No
) 2 /
(R
round
x
2 /
R R / 2
Trang 4Tương tự thuật toán vẽ đường tròn, sử dụng thuật toán Bresenham để vẽ, ta chỉ cần vẽ 1/4 ellipse, sau đó lấy đối xứng qua các trục tọa độ sẽ vẽ được toàn bộ ellipse.
Xét ellipse có tâm O, các bán kính là a và b, phương trình là :
Chọn tọa độ pixel đầu tiên cần hiển thị là (Xi ,Yi) = (0,b)
Cần xác định pixel tiếp theo là (Xi+1, Yi+1).
1
2
2 2
2
b
y a
x
a
b
y
O
x
Trang 5
i
y
i
x x i 1
i
y
1
d
2
d
Trang 61 2b
-a
2b P
b) (0, )
y , x
(
P
-) y -4(1 3)
(2x a
2b P
P do Khi 1.
-y y
chon Ta
: 0 P
Neu
-3) +
(2x a
2b P
P do Khi y y
chon Ta
: 0 P
Neu
-3) +
(2x a
2b + ) y -2(y ) )2 (y -)2 2((y
+ P P
3) +
(2x a
2b + ) y -2(y ) )2 (y -)2 2((y
P
-P
1) -(y y
-y -) (y d
-d
P
1) -(y -y
d
y -)
(y
d
1
y y
1 x
x
:
2
2 0
0 0
i
i i
2
2 i
1 i i
1 i i
i 2
2 i
1 i i
1 i i
i 2
2 i
1 + i i
1 + i i
1
i
i 2
2 i
1 + i i
1 + i i
1
i
2 i
2 2
2 i 2
1
i
2 i
2
2
2 2
i
1
i 1
i
i 1
i
i
y Co
Trang 7Begin
P = 2(b*b)/(a*a)-2b+1
C1 = 2[(b*b)/(a*a)](2x+3)
C2 = 2[(b*b)/(a*a)](2x+3) + 4(1-y)
x = 0 & y = b
P4P(x, y, c)
1
2
2
y
x a
b
Yes
P < 0 Yes
P = P + C1
No
P = P + C2
y = y - 1
x = x + 1
P4P(x, y, c)
End No
Trang 8P = 2(b*b)/(a*a)-2b+1
C1 = 2[(b*b)/(a*a)](2x+3)
C2 = 2[(b*b)/(a*a)](2x+3) + 4(1-y)
C3 = 2[(a*a)/(b*b)](2x+3)
C4 = 2[(a*a)/(b*b)](2x+3) + 4(1-y)
1
2
2
y
x
a
b
1
2
2
x
y b
a
Yes
P < 0
Yes
P = P + C1
No
P = P + C2
y = y - 1
x = x + 1
P4P(x, y, c)
x = 0 & y = b
P4P(x, y, c)
Yes
P < 0 Yes
P = P + C3
No
P = P + C4
y = y - 1
x = x + 1 P4P(x, y, c)
End
x = a & y = 0 P4P(x, y, c)