NHÓM 6 :
THUẬT TOÁN MID-POINT
VẼ HÌNH ELLIPSE
Đinh Doãn Việt
Nguyễn Thị Phương Ngọc
Nguyễn Thị Thu
NỘI DUNG CHÍNH
Giới thiệu vấn đề
Giải Thuật
Lưu Đồ Thuật Toán
Code Minh Họa
Giới thiệu vấn đề
Vẽ hình Ellipse
Thuật Toán Bresenham
Thuật Toán Mid-Point
Giải Thuật
Phương trình Ellipse:
2 2
2 2
2 2
f(x,y) = b x + a y – a b
< 0 nếu (x,y) nằm bên trong hình elip
f(x,y)
= 0 nếu (x,y) nằm trên hình elip
> 0 nếu (x,y) nằm bên ngoài hình elip
Ý Tưởng Thuật Toán
•
• Tại vùng thứ nhất, x biến thiên nhanh hơn y và tại vùng thứ hai , y biến thiên nhanh hơn x. Nhớ lại công thức hệ số góc của đường cong :
Chia Elip làm 2 phần tại tiếp điểm Q nơi có hệ số góc của tiếp tuyến với Elip bằng -1
=
trong đó : fx và fy là đạo hàm riêng phần của f(x,y) theo x, theo y.
2 2
2 2
2 2
f(x,y) = b x + a y – a b
=
Phân Tích Giải Thuật
1.
Trong phần thứ nhất:
Giả sử đã vẽ được điểm (xi,yi), điểm tiếp theo trên elip được chọn trong bước nhảy i+1 là T hoặc S. Trung điểm I của TS sẽ quyết
định điểm nào được chọn. Giá trị của f(x,y) tại điểm I:
di = f(xi + 1, yi – ) = b
2
2
2
2
2 2
(xi + 1) + a (yi – ) – a b
+ Nếu di > 0 thì trung điểm I nằm ngoài đường elip
điểm được chọn là S.
+ Nếu di = 0 thì trung điểm I nằm trên đường elip
điểm được chọn là S.
+ Nếu di < 0 thì trung điểm I nằm trong đường elip
điểm được chọn là T.
Phân Tích Giải Thuật
Ta lại có:
2
2
2
2 2 2
di+1 = f(xi+1 + 1, yi+1 – ) = b (xi+1 +1) + a (yi+1 – ) – a b
Suy ra:
2
2
2
2
2
2
di+1 – di = b [(xi+1 +1) – (xi +1) ] +a [(yi+1 – ) – (yi – ) ]
Vì xi+1 = xi+1 nên
2
2
2
2
2
di+1 – di = 2b xi+1 + b + a [(yi+1 – ) – (yi – ) ]
Nếu điểm được chọn là T ( < 0)
Nếu điểm được chọn là S ( ≥ 0)
thì
thì
Ta
Ta có
có ::
2
2x + b2
2 (= d + fx + b2
2
d
== d
++ 2b
di+1
d
2b
x
+
b
(= dii + fx + b ))
i
i+1
i+1
i
i+1
2
2 + 1) + b2
2
== d
dii ++ 2b
2b (x
(xi
i + 1) + b
2
2
== d
+ 3)
dii ++ b
b (2x
(2xi
i + 3)
Với điểm đầu tiên (0,b) ta có:
2
2
2
2 2
d1 = f(0,b) = b + a (b – ) – a b
2
2
= b ─ a b +
Ta
Ta có:
có:
2
2
2x + b2 – 2a2
2y (= d + fx + b2
2 – fy)
d
== d
++ 2b
di+1
d
2b
x
+
b
–
2a
yi+1
i
i+1
i+1
i
i+1
i+1 (= dii + fx + b – fy)
2
2
2
2 – 2a2
2
++ 1)
++ b
– 1)
== d
dii ++ 2b
2b (x
(xi
1)
b
– 2a (y
(yi
i
i – 1)
2
2
2
== d
++ 3)
++ aa2 (-2y
+ 2)
dii ++ b
b (2x
(2xi
3)
(-2yi
i
i + 2)
Phân Tích Giải Thuật
2.
Trong phần thứ hai:
Chúng ta tính toán như phần 1. Giả sử ta phải xác định điểm (xj+1,yj+1) tiếp theo trên elip trong bước j+1. Điểm được chọn là U hoặc V. Trung
điểm K của UV sẽ quyết định việc chọn điểm U hay điểm V. Giá trị của f(x,y) tại điểm K:
2
2
2
2
2 2
ej = f(xj + , yj – 1) = b (xj + ) + a (yj – 1) – a b
+ Nếu ej > 0 điểm được chọn là U.
+ Nếu ej = 0 điểm được chọn là U
+ Nếu ej < 0 điểm được chọn là V.
Phân Tích Giải Thuật
Ta lại có:
2
2
2
2
2 2
ej+1 = f(xj+1 + , yj+1 – 1) = b (xj+1 + ) + a (yj+1 – 1) – a b
Suy ra:
2
2
2
2
2
2
ej+1 – ej = b [(xj+1 + ) – (xj + ) ] + a [(yj+1 – 1) – (yj – 1) ]
2
2
2
2
2
= b [(xj+1 + ) – (xj + ) ] – 2a yj+1 + a
(Chú ý : yj+1 = yj – 1)
Phân Tích Giải Thuật
Nếu điểm được chọn là U (tức ej ≥ 0)
Nếu điểm được chọn là V (tức ej < 0 )
thì xj+1 = xj
thì xj+1 = xj+1
Ta có:
Ta có:
2
2
2
ej+1 = ej – 2a yj+1 + a (= ej – fy + a )
2
2
= ej – 2a (yj -1) + a
2
= ej – a (3 – 2yj)
Giá
2
2
2
2
ej+1 = ej + 2b xj+1 – 2a yj+1 + a (= ej + fx – fy + a )
2
2
2
= ej + 2b (xj + 1)– 2a (yj -1) + a
2
2
= ej + b (2xj + 2)+ a (3 -2yj )
trị khởi tạo ban đầu trong phần 2 phụ thuộc vào vị trí cuối cùng của phần 1 , giả sử
là (xk,yk).
Khi đó:
2
2
2
2 2
e1 = f(xk + , yk – 1) = b (xk + ) + a (yk – 1) – a b
Lưu Đồ Thuật Toán
Bắt Đầu
x=0, y = b
p=
S
S
2
y
Kết Thúc
Đ
Đ
S
p
y=y-1
S
p=p+
Đ
p=p+
p
p=p+
Đ
x=x+1
p=p+
x=x+1
putpixel(x,y,color)
y=y-1
putpixel(x,y,color)
Lưu Đồ Thuật Toán
Tại sao lại x
Do ở phần ý tưởng thuật toán, chúng ta chia elip làm 2 phần để vẽ và lấy điểm Q có hệ số góc của tiếp tuyến với
2
2
elip bằng -1 làm giao điểm. Theo công thức hệ số đã nêu ở trên: dx/dy = fx/fy = (2b x) /( 2a y). Tại điểm đầu
2
tiên có tọa độ (0,b), chúng ta thay x=0 và y=b vào công thức trên được hệ số góc= 0/( 2a b) lớn hơn -1 . Nên ta
chọn vẽ theo nhánh 1 .
2
Như vậy, việc so sánh 2a y < 0 là để chọn nhánh vẽ elip thôi.
Code Minh Họa
THANKS FOR
YOUR ATTENTION