Tải bản đầy đủ (.pptx) (17 trang)

Slide vẽ đường elip bằng thuật toán Midpoint

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (3.06 MB, 17 trang )


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  + 1) + b2
2
== d
dii  ++ 2b
2b (x
(xi 
i + 1) + b


== 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 – 1)
2
2
2
== d
++ 3)
++ aa2  (-2y
+ 2)
dii  ++ b

b   (2x
(2xi 
3)
(-2yi 

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



×