Đây là slide chi tiết do chúng mình soạn thảo và lên trình bài vẽ đường tròn bằng thuật toán midpoint . Sẽ giúp bạn dễ hiểu hơn cũng như thuyết trình tốt hơn trong học tập . Slide rất chi tiết đó mọi người ..... hihi mọi người nhớ ủng hộ mình nhé .
Trang 2NHÓ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
Trang 3Giới thiệu vấn đề
Giải Thuật
Lưu Đồ Thuật Toán
Code Minh Họa
Trang 4Vẽ hình Ellipse
Thuật Toán Bresenham
Thuật Toán Mid-Point
Giới thiệu vấn đề
Trang 5Giải Thuật
Phương trình Ellipse:
f(x,y) = b2 x2 + a2 y2 – a2 b2
f(x,y)
< 0 nếu (x,y) nằm bên trong hình elip
= 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
Trang 6Ý Tưởng Thuật Toán
• 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
• 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 :
= =
trong đó : fx và fy là đạo hàm riêng phần của f(x,y) theo x, theo y
f(x,y) = b2 x2 + a2 y2 – a2 b2
Trang 7Phâ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 (x i + 1) 2 + a2 (y i – ) 2 – a2b2
+ 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
Trang 8
Phân Tích Giải Thuật
Ta lại có:
di+1 = f(xi+1 + 1, yi+1 – ) = b 2(x i+1 +1) 2 + a2(y i+1 – ) 2 – a2b2 Suy ra:
di+1 – di = b 2[(x i+1 +1) 2 – (x i +1) 2] +a2[(y i+1 – ) 2 – (y i – ) 2]
Vì xi+1 = xi+1 nên
di+1 – di = 2b 2x i+1 + b 2 + a2[(y i+1 – ) 2 – (y i – ) 2]
Trang 9
Nếu điểm được chọn là T ( < 0)
thì
Nếu điểm được chọn là S ( ≥ 0)
thì
Ta có : di+1 = d i + 2b 2x i+1 + b 2 (= d i + fx + b 2) = di + 2b 2 (x i + 1) + b 2
= di + b 2 (2x i + 3)
Ta có:
di+1 = d i + 2b 2x i+1 + b 2 – 2a 2y i+1 (= d i + fx + b 2 – fy)
= di + 2b 2 (x i + 1) + b 2 – 2a 2 (y i – 1) = di + b 2 (2x i + 3) + a 2 (-2y i + 2)
Ta có : di+1 = d i + 2b 2x i+1 + b 2 (= d i + fx + b 2) = di + 2b 2 (x i + 1) + b 2
= di + b 2 (2x i + 3)
Ta có:
di+1 = d i + 2b 2x i+1 + b 2 – 2a 2y i+1 (= d i + fx + b 2 – fy)
= di + 2b 2 (x i + 1) + b 2 – 2a 2 (y i – 1) = di + b 2 (2x i + 3) + a 2 (-2y i + 2)
Với điểm đầu tiên (0,b) ta có:
d1 = f(0,b) = b 2 + a2(b – )2 – a2b2
= b2 a ─ 2b +
Trang 10
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:
ej = f(xj +, yj – 1) = b2(xj + )2 + a2(yj – 1)2 – a2b2 + 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
Trang 11Ta lại có:
ej+1 = f(xj+1 + , yj+1 – 1) = b 2(x j+1 + ) 2 + a2(y j+1 – 1) 2 – a2b2
Suy ra:
ej+1 – ej = b 2[(x j+1 + ) 2 – (x j + ) 2] + a2[(y j+1 – 1) 2 – (y j – 1) 2]
= b2[(xj+1 + ) 2 – (x j + ) 2] – 2a2y j+1 + a 2
(Chú ý : yj+1 = yj – 1)
Trang 12
Nếu điểm được chọn là U (tức ej ≥ 0)
thì xj+1 = xj
Nếu điểm được chọn là V (tức ej < 0 )
thì xj+1 = xj+1
Ta có:
ej+1 = ej – 2a 2y j+1 + a 2 (= e j – fy + a 2)
= ej – 2a 2(y j -1) + a 2
= ej – a 2(3 – 2y j)
Ta có:
ej+1 = ej + 2b 2x j+1 – 2a 2y j+1 + a 2 (= e j + fx – fy + a 2) = ej + 2b 2(x j + 1)– 2a 2(y j -1) + a 2
= ej + b 2(2x j + 2)+ a 2(3 -2y j )
Phân Tích Giải Thuật
Giá 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 đó:
e1 = f(xk + , yk – 1) = b 2(x k + ) + a 2(y k – 1) 2 – a2b2
Trang 13
Lưu Đồ Thuật Toán
Bắt Đầu
p = p +
2
x=0, y = b
p =
x = x + 1 putpixel(x,y,color)
y = y - 1
p = p +
y
p
x=x+1
p = p +
p = p +
y = y - 1 putpixel(x,y,color)
S
S S
S
Đ Đ
Đ
Đ
p
Trang 14Lưu Đồ Thuật Toán
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 elip bằng -1 làm giao điểm Theo công thức hệ số đã nêu ở trên: dx/dy = fx/fy = (2b2x) /( 2a2y) Tại điểm đầu 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/( 2a2b) lớn hơn -1 Nên ta
chọn vẽ theo nhánh 1 Như vậy, việc so sánh 2a2y < 0 là để chọn nhánh vẽ elip thôi.
Tại sao lại x
Trang 15
Code Minh Họa
Trang 17THANKS FOR
YOUR ATTENTION