2
R
2
R
O
y
x
Begin
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/(Rroundx <
2/R 2/R
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.
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
1
−
i
y
i
x
1+
i
x
i
y
1
d
2
d
1 2b -
a
2b
P b)(0, )y , x(P -
)y -4(1 3)(2x
a
2b
P P do Khi 1. -y ychon Ta : 0 PNeu -
3) + (2x
a
2b
P P do Khi .y ychon Ta : 0 PNeu -
3) + (2x
a
2b
+ )y - 2(y - ) )2(y - )22((y +P P
3) + (2x
a
2b
+ )y - 2(y - ) )2(y - )22((y P -P
1) -(y y-y -)(yd - d P
1) -(y -y d
y -)(y d
1y
y
1 xx
:
2
2
0 0 0 i
i i
2
2
i 1i i 1i i
i
2
2
i 1ii 1i i
i
2
2
i1+ii1+i i1i
i
2
2
i1+ii1+ii 1i
2
i
22 2
i21 i
2
i
2
2
2 2
i1
i
1i
i1i
+=⇒=
+++==>=
+==<
=⇒
=⇒
+==
=
=
−
=
+=
++
++
+
+
+
+
i
y
Co
Begin
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
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)
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
No
No
x = a & y = 0
P4P(x, y, c)