SlideShare a Scribd company logo
1 of 31
Download to read offline
Họ và tên: Đinh Thị Minh Thu
MSSV: 07K4114
Lớp: 07CK4
Bài Tập Số 1 - Đồ Họa Máy Tính
Bài 1: Trình bày thuật toán vẽ ellipse có tâm là gốc tọa độ, có phương
trình
2
2
x
a
+
2
2
y
b
=1
Bước 1: Vì ellipse
2
2
x
a
+
2
2
y
b
=1 đối xứng qua trục 0x và 0y nên ta chỉ cần dựng 1 trong
4 phần của ellipse. Giả sử ta chọn trong góc phần tư thứ nhất:
y=
b
a
2 2
a x với x  0,a
Bước 2:
Ellipse y=
b
a
2 2
a x với x  0,a có đạo hàm y’= -
b
a 2 2
x
a x
Bảng khảo sát:
x 0
a
b
y’
y 2
2 2
b
a b 0
0
-
-1
2
2 2
a
a b
Dựa vào BKS ta có:
 Nếu x
2
2 2
0,
a
a b
 
 
 
thì
 
1
1 1
1
,
i i
i i i
x x
y y y

 
   
 
  
 Nếu x
2
2 2
,
a
a
a b
 
 
 
thì
 1
1
, 1
1
i i i
i i
x x x
y y


   
 
   
Bước 3:
Trường hợp giảm chậm
x
2
2 2
0,
a
a b
 
 
 
thì
 
1
1 1
1
,
i i
i i i
x x
y y y

 
   
 
  
Hàm kiểm tra bên trong, bên ngoài ellipse
F(x,y)=b2
x2
+ a2
y2
– a2
b2
Gọi điểm MidPoint là M
1
1,
2
i ix y
 
  
 
đặt fi=F(M) ta có:
fi=b2
(xi+1)2
+ a2
(yi-1/2)2
- a2
b2
= b2
xi
2
+a2
yi
2
+2b2
xi –a2
yi+
2
4
a
+b2
– a2
b2
 Nếu F(Mi)<0 ta có điểm Mi nằm trong ellipse, căn cứ vào hình điểm nguyên được
chọn tiếp theo là điểm A(xi+1,yi) với yi+1=yi
 Nếu F(Mi)>0 ta có điểm Mi nằm ngoài ellipse, căn cứ vào hình điểm nguyên được
chọn tiếp theo là điểm B(xi+1,yi-1) với yi+1=yi -1
i
B
A
iy
iy -1/2
iy -1
ix 1ix 
M
=
=
Để tính F(M) nhanh hơn ta tìm sự chênh lệch giữa F(Mi+1) và F(Mi) ta có:
F(Mi+1) – F(Mi)=fi+1 - fi
Xét F(Mi)<0 ta có:
fi+1 – fi =b2
(xi+1)2
+a2
yi
2
+2b2
(xi+1)-a2
yi+
2
4
a
+b2
– a2
b2
–
[b2
xi
2
+a2
yi
2
+2b2
xi - a2
yi+
2
4
a
+b2
– a2
b2
] =b2
(2xi+3)
<=> fi+1=fi +b2
(2xi+3)
Xét F(Mi)>0 ta có:
fi+1 – fi =b2
(xi+1)2
+a2
( yi -1)2
+2b2
(xi+1)-a2
( yi -1)+
2
4
a
+b2
– a2
b2
–
[b2
xi
2
+a2
yi
2
+2b2
xi - a2
yi+
2
4
a
+b2
– a2
b2
] =b2
(2xi+3) +a2
(2-2yi)
<=> fi+1=fi +b2
(2xi+3)+a2
(2-2yi)
Đặt H=b2
(2xi+3)
K=b2
(2xi+3)+a2
(2-2yi)
Tổng quát ta có:
x1=0,y1=b
f1= [
2
4
a
]+b2
– a2
b
H=3b2
K=2a2
-2a2
b+3b2
 Nếu fi<0 thì xi+1=xi+1, yi+1=yi
fi+1=fi +H
H=H+2b2
K=K+2b2
 Nếu fi>0 thì xi+1=xi+1, yi+1=yi -1
fi+1=fi +K
H+=2b2
K+=2a2
+2b2
Trường hợp giảm nhanh
x
2
2 2
,
a
a
a b
 
 
 
thì
 1
1
, 1
1
i i i
i i
x x x
y y


   
 
   
Hàm kiểm tra bên trong, bên ngoài ellipse
F(x,y)=b2
x2
+ a2
y2
– a2
b2
Gọi điểm MidPoint là M
1
, 1
2
i ix y
 
  
 
đặt fi=F(M) ta có:
fi=b2
(xi+1/2)2
+ a2
(yi-1)2
- a2
b2
= b2
xi
2
+a2
yi
2
-2a2
yi +b2
xi+
2
4
b
+a2
– a2
b2
 Nếu F(Mi)<0 ta có điểm Mi nằm trong ellipse, căn cứ vào hình điểm nguyên được
chọn tiếp theo là điểm B(xi+1,yi-1) với xi+1 = xi+1, yi+1=yi -1
 Nếu F(Mi)>0 ta có điểm Mi nằm ngoài ellipse, căn cứ vào hình điểm nguyên được
chọn tiếp theo là điểm A(xi ,yi-1) với xi+1 = xi, yi+1=yi -1
Để tính F(M) nhanh hơn ta tìm sự chênh lệch giữa F(Mi+1) và F(Mi) ta có:
F(Mi+1) – F(Mi)=fi+1 - fi
Xét F(Mi)<0 ta có:
fi+1 – fi =b2
(xi+1)2
+a2
(yi-1)2
-2a2
(yi-1)+b2
( xi+1)+
2
4
b
+a2
– a2
b2
–
[b2
xi
2
+a2
yi
2
-2a2
yi +b2
xi+
2
4
b
+a2
– a2
b2
] =b2
(2xi+2)+a2
(3-2yi)
<=> fi+1=fi +b2
(2xi+2)+a2
(3-2yi)
Xét F(Mi)>0 ta có:
fi+1 – fi =b2
xi
2
+a2
(yi-1)2
-2a2
(yi-1)+b2
xi+
2
4
b
+a2
– a2
b2
–
[b2
xi
2
+a2
yi
2
-2a2
yi +b2
xi+
2
4
b
+a2
– a2
b2
] =a2
(3-2yi)
<=> fi+1=fi +a2
(3-2yi)
Đặt H=a2
(-2yi+3)
K=b2
(2xi+2)+a2
(3-2yi)
Tổng quát ta có:
x1=
2
2 2
a
a b
,y1=
2
2 2
b
a b
f1= [
2
4
b
]–
2 2
2 2
a b
a b
+a2
H=3a2
-
2 2
2 2
2a b
a b
K=3a2
+2b2
 Nếu fi<0 thì xi+1=xi+1, yi+1=yi - 1
fi+1=fi +K
H=H+2a2
K=K+2b2
+2a2
 Nếu fi>0 thì xi+1=xi, yi+1=yi -1
fi+1=fi +H
H+=2a2
K+=2a2
Bước 4:
Thuật toán vẽ ellipse trong vùng giảm chậm:
x=0,y=b;
f= [
2
4
a
]+b2
– a2
b;
H=3b2
;
K=2a2
-2a2
b+3b2
;
putpixel(x,y);
while(x<
2
2 2
a
a b
) do
if(f<0)then
f=f +H;
H=H+2b2
;
K=K+2b2
;
else
f=f +K;
H+=2b2
;
K+=2a2
+2b2
;
y=y-1;
end if
x=x+1;
putpixel(x,y);
putpixel(-x,y);
putpixel(-x,-y);
putpixel(x,-y);
end while
Thuật toán vẽ ellipse trong vùng giảm nhanh
x=
2
2 2
a
a b
,y=
2
2 2
b
a b
f= [
2
4
b
]–
2 2
2 2
a b
a b
+a2
H=3a2
-
2 2
2 2
2a b
a b
K=3a2
+2b2
round(x);
round(y);
round(H);
round(f);
putpixel(x,y);
while(x<=a) do
if(f<0)then
f=f +K;
H=H+2a2
;
K=K+2b2
+2a2
;
x=x+1;
else
f=f+H;
H+=2a2
;
K+=2a2
;
end if
y=y-1;
putpixel(x,y);
putpixel(-x,y);
putpixel(-x,-y);
putpixel(x,-y);
end while
Bài 2: Trình bày thuật toán vẽ parabol y=
2
x
A
và y2
=Ax
Trường hợp 1: y=
2
x
A
Không mất tính tổng quát ta đặt
1
A
=a. Khi đó y=ax2
Bước 1:
Vì parabol y=ax2
đối xứng qua trục 0y nên ta chỉ cần dựng 1 trong 2 nửa của parabol, giả
sử là:
 
2
ax
0,
y
x
  
 
   
Bước 2:
Parabol y=ax2
với x  0,  có đạo hàm y’=2ax
Bảng khảo sát:
Dựa vào bảng khảo sát ta có:
 Nếu x
1
0,
2a
 
  
thì
 
1
1
1
, 1
i i
i i i
x x
y y y


   
 
   
 Nếu x
1
,
2a
 
   
thì
 1
1
, 1
1
i i i
i i
x x x
y y


   
 
   
x
y’
y
0
0
1/2a
0 1/4a
+
+
1
+
Bước 3
Trường hợp tăng chậm:
x
1
0,
2a
 
  
thì
 
1
1
1
, 1
i i
i i i
x x
y y y


   
 
   
Hàm kiểm tra bên trong, bên ngoài parabol
F(x,y)=ax2
- y
Gọi điểm MidPoint là M(xi+1,yi+
1
2
) đặt fi=F(Mi) ta có:
F(M)=F(xi+1,yi+
1
2
)=a(xi+1)2
– (yi+
1
2
) = axi
2
+ 2axi – yi +a -
1
2
 Nếu F(Mi)<0 ta có điểm Mi nằm bên trong parabol, căn cứ vào Hình, điểm
nguyên tiếp theo ta chọn là điểm A(xi+1,yi) với yi+1 =yi
 Nếu F(Mi)>0 ta có điểm Mi nằm bên ngoài parabol, căn cứ vào Hình, điểm
nguyên tiếp theo ta chọn là điểm B(xi+1,yi+1) với yi+1 =yi+1
Để tính F(M) nhanh hơn ta tìm sự chênh lệch giữa F(Mi) và F(Mi+1)
F(Mi+1) – F(Mi)=fi+1 - fi
Xét F(Mi)<0 ta có:
fi+1 - fi = a(xi+1)2
+ 2a(xi +1) – yi +a -
1
2
-[axi
2
+ 2axi – yi +a -
1
2
]
<=> fi+1 = fi + a(2xi+3)
Xét F(Mi)>0 ta có:
fi+1 - fi = a(xi+1)2
+ 2a(xi +1) –(yi +1)+a -
1
2
- [axi
2
+ 2axi – yi +a -
1
2
]
<=> fi+1 = fi + a(2xi+3) -1
Tổng quát ta có:
x1=0,y1=0
f1=a-
1
2
;
Nếu fi<0 thì xi+1=xi+1 , yi+1=yi
fi+1=fi+a(2xi+3)
Nếu fi>0 thì xi+1=xi+1 , yi+1=yi+1
fi+1=fi+a(2xi+3)-1
Trường hợp tăng nhanh:
x
1
,
2a
 
   
thì
 1
1
, 1
1
i i i
i i
x x x
y y


   
 
   
Hàm kiểm tra bên trong, bên ngoài parabol
F(x,y)=ax2
- y
Gọi điểm MidPoint là M(xi+
1
2
,yi+1) đặt fi=F(Mi) ta có:
F(M)=F(xi+
1
2
,yi+1)=a(xi+
1
2
)2
– (yi+1) = axi
2
+ axi – yi +
4
a
-1
 Nếu F(Mi)<0 ta có điểm Mi nằm bên trong parabol, căn cứ vào Hình, điểm
nguyên tiếp theo ta chọn là điểm B(xi+1,yi+1) với xi+1 =xi+1
 Nếu F(Mi)>0 ta có điểm Mi nằm bên ngoài parabol, căn cứ vào Hình, điểm
nguyên tiếp theo ta chọn là điểm A(xi,yi+1) với xi+1 =xi
Để tính F(M) nhanh hơn ta tìm sự chênh lệch giữa F(Mi) và F(Mi+1)
F(Mi+1) – F(Mi)=fi+1 - fi
Xét F(Mi)<0 ta có:
fi+1 - fi = a(xi+1)2
+ a(xi+1) – (yi +1)+
4
a
-1- [axi
2
+ axi – yi +
4
a
-1]
<=> fi+1 = fi + 2a(xi+1) -1
Xét F(Mi)>0 ta có:
fi+1 - fi = axi
2
+axi – (yi +1)+
4
a
-1- [axi
2
+ axi – yi +
4
a
-1]
<=> fi+1 = fi -1
Tổng quát ta có:
x1=
1
2a
, y1=
1
4a
f1=
4
a
-
1
2
;
Nếu fi<0 thì xi+1=xi+1 , yi+1=yi+1
fi+1 = fi + 2a(xi+1) -1
Nếu fi>0 thì xi+1=xi , yi+1=yi+1
fi+1=fi-1
Bước 4:
Thuật toán vẽ parabol trong vùng tăng chậm
x=0,y=0
f=a-
1
2
;
putpixel(x,y);
while x<
1
2a
do
if( f<0) then
f=f+a(2x+3) ;
else
f=f+a(2x+3)-1 ;
y=y+1;
end if
x=x+1;
putpixel(x,y);
putpixel(-x,y);
end while
Thuật toán vẽ parabol trong vùng tăng nhanh
x=
1
2a
, y=
1
4a
f=
4
a
-
1
2
; n với (n>
1
2a
)điều kiện dừng
putpixel(x,y);
while x< n do
if( f<0) then
f=f+2a(xi+1) -1 ;
x=x+1 ;
else
f=f-1 ;
end if
y=y+1;
putpixel(x,y);
putpixel(-x,y);
end while
Trường hợp 2: y2
=ax <=> y=  ax
Bước 1:
Ta thấy parabol này đối xứng qua trục hoành nên ta chỉ cần vẽ 1 trong 2 nửa của parabol.
Giả sử là:
 
ax
0,
y
x
 

 
Bước 2:
Parabol y= ax với x  0,  có đạo hàm y’=
2 ax
a
Bảng khảo sát:
y
x
y’
1
0 +
-
0
a/4
a/2
0
+
Dựa vào bảng khảo sát ta có:
 Nếu x 0,
4
a 
  
thì
 1
1
, 1
1
i i i
i i
x x x
y y


 

 
 Nếu x ,
4
a 
   
thì
 1
1
, 1
1
i i i
i i
y y y
x x


 

 
Bước 3:
Trường hợp tăng nhanh:
x 0,
4
a 
  
thì
 1
1
, 1
1
i i i
i i
x x x
y y


 

 
Hàm kiểm tra bên trong, bên ngoài parabol
F(x,y)=y- ax
Gọi điểm MidPoint là M(xi+
1
2
,yi+1) đặt fi=F(Mi) ta có:
F(M)=F(xi+
1
2
,yi+1)= (yi+1) - i
1
a(x + )
2
= yi+1 - [ iax +
2
a
]
 Nếu F(Mi)<0 ta có điểm Mi nằm bên trong parabol, căn cứ vào Hình, điểm
nguyên tiếp theo ta chọn là điểm A(xi,yi+1) với xi+1 =xi
 Nếu F(Mi)>0 ta có điểm Mi nằm bên ngoài parabol, căn cứ vào Hình, điểm
nguyên tiếp theo ta chọn là điểm B(xi+1,yi+1) với xi+1 =xi+1
Để tính F(M) nhanh hơn ta tìm sự chênh lệch giữa F(Mi) và F(Mi+1)
F(Mi+1) – F(Mi)=fi+1 - fi
Xét F(Mi)<0 ta có:
fi+1 - fi = (yi+1)+1 - [ iax +
2
a
] – (yi+1 - iax +
2
a
) =1
<=> fi+1 = fi + 1
Xét F(Mi)>0 ta có:
fi+1 - fi = (yi+1)+1 - ia(x +1)+
2
a
– (yi+1 - iax +
2
a
) =1+ iax +
2
a
- i
3
ax +
2
a
<=> fi+1 = fi +1+[ iax +
2
a
- i
3
ax +
2
a
]
Tổng quát ta có:
x1=0 , y1=0;
f1= 1 –[
2
a
];
Nếu fi<0 thì xi+1=xi , yi+1=yi+1
fi+1 = fi +1;
Nếu fi>0 thì xi+1=xi +1, yi+1=yi+1
fi+1=fi +1+[ iax +
2
a
- i
3
ax +
2
a
]
Trường hợp tăng chậm:
x ,
4
a 
   
thì
 1
1
, 1
1
i i i
i i
y y y
x x


 

 
Hàm kiểm tra bên trong, bên ngoài parabol
F(x,y)=y- ax
Gọi điểm MidPoint là M(xi+1,yi+
1
2
) đặt fi=F(Mi) ta có:
F(M)=F(xi+1,yi+
1
2
)= (yi+
1
2
) - ia(x +1) = yi+[
1
2
- ia(x +1) ]
 Nếu F(Mi)<0 ta có điểm Mi nằm bên trong parabol, căn cứ vào Hình, điểm
nguyên tiếp theo ta chọn là điểm A(xi+1,yi+1) với yi+1 =yi+1
 Nếu F(Mi)>0 ta có điểm Mi nằm bên ngoài parabol, căn cứ vào Hình, điểm
nguyên tiếp theo ta chọn là điểm B(xi+1,yi) với yi+1 =yi
Để tính F(M) nhanh hơn ta tìm sự chênh lệch giữa F(Mi) và F(Mi+1)
F(Mi+1) – F(Mi)=fi+1 - fi
Xét F(Mi)<0 ta có:
fi+1 - fi = (yi+1)+
1
2
- ia((x +1)+1) - [yi+
1
2
- ia(x +1) ] = 1+ ia(x +1) - ia(x +2)
<=> fi+1 = fi +1+[ ia(x +1) - ia(x +2) ]
Xét F(Mi)>0 ta có:
fi+1 - fi = yi+
1
2
- ia((x +1)+1) - [yi+
1
2
- ia(x +1) ] = ia(x +1) - ia(x +2)
<=> fi+1 = fi +[ ia(x +1) - ia(x +2) ]
Tổng quát ta có:
x1=
4
a
, y1=
2
a
;
f1= [
2
a
+ 21 1
4
2 2
a a  ];
Nếu fi<0 thì xi+1=xi+1 , yi+1=yi+1
fi+1 = fi +1+[ ia(x +1) - ia(x +2) ];
Nếu fi>0 thì xi+1=xi +1, yi+1=yi
fi+1=fi +[ ia(x +1) - ia(x +2) ]
Bước 4:
Thuật toán vẽ parabol trong vùng tăng nhanh
x=0 , y=0;
f=1 –[
2
a
];
putpixel(x,y);
while x<
4
a
do
if( f<0) then
f=f+1;
else
f=f+1+[ iax +
2
a
- i
3
ax +
2
a
] ;
x=x +1;
end if
y=y+1;
putpixel(x,y);
putpixel(x,-y);
end while
Thuật toán vẽ parabol trong vùng tăng chậm
x=
4
a
, y=
2
a
;round(x);round(y);
f=[
2
a
+ 21 1
4
2 2
a a  ]; round(f);
n (với n>
4
a
)điều kiện dừng ;
putpixel(x,y);
while x< n do
if( f<0) then
f=f+1+[ ia(x +1) - ia(x +2) ];
y=y+1;
else
f=f+[ iax +
2
a
- i
3
ax +
2
a
] ;
end if
x=x +1;
round(f);
putpixel(x,y);
putpixel(x,-y);
end while
Bài 3: Trình bày thuật toán vẽ hyperbol
2 2
2 2
1
x y
a b
  và
2 2
2 2
1
x y
a b
  
Trường hợp 1:
2 2
2 2
1
x y
a b
 
Bước 1:
Ta có
2 2
2 2
1
x y
a b
  <=> y= 2 2b
x a
a
  , suy ra hyperbol này đối xứng qua trục hoành.
Mặt khác với x    , ,a a     thì 2 nửa phía trên trục hoành của hyperbol cũng đối
xứng với nhau qua trục tung. Vì vậy ta chỉ cần vẽ một nhánh của hyperbol rồi lấy đối
xứng.
Giả sử ta chọn:
 
2 2
,
b
y x a
a
x a

 

  
Bước 2:
y= 2 2b
x a
a
 có đạo hàm y’=
2 2
bx
a x a
Bảng biến thiên:
Phân chia đồ thị thành các vùng hệ số góc tăng nhanh và tăng chậm ta được:
 Nếu 2
2 2
1 '( )f x
a
a x
a b
  


 

thì
 
1
1
1
, 1
i i
i i i
y y
x x x


 

 
 Nếu 2
2 2
0 '( ) 1f x
a
x
a b
 




thì
 
1
1
1
, 1
i i
i i i
x x
y y y


 

 
Bước 3:
x
y
y’
a
0
+
+
1
0
+
2
2 2
b
a b
2
2 2
a
a b
Trường hợp tăng nhanh
2
2 2
1 '( )f x
a
a x
a b
  


 

thì
 
1
1
1
, 1
i i
i i i
y y
x x x


 

 
Hàm kiểm tra bên trên, bên dưới hyperbol
F(x,y)=b2
x2
- a2
y2
– a2
b2
Gọi điểm MidPoint là M(xi+
1
2
,yi+1) đặt fi=F(Mi) ta có:
F(M)=F(xi+
1
2
,yi+1)= b2
(xi+
1
2
)2
– a2
(yi+1)2
- a2
b2
=
b2
xi
2
+b2
xi – a2
yi
2
– 2a2
yi+[
2
4
b
]- a2
– a2
b2
 Nếu F(Mi)<0 ta có điểm Mi nằm bên trên hyperbol, căn cứ vào Hình, điểm
nguyên tiếp theo ta chọn là điểm B(xi+1,yi+1) với xi+1 =xi+1
 Nếu F(Mi)>0 ta có điểm Mi nằm bên dưới hyperbol, căn cứ vào Hình, điểm
nguyên tiếp theo ta chọn là điểm A(xi,yi+1) với xi+1 =xi
Để tính F(M) nhanh hơn ta tìm sự chênh lệch giữa F(Mi) và F(Mi+1)
F(Mi+1) – F(Mi)=fi+1 - fi
Xét F(Mi)<0 ta có:
fi+1 - fi = b2
(xi +1)2
+b2
(xi +1) – a2
(yi +1)2
– 2a2
(yi +1)+
2
4
b
- a2
– a2
b2
–
[b2
xi
2
+b2
xi – a2
yi
2
– 2a2
yi+
2
4
b
- a2
– a2
b2
] = 2b2
(xi+1) – a2
(2yi +3)
<=> fi+1 = fi + 2b2
(xi+1) – a2
(2yi +3)
Xét F(Mi)>0 ta có:
fi+1 - fi = b2
xi
2
+b2
xi – a2
(yi +1)2
– 2a2
(yi +1)+
2
4
b
- a2
– a2
b2
–
[b2
xi
2
+b2
xi – a2
yi
2
– 2a2
yi+
2
4
b
- a2
– a2
b2
] = - a2
(2yi+3)
<=> fi+1 = fi - a2
(2yi+3)
Đặt H = 2b2
(xi+1) – a2
(2yi +3)
K=- a2
(2yi+3)
Tổng quát ta có:
x1=a , y1=0;
H=2b2
a – 3a2
+2b2
K= - 3a2
f1= b2
a +[
2
4
b
] - a2
;
Nếu fi<0 thì xi+1=xi+1 , yi+1=yi+1
H=H +2b2
– 2a2
;
K=K – 2a2
fi+1 = fi +H;
Nếu fi>0 thì xi+1=xi , yi+1=yi+1
H=H – 2a2
;
K=K – 2a2
;
fi+1=fi +K;
Trường hợp tăng chậm:
2
2 2
0 '( ) 1f x
a
x
a b
 




thì
 
1
1
1
, 1
i i
i i i
x x
y y y


 

 
Hàm kiểm tra bên trên, bên dưới hyperbol
F(x,y)=b2
x2
- a2
y2
– a2
b2
Gọi điểm MidPoint là M(xi+1,yi+
1
2
) đặt fi=F(Mi) ta có:
F(M)=F(xi+1,yi+
1
2
)= b2
(xi+1)2
– a2
(yi+
1
2
)2
- a2
b2
=
b2
xi
2
+b2
xi – a2
yi
2
– a2
yi - [
2
4
a
]+b2
– a2
b2
 Nếu F(Mi)<0 ta có điểm Mi nằm bên trên hyperbol, căn cứ vào Hình, điểm
nguyên tiếp theo ta chọn là điểm B(xi+1,yi) với yi+1 =yi
 Nếu F(Mi)>0 ta có điểm Mi nằm bên dưới hyperbol, căn cứ vào Hình, điểm
nguyên tiếp theo ta chọn là điểm A(xi+1,yi+1) với yi+1 =yi+1
Để tính F(M) nhanh hơn ta tìm sự chênh lệch giữa F(Mi) và F(Mi+1)
F(Mi+1) – F(Mi)=fi+1 - fi
Xét F(Mi)<0 ta có:
fi+1 - fi = b2
(xi +1)2
+b2
(xi +1) – a2
yi
2
– a2
yi - [
2
4
a
]+b2
– a2
b2
–
[b2
xi
2
+b2
xi – a2
yi
2
– a2
yi - [
2
4
a
]+b2
– a2
b2
] = 2b2
(xi+1)
<=> fi+1 = fi + 2b2
(xi+1)
Xét F(Mi)>0 ta có:
fi+1 - fi = b2
(xi +1)2
+b2
(xi +1) – a2
(yi +1)2
– a2
(yi +1) - [
2
4
a
]+b2
– a2
b2
–
[b2
xi
2
+b2
xi – a2
yi
2
– a2
yi - [
2
4
a
]+b2
– a2
b2
] = 2b2
(xi+1) – 2a2
(yi +1)
<=> fi+1 = fi +2b2
(xi+1) – 2a2
(yi +1)
Đặt H = 2b2
(xi+1)
K=2b2
(xi+1) – 2a2
(yi +1)
Tổng quát ta có:
x1=
2
2 2
a
a b
, y1=
2
2 2
b
a b
;
f1= b2
(
2
2 2
a
a b
)2
+b2
2
2 2
a
a b
– a2
(
2
2 2
b
a b
)2
–
a2
(
2
2 2
b
a b
) - [
2
4
a
]+b2
– a2
b2
= b2
–[
2
4
a
]
H=2b2
+
2 2
2 2
2a b
a b
, K=2b2
-2a2
Nếu fi<0 thì xi+1=xi+1 , yi+1=yi
H=H+2b2
;
K=K+2b2
;
fi+1 = fi + H;
Nếu fi>0 thì xi+1=xi +1, yi+1=yi+1
H=H+2b2
;
K=K+2b2
– 2a2
;
fi+1=fi +K;
Bước 4:
Thuật toán vẽ hyperbol trong vùng tăng nhanh
x=a , y=0;
H=2b2
a – 3a2
+2b2
K= - 3a2
f= b2
a +[
2
4
b
] - a2
;
putpixel(x,y);
while x<
2
2 2
a
a b
do
if( f<0) then
H=H +2b2
– 2a2
;
K=K – 2a2
f = f +H;
x=x+1;
else
H=H – 2a2
;
K=K – 2a2
;
fi+1=fi +K;
end if
y=y+1;
putpixel(x,y);
putpixel(x,-y);
putpixel(-x,y);
putpixel(-x,-y);
end while
Thuật toán vẽ hyperbol trong vùng tăng chậm
x=
2
2 2
a
a b
, y=
2
2 2
b
a b
;
f= b2
–
2
4
a
; H=2b2
+
2 2
2 2
2a b
a b
, K=2b2
-2a2
round(x);
round(y);
round(H);
round(f);
n( với n>
2
2 2
a
a b
) điều kiện dừng
putpixel(x,y);
while x< n do
if( f<0) then
H=H+2b2
;
K=K+2b2
;
f = f + H;
else
H=H+2b2
;
K=K+2b2
– 2a2
;
f=f +K;
y=y+1;
end if
x=x+1;
putpixel(x,y);
putpixel(x,-y);
putpixel(-x,y);
putpixel(-x,-y);
end while
Trường hợp 2:
2 2
2 2
1
x y
a b
  
Bước 1:
Ta có
2 2
2 2
1
x y
a b
   <=> y= 2 2b
x a
a
  , suy ra hyperbol này đối xứng qua trục hoành.
Mặt khác với x    0, ,0    của hyperbol cũng đối xứng với nhau qua trục tung. Vì
vậy ta chỉ cần vẽ một nhánh của hyperbol rồi lấy đối xứng.
Giả sử ta chọn:
 
2 2
0,
b
y x a
a
x

 

  
Bước 2:
y= 2 2b
x a
a
 có đạo hàm y’=
2 2
bx
a x a
Phân chia đồ thị thành các vùng hệ số góc tăng nhanh và tăng chậm ta được:
 Nếu 2
2 2
0 '( ) 1
0
f x
a
x
b a
 


 

thì
 
1
1
1
, 1
i i
i i i
x x
y y y


 

 
 Nếu 2
2 2
1 '( )f x
a
x
b a





thì
 
1
1
1
, 1
i i
i i i
y y
x x x


 

 
Bước 3:
Trường hợp tăng chậm:
2
2 2
0 '( ) 1
0
f x
a
x
b a
 


 

thì
 
1
1
1
, 1
i i
i i i
x x
y y y


 

 
Hàm kiểm tra bên trên, bên dưới hyperbol
F(x,y)=b2
x2
- a2
y2
+ a2
b2
Gọi điểm MidPoint là M(xi+1,yi+
1
2
) đặt fi=F(Mi) ta có:
F(M)=F(xi+1,yi+
1
2
)= b2
(xi+1)2
– a2
(yi+
1
2
)2
+ a2
b2
=
b2
xi
2
+b2
xi – a2
yi
2
– a2
yi - [
2
4
a
]+b2
+a2
b2
 Nếu F(Mi)<0 ta có điểm Mi nằm bên trên hyperbol, căn cứ vào Hình, điểm
nguyên tiếp theo ta chọn là điểm A(xi+1,yi) với yi+1 =yi
 Nếu F(Mi)>0 ta có điểm Mi nằm bên dưới hyperbol, căn cứ vào Hình, điểm
nguyên tiếp theo ta chọn là điểm B(xi+1,yi+1) với yi+1 =yi+1
Để tính F(M) nhanh hơn ta tìm sự chênh lệch giữa F(Mi) và F(Mi+1)
F(Mi+1) – F(Mi)=fi+1 - fi
Xét F(Mi)<0 ta có:
fi+1 - fi = b2
(xi +1)2
+b2
(xi +1) – a2
yi
2
– a2
yi - [
2
4
a
]+b2
+ a2
b2
–
[b2
xi
2
+b2
xi – a2
yi
2
– a2
yi - [
2
4
a
]+b2
+ a2
b2
] = 2b2
(xi+1)
<=> fi+1 = fi + 2b2
(xi+1)
Xét F(Mi)>0 ta có:
fi+1 - fi = b2
(xi +1)2
+b2
(xi +1) – a2
(yi +1)2
– a2
(yi +1) - [
2
4
a
]+b2
+ a2
b2
–
[b2
xi
2
+b2
xi – a2
yi
2
– a2
yi - [
2
4
a
]+b2
+ a2
b2
] = 2b2
(xi+1) – 2a2
(yi +1)
<=> fi+1 = fi +2b2
(xi+1) – 2a2
(yi +1)
Đặt H = 2b2
(xi+1)
K=2b2
(xi+1) – 2a2
(yi +1)
Tổng quát ta có:
x1=0, y1=b; H= 2b2
,K= 2b2
– 2a2
(b+1);
f1=b2
-
2
4
a
-a2
b ;
Nếu fi<0 thì xi+1=xi+1 , yi+1=yi
H=H+2b2
;
K=K+2b2
;
fi+1 = fi + H;
Nếu fi>0 thì xi+1=xi +1, yi+1=yi+1
H=H+2b2
;
K=K+2b2
– 2a2
;
fi+1=fi +K;
Trường hợp tăng nhanh
2
2 2
1 '( )f x
a
x
b a





thì
 
1
1
1
, 1
i i
i i i
y y
x x x


 

 
Hàm kiểm tra bên trên, bên dưới hyperbol
F(x,y)=b2
x2
- a2
y2
+ a2
b2
Gọi điểm MidPoint là M(xi+
1
2
,yi+1) đặt fi=F(Mi) ta có:
F(M)=F(xi+
1
2
,yi+1)= b2
(xi+
1
2
)2
– a2
(yi+1)2
+ a2
b2
=
b2
xi
2
+b2
xi – a2
yi
2
– 2a2
yi+[
2
4
b
]- a2
+ a2
b2
 Nếu F(Mi)<0 ta có điểm Mi nằm bên trên hyperbol, căn cứ vào Hình, điểm
nguyên tiếp theo ta chọn là điểm B(xi+1,yi+1) với xi+1 =xi+1
 Nếu F(Mi)>0 ta có điểm Mi nằm bên dưới hyperbol, căn cứ vào Hình, điểm
nguyên tiếp theo ta chọn là điểm A(xi,yi+1) với xi+1 =xi
Để tính F(M) nhanh hơn ta tìm sự chênh lệch giữa F(Mi) và F(Mi+1)
F(Mi+1) – F(Mi)=fi+1 - fi
Xét F(Mi)<0 ta có:
fi+1 - fi = b2
(xi +1)2
+b2
(xi +1) – a2
(yi +1)2
– 2a2
(yi +1)+
2
4
b
- a2
+ a2
b2
–
[b2
xi
2
+b2
xi – a2
yi
2
– 2a2
yi+
2
4
b
- a2
+ a2
b2
] = 2b2
(xi+1) – a2
(2yi +3)
<=> fi+1 = fi + 2b2
(xi+1) – a2
(2yi +3)
Xét F(Mi)>0 ta có:
fi+1 - fi = b2
xi
2
+b2
xi – a2
(yi +1)2
– 2a2
(yi +1)+
2
4
b
- a2
+ a2
b2
–
[b2
xi
2
+b2
xi – a2
yi
2
– 2a2
yi+
2
4
b
- a2
+ a2
b2
] = - a2
(2yi+3)
<=> fi+1 = fi - a2
(2yi+3)
Đặt H = 2b2
(xi+1) – a2
(2yi +3)
K=- a2
(2yi+3)
Tổng quát ta có:
x1=
2
2 2
a
b a
, y1=
2
2 2
b
b a
;
H= – 3a2
+2b2
K= - 3a2
-
2 2
2 2
2a b
b a
f1= -[
2 2
2 2
a b
b a
] +[
2
4
b
] - a2
;
Nếu fi<0 thì xi+1=xi+1 , yi+1=yi+1
H=H +2b2
– 2a2
;
K=K – 2a2
fi+1 = fi +H;
Nếu fi>0 thì xi+1=xi , yi+1=yi+1
H=H – 2a2
;
K=K – 2a2
;
fi+1=fi +K;
Bước 4:
Thuật toán vẽ hyperbol trong vùng tăng chậm
x=0, y=b; H= 2b2
,K= 2b2
– 2a2
(b+1);
f=b2
–[
2
4
a
]-a2
b;
putpixel(x,y);
while x<
2
2 2
a
b a
do
if( f<0) then
H=H+2b2
;
K=K+2b2
;
f = f + H;
else
H=H+2b2
;
K=K+2b2
– 2a2
;
f=f +K;
y=y+1;
end if
x=x+1;
putpixel(x,y);
putpixel(x,-y);
putpixel(-x,y);
putpixel(-x,-y);
end while
Thuật toán vẽ hyperbol trong vùng tăng nhanh
x=
2
2 2
a
b a
, y=
2
2 2
b
b a
;
H= – 3a2
+2b2
K= - 3a2
-
2 2
2 2
2a b
b a
f1= -[
2 2
2 2
a b
b a
] +[
2
4
b
] - a2
;
round(x);
round(y);
round(K);
n( với n>
2
2 2
a
b a
) điều kiện dừng
putpixel(x,y);
while x<n do
if( f<0) then
H=H +2b2
– 2a2
;
K=K – 2a2
f= f +H;
x=x+1;
else
H=H – 2a2
;
K=K – 2a2
;
f=f+K;
end if
y=y+1;
putpixel(x,y);
putpixel(x,-y);
putpixel(-x,y);
putpixel(-x,-y);
end while
Bài 4: Các điểm nguyên vẽ phát sinh khi sử dụng thuật toán DDA, Bresenham cho
các đoạn thẳng sau:
 A1(5,10), B1(15,17)
Ta có m =
y
x


=
7
10
<1 nên đây là đoạn thẳng tăng chậm
=> Các điểm nguyên vẽ phát sinh khi sử dụng thuật toán DDA:
i xi y=y+m yi=round(y)
1 5 10 10
2 6 107
10
11
3 7 114
10
11
4 8 121
10
12
5 9 128
10
13
6 10 135
10
14
7 11 142
10
14
8 12 149
10
15
9 13 156
10
16
10 14 163
10
16
11 15 17 17
Các điểm nguyên vẽ phát sinh khi sử dụng thuật toán Bresenham:
i pi xi yi
1 4 5 10
2 -2 6 11
3 12 7 11
4 6 8 12
5 0 9 13
6 -6 10 14
7 8 11 14
8 2 12 15
9 -4 13 16
10 10 14 16
11 15 17
 A2(-2,3) B2(-12,7)
Ta có m =
y
x


=
4
10

<1 nên đây là đoạn thẳng giảm chậm
=> Các điểm nguyên vẽ phát sinh khi sử dụng thuật toán DDA:
i xi y=y+m yi=round(y)
1 -12 7 7
2 -11 66
10
7
3 -10 62
10
6
4 -9 58
10
6
5 -8 54
10
5
6 -7 50
10
5
7 -6 46
10
5
8 -5 42
10
4
9 -4 38
10
4
10 -3 34
10
3
11 -2 3 3
 A3(0,10), B3(15,10)
Ta có m=0, đây là đường thẳng nằm ngang nhưng ta có thể áp dụng trường hợp của
đường thẳng tăng chậm.
Các điểm phát sinh khi sử dụng thuật toán DDA:
i xi y=y+m yi=round(y)
1 0 10 10
2 1 10 10
3 2 10 10
4 3 10 10
5 4 10 10
6 5 10 10
7 6 10 10
8 7 10 10
9 8 10 10
10 9 10 10
11 10 10 10
12 11 10 10
13 12 10 10
14 13 10 10
15 14 10 10
16 15 10 10
 A4(5,-1), B4(5,-11)
Các điểm phát sinh khi sử dụng thuật toán DDA:
i xi yi
1 5 -1
2 5 -2
3 5 -3
4 5 -4
5 5 -5
6 5 -6
7 5 -7
8 5 -8
9 5 -9
10 5 -10
11 5 -11

More Related Content

Viewers also liked

01.huong dan trinh bay khoa luan
01.huong dan trinh bay khoa luan01.huong dan trinh bay khoa luan
01.huong dan trinh bay khoa luan
Phi Phi
 
1 qcvn-42 2009-btnmt-quy-chuan-ky-thuat-quoc-gia-ve-chuan-thong-tin-dia-ly
1 qcvn-42 2009-btnmt-quy-chuan-ky-thuat-quoc-gia-ve-chuan-thong-tin-dia-ly1 qcvn-42 2009-btnmt-quy-chuan-ky-thuat-quoc-gia-ve-chuan-thong-tin-dia-ly
1 qcvn-42 2009-btnmt-quy-chuan-ky-thuat-quoc-gia-ve-chuan-thong-tin-dia-ly
Phi Phi
 
Chuong 1 matlab co ban
Chuong 1 matlab co banChuong 1 matlab co ban
Chuong 1 matlab co ban
Phi Phi
 
Tai lieu huongdandttx_mon_duongloi_cm_cua_dcsvn
Tai lieu huongdandttx_mon_duongloi_cm_cua_dcsvnTai lieu huongdandttx_mon_duongloi_cm_cua_dcsvn
Tai lieu huongdandttx_mon_duongloi_cm_cua_dcsvn
Phi Phi
 
Bgqht tmoi 1_xvesm
Bgqht tmoi 1_xvesmBgqht tmoi 1_xvesm
Bgqht tmoi 1_xvesm
Phi Phi
 

Viewers also liked (9)

Ads
AdsAds
Ads
 
Ltdt bt chuong 1
Ltdt bt chuong 1Ltdt bt chuong 1
Ltdt bt chuong 1
 
01.huong dan trinh bay khoa luan
01.huong dan trinh bay khoa luan01.huong dan trinh bay khoa luan
01.huong dan trinh bay khoa luan
 
1 qcvn-42 2009-btnmt-quy-chuan-ky-thuat-quoc-gia-ve-chuan-thong-tin-dia-ly
1 qcvn-42 2009-btnmt-quy-chuan-ky-thuat-quoc-gia-ve-chuan-thong-tin-dia-ly1 qcvn-42 2009-btnmt-quy-chuan-ky-thuat-quoc-gia-ve-chuan-thong-tin-dia-ly
1 qcvn-42 2009-btnmt-quy-chuan-ky-thuat-quoc-gia-ve-chuan-thong-tin-dia-ly
 
Chuong 1 matlab co ban
Chuong 1 matlab co banChuong 1 matlab co ban
Chuong 1 matlab co ban
 
03 dia ly-01
03 dia ly-0103 dia ly-01
03 dia ly-01
 
S7 200 optimize
S7 200 optimizeS7 200 optimize
S7 200 optimize
 
Tai lieu huongdandttx_mon_duongloi_cm_cua_dcsvn
Tai lieu huongdandttx_mon_duongloi_cm_cua_dcsvnTai lieu huongdandttx_mon_duongloi_cm_cua_dcsvn
Tai lieu huongdandttx_mon_duongloi_cm_cua_dcsvn
 
Bgqht tmoi 1_xvesm
Bgqht tmoi 1_xvesmBgqht tmoi 1_xvesm
Bgqht tmoi 1_xvesm
 

Similar to 07k4114 bai tapso1

Toan d dh_2011
Toan d dh_2011Toan d dh_2011
Toan d dh_2011
Huynh ICT
 
Bộ sách về phương trình hàm
Bộ sách về phương trình hàmBộ sách về phương trình hàm
Bộ sách về phương trình hàm
Thế Giới Tinh Hoa
 
Chuyên đề 2 hàm số bậc i và ii
Chuyên đề 2 hàm số bậc i và iiChuyên đề 2 hàm số bậc i và ii
Chuyên đề 2 hàm số bậc i và ii
phamchidac
 
Các phương pháp hay giải Phuong trinh-vo-ty
Các phương pháp hay giải Phuong trinh-vo-tyCác phương pháp hay giải Phuong trinh-vo-ty
Các phương pháp hay giải Phuong trinh-vo-ty
roggerbob
 
chuyên đề cực trị GTLN và GTNN , rất chi tiết và đầy đủ
chuyên đề cực trị GTLN và GTNN , rất chi tiết và đầy đủ chuyên đề cực trị GTLN và GTNN , rất chi tiết và đầy đủ
chuyên đề cực trị GTLN và GTNN , rất chi tiết và đầy đủ
Jackson Linh
 
phuong-phap-tinh_tri_nh-quo_c-luong_chuong-4---no_i-suy-va_-xa_p-xi_-ha_m - [...
phuong-phap-tinh_tri_nh-quo_c-luong_chuong-4---no_i-suy-va_-xa_p-xi_-ha_m - [...phuong-phap-tinh_tri_nh-quo_c-luong_chuong-4---no_i-suy-va_-xa_p-xi_-ha_m - [...
phuong-phap-tinh_tri_nh-quo_c-luong_chuong-4---no_i-suy-va_-xa_p-xi_-ha_m - [...
trang384154
 
Chu de cuc tri ham so
Chu de cuc tri ham soChu de cuc tri ham so
Chu de cuc tri ham so
Huynh ICT
 
Tamthucbachai
TamthucbachaiTamthucbachai
Tamthucbachai
honghoi
 

Similar to 07k4114 bai tapso1 (20)

Toan d dh_2011
Toan d dh_2011Toan d dh_2011
Toan d dh_2011
 
Bộ sách về phương trình hàm
Bộ sách về phương trình hàmBộ sách về phương trình hàm
Bộ sách về phương trình hàm
 
Chuyen de-ham-so-bac-i-va-ii
Chuyen de-ham-so-bac-i-va-iiChuyen de-ham-so-bac-i-va-ii
Chuyen de-ham-so-bac-i-va-ii
 
Chuyên đề 2 hàm số bậc i và ii
Chuyên đề 2 hàm số bậc i và iiChuyên đề 2 hàm số bậc i và ii
Chuyên đề 2 hàm số bậc i và ii
 
Bài tập đạo hàm có hướng dẫn
Bài tập đạo hàm có hướng dẫnBài tập đạo hàm có hướng dẫn
Bài tập đạo hàm có hướng dẫn
 
chuyen de tich phan on thi dai hoc
chuyen de tich phan on thi dai hocchuyen de tich phan on thi dai hoc
chuyen de tich phan on thi dai hoc
 
Tổng hợp bồi dưỡng học sinh giỏi
Tổng hợp bồi dưỡng học sinh giỏiTổng hợp bồi dưỡng học sinh giỏi
Tổng hợp bồi dưỡng học sinh giỏi
 
20 chuyen de boi duong toan 8
20 chuyen de boi duong toan 820 chuyen de boi duong toan 8
20 chuyen de boi duong toan 8
 
Phuong trinh vo ty
Phuong trinh vo tyPhuong trinh vo ty
Phuong trinh vo ty
 
Đáp Án Các Đề Thi Thử Toán 11 HK2
Đáp Án Các Đề Thi Thử Toán 11 HK2Đáp Án Các Đề Thi Thử Toán 11 HK2
Đáp Án Các Đề Thi Thử Toán 11 HK2
 
phương trình hàm.pdf
phương trình hàm.pdfphương trình hàm.pdf
phương trình hàm.pdf
 
Các phương pháp hay giải Phuong trinh-vo-ty
Các phương pháp hay giải Phuong trinh-vo-tyCác phương pháp hay giải Phuong trinh-vo-ty
Các phương pháp hay giải Phuong trinh-vo-ty
 
Bài tập eclip cơ bản
Bài tập eclip cơ bảnBài tập eclip cơ bản
Bài tập eclip cơ bản
 
Chương 4 - Nội suy và xấp xỉ hàm.ppt
Chương 4 - Nội suy và xấp xỉ hàm.pptChương 4 - Nội suy và xấp xỉ hàm.ppt
Chương 4 - Nội suy và xấp xỉ hàm.ppt
 
chuyên đề cực trị GTLN và GTNN , rất chi tiết và đầy đủ
chuyên đề cực trị GTLN và GTNN , rất chi tiết và đầy đủ chuyên đề cực trị GTLN và GTNN , rất chi tiết và đầy đủ
chuyên đề cực trị GTLN và GTNN , rất chi tiết và đầy đủ
 
phuong-phap-tinh_tri_nh-quo_c-luong_chuong-4---no_i-suy-va_-xa_p-xi_-ha_m - [...
phuong-phap-tinh_tri_nh-quo_c-luong_chuong-4---no_i-suy-va_-xa_p-xi_-ha_m - [...phuong-phap-tinh_tri_nh-quo_c-luong_chuong-4---no_i-suy-va_-xa_p-xi_-ha_m - [...
phuong-phap-tinh_tri_nh-quo_c-luong_chuong-4---no_i-suy-va_-xa_p-xi_-ha_m - [...
 
Chu de cuc tri ham so
Chu de cuc tri ham soChu de cuc tri ham so
Chu de cuc tri ham so
 
Giai nhanh phuong phap tinh
Giai nhanh phuong phap tinhGiai nhanh phuong phap tinh
Giai nhanh phuong phap tinh
 
Tamthucbachai
TamthucbachaiTamthucbachai
Tamthucbachai
 
Chuyên đề bai tap mu va logarit
Chuyên đề bai tap mu va logaritChuyên đề bai tap mu va logarit
Chuyên đề bai tap mu va logarit
 

More from Phi Phi

Vsf 473 lect_13_bonsai37
Vsf 473 lect_13_bonsai37Vsf 473 lect_13_bonsai37
Vsf 473 lect_13_bonsai37
Phi Phi
 
Vsf 473 lect_13_bonsai36
Vsf 473 lect_13_bonsai36Vsf 473 lect_13_bonsai36
Vsf 473 lect_13_bonsai36
Phi Phi
 
Vsf 473 lect_13_bonsai35
Vsf 473 lect_13_bonsai35Vsf 473 lect_13_bonsai35
Vsf 473 lect_13_bonsai35
Phi Phi
 
Vsf 473 lect_13_bonsai34
Vsf 473 lect_13_bonsai34Vsf 473 lect_13_bonsai34
Vsf 473 lect_13_bonsai34
Phi Phi
 
Vsf 473 lect_13_bonsai33
Vsf 473 lect_13_bonsai33Vsf 473 lect_13_bonsai33
Vsf 473 lect_13_bonsai33
Phi Phi
 
Vsf 473 lect_13_bonsai32
Vsf 473 lect_13_bonsai32Vsf 473 lect_13_bonsai32
Vsf 473 lect_13_bonsai32
Phi Phi
 
Vsf 473 lect_13_bonsai31
Vsf 473 lect_13_bonsai31Vsf 473 lect_13_bonsai31
Vsf 473 lect_13_bonsai31
Phi Phi
 
Vsf 473 lect_13_bonsai30
Vsf 473 lect_13_bonsai30Vsf 473 lect_13_bonsai30
Vsf 473 lect_13_bonsai30
Phi Phi
 
Vsf 473 lect_13_bonsai29
Vsf 473 lect_13_bonsai29Vsf 473 lect_13_bonsai29
Vsf 473 lect_13_bonsai29
Phi Phi
 
Vsf 473 lect_13_bonsai28
Vsf 473 lect_13_bonsai28Vsf 473 lect_13_bonsai28
Vsf 473 lect_13_bonsai28
Phi Phi
 
Vsf 473 lect_13_bonsai26
Vsf 473 lect_13_bonsai26Vsf 473 lect_13_bonsai26
Vsf 473 lect_13_bonsai26
Phi Phi
 
Vsf 473 lect_13_bonsai25
Vsf 473 lect_13_bonsai25Vsf 473 lect_13_bonsai25
Vsf 473 lect_13_bonsai25
Phi Phi
 
Vsf 473 lect_13_bonsai23
Vsf 473 lect_13_bonsai23Vsf 473 lect_13_bonsai23
Vsf 473 lect_13_bonsai23
Phi Phi
 
Vsf 473 lect_13_bonsai21
Vsf 473 lect_13_bonsai21Vsf 473 lect_13_bonsai21
Vsf 473 lect_13_bonsai21
Phi Phi
 
Vsf 473 lect_13_bonsai20
Vsf 473 lect_13_bonsai20Vsf 473 lect_13_bonsai20
Vsf 473 lect_13_bonsai20
Phi Phi
 
Vsf 473 lect_13_bonsai19
Vsf 473 lect_13_bonsai19Vsf 473 lect_13_bonsai19
Vsf 473 lect_13_bonsai19
Phi Phi
 
Vsf 473 lect_13_bonsai18
Vsf 473 lect_13_bonsai18Vsf 473 lect_13_bonsai18
Vsf 473 lect_13_bonsai18
Phi Phi
 

More from Phi Phi (20)

Vsf 473 lect_13_bonsai37
Vsf 473 lect_13_bonsai37Vsf 473 lect_13_bonsai37
Vsf 473 lect_13_bonsai37
 
Vsf 473 lect_13_bonsai36
Vsf 473 lect_13_bonsai36Vsf 473 lect_13_bonsai36
Vsf 473 lect_13_bonsai36
 
Vsf 473 lect_13_bonsai35
Vsf 473 lect_13_bonsai35Vsf 473 lect_13_bonsai35
Vsf 473 lect_13_bonsai35
 
Vsf 473 lect_13_bonsai34
Vsf 473 lect_13_bonsai34Vsf 473 lect_13_bonsai34
Vsf 473 lect_13_bonsai34
 
Vsf 473 lect_13_bonsai33
Vsf 473 lect_13_bonsai33Vsf 473 lect_13_bonsai33
Vsf 473 lect_13_bonsai33
 
Vsf 473 lect_13_bonsai32
Vsf 473 lect_13_bonsai32Vsf 473 lect_13_bonsai32
Vsf 473 lect_13_bonsai32
 
Vsf 473 lect_13_bonsai31
Vsf 473 lect_13_bonsai31Vsf 473 lect_13_bonsai31
Vsf 473 lect_13_bonsai31
 
Vsf 473 lect_13_bonsai30
Vsf 473 lect_13_bonsai30Vsf 473 lect_13_bonsai30
Vsf 473 lect_13_bonsai30
 
Vsf 473 lect_13_bonsai29
Vsf 473 lect_13_bonsai29Vsf 473 lect_13_bonsai29
Vsf 473 lect_13_bonsai29
 
Vsf 473 lect_13_bonsai28
Vsf 473 lect_13_bonsai28Vsf 473 lect_13_bonsai28
Vsf 473 lect_13_bonsai28
 
Vsf 473 lect_13_bonsai26
Vsf 473 lect_13_bonsai26Vsf 473 lect_13_bonsai26
Vsf 473 lect_13_bonsai26
 
Vsf 473 lect_13_bonsai25
Vsf 473 lect_13_bonsai25Vsf 473 lect_13_bonsai25
Vsf 473 lect_13_bonsai25
 
Vsf 473 lect_13_bonsai24
Vsf 473 lect_13_bonsai24Vsf 473 lect_13_bonsai24
Vsf 473 lect_13_bonsai24
 
Vsf 473 lect_13_bonsai23
Vsf 473 lect_13_bonsai23Vsf 473 lect_13_bonsai23
Vsf 473 lect_13_bonsai23
 
Vsf 473 lect_13_bonsai22
Vsf 473 lect_13_bonsai22Vsf 473 lect_13_bonsai22
Vsf 473 lect_13_bonsai22
 
Vsf 473 lect_13_bonsai21
Vsf 473 lect_13_bonsai21Vsf 473 lect_13_bonsai21
Vsf 473 lect_13_bonsai21
 
Vsf 473 lect_13_bonsai20
Vsf 473 lect_13_bonsai20Vsf 473 lect_13_bonsai20
Vsf 473 lect_13_bonsai20
 
Vsf 473 lect_13_bonsai19
Vsf 473 lect_13_bonsai19Vsf 473 lect_13_bonsai19
Vsf 473 lect_13_bonsai19
 
Vsf 473 lect_13_bonsai18
Vsf 473 lect_13_bonsai18Vsf 473 lect_13_bonsai18
Vsf 473 lect_13_bonsai18
 
Vsf 473 lect_13_bonsai17
Vsf 473 lect_13_bonsai17Vsf 473 lect_13_bonsai17
Vsf 473 lect_13_bonsai17
 

Recently uploaded

Báo cáo thực tập môn logistics và quản lý chuỗi cung ứng
Báo cáo thực tập môn logistics và quản lý chuỗi cung ứngBáo cáo thực tập môn logistics và quản lý chuỗi cung ứng
Báo cáo thực tập môn logistics và quản lý chuỗi cung ứng
ngtrungkien12
 
bài tập trắc nghiệm cho sinh viên. (1)doc.doc
bài tập trắc nghiệm cho sinh viên. (1)doc.docbài tập trắc nghiệm cho sinh viên. (1)doc.doc
bài tập trắc nghiệm cho sinh viên. (1)doc.doc
LeHoaiDuyen
 

Recently uploaded (6)

Chương 7 Chủ nghĩa xã hội khoa học neu slide
Chương 7 Chủ nghĩa xã hội khoa học neu slideChương 7 Chủ nghĩa xã hội khoa học neu slide
Chương 7 Chủ nghĩa xã hội khoa học neu slide
 
Báo cáo thực tập môn logistics và quản lý chuỗi cung ứng
Báo cáo thực tập môn logistics và quản lý chuỗi cung ứngBáo cáo thực tập môn logistics và quản lý chuỗi cung ứng
Báo cáo thực tập môn logistics và quản lý chuỗi cung ứng
 
Căn hộ Aio City Bình Tân - Tập đoàn Hoa Lâm.pdf
Căn hộ Aio City Bình Tân - Tập đoàn Hoa Lâm.pdfCăn hộ Aio City Bình Tân - Tập đoàn Hoa Lâm.pdf
Căn hộ Aio City Bình Tân - Tập đoàn Hoa Lâm.pdf
 
Enter Digital - Ứng dụng Digital Marketing trong nhà hàng Nhật Bản - Minh Anh...
Enter Digital - Ứng dụng Digital Marketing trong nhà hàng Nhật Bản - Minh Anh...Enter Digital - Ứng dụng Digital Marketing trong nhà hàng Nhật Bản - Minh Anh...
Enter Digital - Ứng dụng Digital Marketing trong nhà hàng Nhật Bản - Minh Anh...
 
bài tập trắc nghiệm cho sinh viên. (1)doc.doc
bài tập trắc nghiệm cho sinh viên. (1)doc.docbài tập trắc nghiệm cho sinh viên. (1)doc.doc
bài tập trắc nghiệm cho sinh viên. (1)doc.doc
 
Tạp dề ngắn phục vụ cho nhà hàng, quán cafe
Tạp dề ngắn phục vụ cho nhà hàng, quán cafeTạp dề ngắn phục vụ cho nhà hàng, quán cafe
Tạp dề ngắn phục vụ cho nhà hàng, quán cafe
 

07k4114 bai tapso1

  • 1. Họ và tên: Đinh Thị Minh Thu MSSV: 07K4114 Lớp: 07CK4 Bài Tập Số 1 - Đồ Họa Máy Tính Bài 1: Trình bày thuật toán vẽ ellipse có tâm là gốc tọa độ, có phương trình 2 2 x a + 2 2 y b =1 Bước 1: Vì ellipse 2 2 x a + 2 2 y b =1 đối xứng qua trục 0x và 0y nên ta chỉ cần dựng 1 trong 4 phần của ellipse. Giả sử ta chọn trong góc phần tư thứ nhất: y= b a 2 2 a x với x  0,a Bước 2: Ellipse y= b a 2 2 a x với x  0,a có đạo hàm y’= - b a 2 2 x a x Bảng khảo sát: x 0 a b y’ y 2 2 2 b a b 0 0 - -1 2 2 2 a a b
  • 2. Dựa vào BKS ta có:  Nếu x 2 2 2 0, a a b       thì   1 1 1 1 , i i i i i x x y y y              Nếu x 2 2 2 , a a a b       thì  1 1 , 1 1 i i i i i x x x y y             Bước 3: Trường hợp giảm chậm x 2 2 2 0, a a b       thì   1 1 1 1 , i i i i i x x y y y             Hàm kiểm tra bên trong, bên ngoài ellipse F(x,y)=b2 x2 + a2 y2 – a2 b2 Gọi điểm MidPoint là M 1 1, 2 i ix y        đặt fi=F(M) ta có: fi=b2 (xi+1)2 + a2 (yi-1/2)2 - a2 b2 = b2 xi 2 +a2 yi 2 +2b2 xi –a2 yi+ 2 4 a +b2 – a2 b2  Nếu F(Mi)<0 ta có điểm Mi nằm trong ellipse, căn cứ vào hình điểm nguyên được chọn tiếp theo là điểm A(xi+1,yi) với yi+1=yi  Nếu F(Mi)>0 ta có điểm Mi nằm ngoài ellipse, căn cứ vào hình điểm nguyên được chọn tiếp theo là điểm B(xi+1,yi-1) với yi+1=yi -1 i B A iy iy -1/2 iy -1 ix 1ix  M = =
  • 3. Để tính F(M) nhanh hơn ta tìm sự chênh lệch giữa F(Mi+1) và F(Mi) ta có: F(Mi+1) – F(Mi)=fi+1 - fi Xét F(Mi)<0 ta có: fi+1 – fi =b2 (xi+1)2 +a2 yi 2 +2b2 (xi+1)-a2 yi+ 2 4 a +b2 – a2 b2 – [b2 xi 2 +a2 yi 2 +2b2 xi - a2 yi+ 2 4 a +b2 – a2 b2 ] =b2 (2xi+3) <=> fi+1=fi +b2 (2xi+3) Xét F(Mi)>0 ta có: fi+1 – fi =b2 (xi+1)2 +a2 ( yi -1)2 +2b2 (xi+1)-a2 ( yi -1)+ 2 4 a +b2 – a2 b2 – [b2 xi 2 +a2 yi 2 +2b2 xi - a2 yi+ 2 4 a +b2 – a2 b2 ] =b2 (2xi+3) +a2 (2-2yi) <=> fi+1=fi +b2 (2xi+3)+a2 (2-2yi) Đặt H=b2 (2xi+3) K=b2 (2xi+3)+a2 (2-2yi) Tổng quát ta có: x1=0,y1=b f1= [ 2 4 a ]+b2 – a2 b H=3b2 K=2a2 -2a2 b+3b2  Nếu fi<0 thì xi+1=xi+1, yi+1=yi fi+1=fi +H H=H+2b2 K=K+2b2  Nếu fi>0 thì xi+1=xi+1, yi+1=yi -1 fi+1=fi +K H+=2b2 K+=2a2 +2b2 Trường hợp giảm nhanh x 2 2 2 , a a a b       thì  1 1 , 1 1 i i i i i x x x y y            
  • 4. Hàm kiểm tra bên trong, bên ngoài ellipse F(x,y)=b2 x2 + a2 y2 – a2 b2 Gọi điểm MidPoint là M 1 , 1 2 i ix y        đặt fi=F(M) ta có: fi=b2 (xi+1/2)2 + a2 (yi-1)2 - a2 b2 = b2 xi 2 +a2 yi 2 -2a2 yi +b2 xi+ 2 4 b +a2 – a2 b2  Nếu F(Mi)<0 ta có điểm Mi nằm trong ellipse, căn cứ vào hình điểm nguyên được chọn tiếp theo là điểm B(xi+1,yi-1) với xi+1 = xi+1, yi+1=yi -1  Nếu F(Mi)>0 ta có điểm Mi nằm ngoài ellipse, căn cứ vào hình điểm nguyên được chọn tiếp theo là điểm A(xi ,yi-1) với xi+1 = xi, yi+1=yi -1 Để tính F(M) nhanh hơn ta tìm sự chênh lệch giữa F(Mi+1) và F(Mi) ta có: F(Mi+1) – F(Mi)=fi+1 - fi Xét F(Mi)<0 ta có: fi+1 – fi =b2 (xi+1)2 +a2 (yi-1)2 -2a2 (yi-1)+b2 ( xi+1)+ 2 4 b +a2 – a2 b2 – [b2 xi 2 +a2 yi 2 -2a2 yi +b2 xi+ 2 4 b +a2 – a2 b2 ] =b2 (2xi+2)+a2 (3-2yi) <=> fi+1=fi +b2 (2xi+2)+a2 (3-2yi)
  • 5. Xét F(Mi)>0 ta có: fi+1 – fi =b2 xi 2 +a2 (yi-1)2 -2a2 (yi-1)+b2 xi+ 2 4 b +a2 – a2 b2 – [b2 xi 2 +a2 yi 2 -2a2 yi +b2 xi+ 2 4 b +a2 – a2 b2 ] =a2 (3-2yi) <=> fi+1=fi +a2 (3-2yi) Đặt H=a2 (-2yi+3) K=b2 (2xi+2)+a2 (3-2yi) Tổng quát ta có: x1= 2 2 2 a a b ,y1= 2 2 2 b a b f1= [ 2 4 b ]– 2 2 2 2 a b a b +a2 H=3a2 - 2 2 2 2 2a b a b K=3a2 +2b2  Nếu fi<0 thì xi+1=xi+1, yi+1=yi - 1 fi+1=fi +K H=H+2a2 K=K+2b2 +2a2  Nếu fi>0 thì xi+1=xi, yi+1=yi -1 fi+1=fi +H H+=2a2 K+=2a2 Bước 4: Thuật toán vẽ ellipse trong vùng giảm chậm: x=0,y=b; f= [ 2 4 a ]+b2 – a2 b; H=3b2 ; K=2a2 -2a2 b+3b2 ; putpixel(x,y); while(x< 2 2 2 a a b ) do if(f<0)then f=f +H; H=H+2b2 ; K=K+2b2 ;
  • 6. else f=f +K; H+=2b2 ; K+=2a2 +2b2 ; y=y-1; end if x=x+1; putpixel(x,y); putpixel(-x,y); putpixel(-x,-y); putpixel(x,-y); end while Thuật toán vẽ ellipse trong vùng giảm nhanh x= 2 2 2 a a b ,y= 2 2 2 b a b f= [ 2 4 b ]– 2 2 2 2 a b a b +a2 H=3a2 - 2 2 2 2 2a b a b K=3a2 +2b2 round(x); round(y); round(H); round(f); putpixel(x,y); while(x<=a) do if(f<0)then f=f +K; H=H+2a2 ; K=K+2b2 +2a2 ; x=x+1; else f=f+H; H+=2a2 ; K+=2a2 ; end if y=y-1; putpixel(x,y); putpixel(-x,y); putpixel(-x,-y); putpixel(x,-y); end while
  • 7. Bài 2: Trình bày thuật toán vẽ parabol y= 2 x A và y2 =Ax Trường hợp 1: y= 2 x A Không mất tính tổng quát ta đặt 1 A =a. Khi đó y=ax2 Bước 1: Vì parabol y=ax2 đối xứng qua trục 0y nên ta chỉ cần dựng 1 trong 2 nửa của parabol, giả sử là:   2 ax 0, y x          Bước 2: Parabol y=ax2 với x  0,  có đạo hàm y’=2ax Bảng khảo sát: Dựa vào bảng khảo sát ta có:  Nếu x 1 0, 2a      thì   1 1 1 , 1 i i i i i x x y y y              Nếu x 1 , 2a       thì  1 1 , 1 1 i i i i i x x x y y             x y’ y 0 0 1/2a 0 1/4a + + 1 +
  • 8. Bước 3 Trường hợp tăng chậm: x 1 0, 2a      thì   1 1 1 , 1 i i i i i x x y y y             Hàm kiểm tra bên trong, bên ngoài parabol F(x,y)=ax2 - y Gọi điểm MidPoint là M(xi+1,yi+ 1 2 ) đặt fi=F(Mi) ta có: F(M)=F(xi+1,yi+ 1 2 )=a(xi+1)2 – (yi+ 1 2 ) = axi 2 + 2axi – yi +a - 1 2  Nếu F(Mi)<0 ta có điểm Mi nằm bên trong parabol, căn cứ vào Hình, điểm nguyên tiếp theo ta chọn là điểm A(xi+1,yi) với yi+1 =yi  Nếu F(Mi)>0 ta có điểm Mi nằm bên ngoài parabol, căn cứ vào Hình, điểm nguyên tiếp theo ta chọn là điểm B(xi+1,yi+1) với yi+1 =yi+1 Để tính F(M) nhanh hơn ta tìm sự chênh lệch giữa F(Mi) và F(Mi+1) F(Mi+1) – F(Mi)=fi+1 - fi Xét F(Mi)<0 ta có: fi+1 - fi = a(xi+1)2 + 2a(xi +1) – yi +a - 1 2 -[axi 2 + 2axi – yi +a - 1 2 ] <=> fi+1 = fi + a(2xi+3)
  • 9. Xét F(Mi)>0 ta có: fi+1 - fi = a(xi+1)2 + 2a(xi +1) –(yi +1)+a - 1 2 - [axi 2 + 2axi – yi +a - 1 2 ] <=> fi+1 = fi + a(2xi+3) -1 Tổng quát ta có: x1=0,y1=0 f1=a- 1 2 ; Nếu fi<0 thì xi+1=xi+1 , yi+1=yi fi+1=fi+a(2xi+3) Nếu fi>0 thì xi+1=xi+1 , yi+1=yi+1 fi+1=fi+a(2xi+3)-1 Trường hợp tăng nhanh: x 1 , 2a       thì  1 1 , 1 1 i i i i i x x x y y             Hàm kiểm tra bên trong, bên ngoài parabol F(x,y)=ax2 - y Gọi điểm MidPoint là M(xi+ 1 2 ,yi+1) đặt fi=F(Mi) ta có: F(M)=F(xi+ 1 2 ,yi+1)=a(xi+ 1 2 )2 – (yi+1) = axi 2 + axi – yi + 4 a -1
  • 10.  Nếu F(Mi)<0 ta có điểm Mi nằm bên trong parabol, căn cứ vào Hình, điểm nguyên tiếp theo ta chọn là điểm B(xi+1,yi+1) với xi+1 =xi+1  Nếu F(Mi)>0 ta có điểm Mi nằm bên ngoài parabol, căn cứ vào Hình, điểm nguyên tiếp theo ta chọn là điểm A(xi,yi+1) với xi+1 =xi Để tính F(M) nhanh hơn ta tìm sự chênh lệch giữa F(Mi) và F(Mi+1) F(Mi+1) – F(Mi)=fi+1 - fi Xét F(Mi)<0 ta có: fi+1 - fi = a(xi+1)2 + a(xi+1) – (yi +1)+ 4 a -1- [axi 2 + axi – yi + 4 a -1] <=> fi+1 = fi + 2a(xi+1) -1 Xét F(Mi)>0 ta có: fi+1 - fi = axi 2 +axi – (yi +1)+ 4 a -1- [axi 2 + axi – yi + 4 a -1] <=> fi+1 = fi -1 Tổng quát ta có: x1= 1 2a , y1= 1 4a f1= 4 a - 1 2 ; Nếu fi<0 thì xi+1=xi+1 , yi+1=yi+1 fi+1 = fi + 2a(xi+1) -1 Nếu fi>0 thì xi+1=xi , yi+1=yi+1 fi+1=fi-1 Bước 4: Thuật toán vẽ parabol trong vùng tăng chậm x=0,y=0 f=a- 1 2 ; putpixel(x,y); while x< 1 2a do if( f<0) then f=f+a(2x+3) ; else f=f+a(2x+3)-1 ; y=y+1; end if x=x+1; putpixel(x,y); putpixel(-x,y); end while
  • 11. Thuật toán vẽ parabol trong vùng tăng nhanh x= 1 2a , y= 1 4a f= 4 a - 1 2 ; n với (n> 1 2a )điều kiện dừng putpixel(x,y); while x< n do if( f<0) then f=f+2a(xi+1) -1 ; x=x+1 ; else f=f-1 ; end if y=y+1; putpixel(x,y); putpixel(-x,y); end while Trường hợp 2: y2 =ax <=> y=  ax Bước 1: Ta thấy parabol này đối xứng qua trục hoành nên ta chỉ cần vẽ 1 trong 2 nửa của parabol. Giả sử là:   ax 0, y x      Bước 2: Parabol y= ax với x  0,  có đạo hàm y’= 2 ax a Bảng khảo sát: y x y’ 1 0 + - 0 a/4 a/2 0 +
  • 12. Dựa vào bảng khảo sát ta có:  Nếu x 0, 4 a     thì  1 1 , 1 1 i i i i i x x x y y         Nếu x , 4 a      thì  1 1 , 1 1 i i i i i y y y x x        Bước 3: Trường hợp tăng nhanh: x 0, 4 a     thì  1 1 , 1 1 i i i i i x x x y y        Hàm kiểm tra bên trong, bên ngoài parabol F(x,y)=y- ax Gọi điểm MidPoint là M(xi+ 1 2 ,yi+1) đặt fi=F(Mi) ta có: F(M)=F(xi+ 1 2 ,yi+1)= (yi+1) - i 1 a(x + ) 2 = yi+1 - [ iax + 2 a ]  Nếu F(Mi)<0 ta có điểm Mi nằm bên trong parabol, căn cứ vào Hình, điểm nguyên tiếp theo ta chọn là điểm A(xi,yi+1) với xi+1 =xi
  • 13.  Nếu F(Mi)>0 ta có điểm Mi nằm bên ngoài parabol, căn cứ vào Hình, điểm nguyên tiếp theo ta chọn là điểm B(xi+1,yi+1) với xi+1 =xi+1 Để tính F(M) nhanh hơn ta tìm sự chênh lệch giữa F(Mi) và F(Mi+1) F(Mi+1) – F(Mi)=fi+1 - fi Xét F(Mi)<0 ta có: fi+1 - fi = (yi+1)+1 - [ iax + 2 a ] – (yi+1 - iax + 2 a ) =1 <=> fi+1 = fi + 1 Xét F(Mi)>0 ta có: fi+1 - fi = (yi+1)+1 - ia(x +1)+ 2 a – (yi+1 - iax + 2 a ) =1+ iax + 2 a - i 3 ax + 2 a <=> fi+1 = fi +1+[ iax + 2 a - i 3 ax + 2 a ] Tổng quát ta có: x1=0 , y1=0; f1= 1 –[ 2 a ]; Nếu fi<0 thì xi+1=xi , yi+1=yi+1 fi+1 = fi +1; Nếu fi>0 thì xi+1=xi +1, yi+1=yi+1 fi+1=fi +1+[ iax + 2 a - i 3 ax + 2 a ] Trường hợp tăng chậm: x , 4 a      thì  1 1 , 1 1 i i i i i y y y x x       
  • 14. Hàm kiểm tra bên trong, bên ngoài parabol F(x,y)=y- ax Gọi điểm MidPoint là M(xi+1,yi+ 1 2 ) đặt fi=F(Mi) ta có: F(M)=F(xi+1,yi+ 1 2 )= (yi+ 1 2 ) - ia(x +1) = yi+[ 1 2 - ia(x +1) ]  Nếu F(Mi)<0 ta có điểm Mi nằm bên trong parabol, căn cứ vào Hình, điểm nguyên tiếp theo ta chọn là điểm A(xi+1,yi+1) với yi+1 =yi+1  Nếu F(Mi)>0 ta có điểm Mi nằm bên ngoài parabol, căn cứ vào Hình, điểm nguyên tiếp theo ta chọn là điểm B(xi+1,yi) với yi+1 =yi Để tính F(M) nhanh hơn ta tìm sự chênh lệch giữa F(Mi) và F(Mi+1) F(Mi+1) – F(Mi)=fi+1 - fi Xét F(Mi)<0 ta có: fi+1 - fi = (yi+1)+ 1 2 - ia((x +1)+1) - [yi+ 1 2 - ia(x +1) ] = 1+ ia(x +1) - ia(x +2) <=> fi+1 = fi +1+[ ia(x +1) - ia(x +2) ] Xét F(Mi)>0 ta có: fi+1 - fi = yi+ 1 2 - ia((x +1)+1) - [yi+ 1 2 - ia(x +1) ] = ia(x +1) - ia(x +2) <=> fi+1 = fi +[ ia(x +1) - ia(x +2) ]
  • 15. Tổng quát ta có: x1= 4 a , y1= 2 a ; f1= [ 2 a + 21 1 4 2 2 a a  ]; Nếu fi<0 thì xi+1=xi+1 , yi+1=yi+1 fi+1 = fi +1+[ ia(x +1) - ia(x +2) ]; Nếu fi>0 thì xi+1=xi +1, yi+1=yi fi+1=fi +[ ia(x +1) - ia(x +2) ] Bước 4: Thuật toán vẽ parabol trong vùng tăng nhanh x=0 , y=0; f=1 –[ 2 a ]; putpixel(x,y); while x< 4 a do if( f<0) then f=f+1; else f=f+1+[ iax + 2 a - i 3 ax + 2 a ] ; x=x +1; end if y=y+1; putpixel(x,y); putpixel(x,-y); end while
  • 16. Thuật toán vẽ parabol trong vùng tăng chậm x= 4 a , y= 2 a ;round(x);round(y); f=[ 2 a + 21 1 4 2 2 a a  ]; round(f); n (với n> 4 a )điều kiện dừng ; putpixel(x,y); while x< n do if( f<0) then f=f+1+[ ia(x +1) - ia(x +2) ]; y=y+1; else f=f+[ iax + 2 a - i 3 ax + 2 a ] ; end if x=x +1; round(f); putpixel(x,y); putpixel(x,-y); end while Bài 3: Trình bày thuật toán vẽ hyperbol 2 2 2 2 1 x y a b   và 2 2 2 2 1 x y a b    Trường hợp 1: 2 2 2 2 1 x y a b   Bước 1: Ta có 2 2 2 2 1 x y a b   <=> y= 2 2b x a a   , suy ra hyperbol này đối xứng qua trục hoành. Mặt khác với x    , ,a a     thì 2 nửa phía trên trục hoành của hyperbol cũng đối xứng với nhau qua trục tung. Vì vậy ta chỉ cần vẽ một nhánh của hyperbol rồi lấy đối xứng.
  • 17. Giả sử ta chọn:   2 2 , b y x a a x a        Bước 2: y= 2 2b x a a  có đạo hàm y’= 2 2 bx a x a Bảng biến thiên: Phân chia đồ thị thành các vùng hệ số góc tăng nhanh và tăng chậm ta được:  Nếu 2 2 2 1 '( )f x a a x a b         thì   1 1 1 , 1 i i i i i y y x x x         Nếu 2 2 2 0 '( ) 1f x a x a b       thì   1 1 1 , 1 i i i i i x x y y y        Bước 3: x y y’ a 0 + + 1 0 + 2 2 2 b a b 2 2 2 a a b
  • 18. Trường hợp tăng nhanh 2 2 2 1 '( )f x a a x a b         thì   1 1 1 , 1 i i i i i y y x x x        Hàm kiểm tra bên trên, bên dưới hyperbol F(x,y)=b2 x2 - a2 y2 – a2 b2 Gọi điểm MidPoint là M(xi+ 1 2 ,yi+1) đặt fi=F(Mi) ta có: F(M)=F(xi+ 1 2 ,yi+1)= b2 (xi+ 1 2 )2 – a2 (yi+1)2 - a2 b2 = b2 xi 2 +b2 xi – a2 yi 2 – 2a2 yi+[ 2 4 b ]- a2 – a2 b2  Nếu F(Mi)<0 ta có điểm Mi nằm bên trên hyperbol, căn cứ vào Hình, điểm nguyên tiếp theo ta chọn là điểm B(xi+1,yi+1) với xi+1 =xi+1  Nếu F(Mi)>0 ta có điểm Mi nằm bên dưới hyperbol, căn cứ vào Hình, điểm nguyên tiếp theo ta chọn là điểm A(xi,yi+1) với xi+1 =xi Để tính F(M) nhanh hơn ta tìm sự chênh lệch giữa F(Mi) và F(Mi+1) F(Mi+1) – F(Mi)=fi+1 - fi
  • 19. Xét F(Mi)<0 ta có: fi+1 - fi = b2 (xi +1)2 +b2 (xi +1) – a2 (yi +1)2 – 2a2 (yi +1)+ 2 4 b - a2 – a2 b2 – [b2 xi 2 +b2 xi – a2 yi 2 – 2a2 yi+ 2 4 b - a2 – a2 b2 ] = 2b2 (xi+1) – a2 (2yi +3) <=> fi+1 = fi + 2b2 (xi+1) – a2 (2yi +3) Xét F(Mi)>0 ta có: fi+1 - fi = b2 xi 2 +b2 xi – a2 (yi +1)2 – 2a2 (yi +1)+ 2 4 b - a2 – a2 b2 – [b2 xi 2 +b2 xi – a2 yi 2 – 2a2 yi+ 2 4 b - a2 – a2 b2 ] = - a2 (2yi+3) <=> fi+1 = fi - a2 (2yi+3) Đặt H = 2b2 (xi+1) – a2 (2yi +3) K=- a2 (2yi+3) Tổng quát ta có: x1=a , y1=0; H=2b2 a – 3a2 +2b2 K= - 3a2 f1= b2 a +[ 2 4 b ] - a2 ; Nếu fi<0 thì xi+1=xi+1 , yi+1=yi+1 H=H +2b2 – 2a2 ; K=K – 2a2 fi+1 = fi +H; Nếu fi>0 thì xi+1=xi , yi+1=yi+1 H=H – 2a2 ; K=K – 2a2 ; fi+1=fi +K; Trường hợp tăng chậm: 2 2 2 0 '( ) 1f x a x a b       thì   1 1 1 , 1 i i i i i x x y y y       
  • 20. Hàm kiểm tra bên trên, bên dưới hyperbol F(x,y)=b2 x2 - a2 y2 – a2 b2 Gọi điểm MidPoint là M(xi+1,yi+ 1 2 ) đặt fi=F(Mi) ta có: F(M)=F(xi+1,yi+ 1 2 )= b2 (xi+1)2 – a2 (yi+ 1 2 )2 - a2 b2 = b2 xi 2 +b2 xi – a2 yi 2 – a2 yi - [ 2 4 a ]+b2 – a2 b2  Nếu F(Mi)<0 ta có điểm Mi nằm bên trên hyperbol, căn cứ vào Hình, điểm nguyên tiếp theo ta chọn là điểm B(xi+1,yi) với yi+1 =yi  Nếu F(Mi)>0 ta có điểm Mi nằm bên dưới hyperbol, căn cứ vào Hình, điểm nguyên tiếp theo ta chọn là điểm A(xi+1,yi+1) với yi+1 =yi+1 Để tính F(M) nhanh hơn ta tìm sự chênh lệch giữa F(Mi) và F(Mi+1) F(Mi+1) – F(Mi)=fi+1 - fi Xét F(Mi)<0 ta có: fi+1 - fi = b2 (xi +1)2 +b2 (xi +1) – a2 yi 2 – a2 yi - [ 2 4 a ]+b2 – a2 b2 – [b2 xi 2 +b2 xi – a2 yi 2 – a2 yi - [ 2 4 a ]+b2 – a2 b2 ] = 2b2 (xi+1) <=> fi+1 = fi + 2b2 (xi+1) Xét F(Mi)>0 ta có: fi+1 - fi = b2 (xi +1)2 +b2 (xi +1) – a2 (yi +1)2 – a2 (yi +1) - [ 2 4 a ]+b2 – a2 b2 – [b2 xi 2 +b2 xi – a2 yi 2 – a2 yi - [ 2 4 a ]+b2 – a2 b2 ] = 2b2 (xi+1) – 2a2 (yi +1) <=> fi+1 = fi +2b2 (xi+1) – 2a2 (yi +1)
  • 21. Đặt H = 2b2 (xi+1) K=2b2 (xi+1) – 2a2 (yi +1) Tổng quát ta có: x1= 2 2 2 a a b , y1= 2 2 2 b a b ; f1= b2 ( 2 2 2 a a b )2 +b2 2 2 2 a a b – a2 ( 2 2 2 b a b )2 – a2 ( 2 2 2 b a b ) - [ 2 4 a ]+b2 – a2 b2 = b2 –[ 2 4 a ] H=2b2 + 2 2 2 2 2a b a b , K=2b2 -2a2 Nếu fi<0 thì xi+1=xi+1 , yi+1=yi H=H+2b2 ; K=K+2b2 ; fi+1 = fi + H; Nếu fi>0 thì xi+1=xi +1, yi+1=yi+1 H=H+2b2 ; K=K+2b2 – 2a2 ; fi+1=fi +K; Bước 4: Thuật toán vẽ hyperbol trong vùng tăng nhanh x=a , y=0; H=2b2 a – 3a2 +2b2 K= - 3a2 f= b2 a +[ 2 4 b ] - a2 ; putpixel(x,y); while x< 2 2 2 a a b do if( f<0) then H=H +2b2 – 2a2 ; K=K – 2a2 f = f +H; x=x+1;
  • 22. else H=H – 2a2 ; K=K – 2a2 ; fi+1=fi +K; end if y=y+1; putpixel(x,y); putpixel(x,-y); putpixel(-x,y); putpixel(-x,-y); end while Thuật toán vẽ hyperbol trong vùng tăng chậm x= 2 2 2 a a b , y= 2 2 2 b a b ; f= b2 – 2 4 a ; H=2b2 + 2 2 2 2 2a b a b , K=2b2 -2a2 round(x); round(y); round(H); round(f); n( với n> 2 2 2 a a b ) điều kiện dừng putpixel(x,y); while x< n do if( f<0) then H=H+2b2 ; K=K+2b2 ; f = f + H; else H=H+2b2 ; K=K+2b2 – 2a2 ; f=f +K; y=y+1; end if x=x+1; putpixel(x,y); putpixel(x,-y); putpixel(-x,y); putpixel(-x,-y); end while
  • 23. Trường hợp 2: 2 2 2 2 1 x y a b    Bước 1: Ta có 2 2 2 2 1 x y a b    <=> y= 2 2b x a a   , suy ra hyperbol này đối xứng qua trục hoành. Mặt khác với x    0, ,0    của hyperbol cũng đối xứng với nhau qua trục tung. Vì vậy ta chỉ cần vẽ một nhánh của hyperbol rồi lấy đối xứng. Giả sử ta chọn:   2 2 0, b y x a a x        Bước 2: y= 2 2b x a a  có đạo hàm y’= 2 2 bx a x a Phân chia đồ thị thành các vùng hệ số góc tăng nhanh và tăng chậm ta được:  Nếu 2 2 2 0 '( ) 1 0 f x a x b a        thì   1 1 1 , 1 i i i i i x x y y y         Nếu 2 2 2 1 '( )f x a x b a      thì   1 1 1 , 1 i i i i i y y x x x        Bước 3: Trường hợp tăng chậm: 2 2 2 0 '( ) 1 0 f x a x b a        thì   1 1 1 , 1 i i i i i x x y y y       
  • 24. Hàm kiểm tra bên trên, bên dưới hyperbol F(x,y)=b2 x2 - a2 y2 + a2 b2 Gọi điểm MidPoint là M(xi+1,yi+ 1 2 ) đặt fi=F(Mi) ta có: F(M)=F(xi+1,yi+ 1 2 )= b2 (xi+1)2 – a2 (yi+ 1 2 )2 + a2 b2 = b2 xi 2 +b2 xi – a2 yi 2 – a2 yi - [ 2 4 a ]+b2 +a2 b2  Nếu F(Mi)<0 ta có điểm Mi nằm bên trên hyperbol, căn cứ vào Hình, điểm nguyên tiếp theo ta chọn là điểm A(xi+1,yi) với yi+1 =yi  Nếu F(Mi)>0 ta có điểm Mi nằm bên dưới hyperbol, căn cứ vào Hình, điểm nguyên tiếp theo ta chọn là điểm B(xi+1,yi+1) với yi+1 =yi+1 Để tính F(M) nhanh hơn ta tìm sự chênh lệch giữa F(Mi) và F(Mi+1) F(Mi+1) – F(Mi)=fi+1 - fi Xét F(Mi)<0 ta có: fi+1 - fi = b2 (xi +1)2 +b2 (xi +1) – a2 yi 2 – a2 yi - [ 2 4 a ]+b2 + a2 b2 – [b2 xi 2 +b2 xi – a2 yi 2 – a2 yi - [ 2 4 a ]+b2 + a2 b2 ] = 2b2 (xi+1) <=> fi+1 = fi + 2b2 (xi+1)
  • 25. Xét F(Mi)>0 ta có: fi+1 - fi = b2 (xi +1)2 +b2 (xi +1) – a2 (yi +1)2 – a2 (yi +1) - [ 2 4 a ]+b2 + a2 b2 – [b2 xi 2 +b2 xi – a2 yi 2 – a2 yi - [ 2 4 a ]+b2 + a2 b2 ] = 2b2 (xi+1) – 2a2 (yi +1) <=> fi+1 = fi +2b2 (xi+1) – 2a2 (yi +1) Đặt H = 2b2 (xi+1) K=2b2 (xi+1) – 2a2 (yi +1) Tổng quát ta có: x1=0, y1=b; H= 2b2 ,K= 2b2 – 2a2 (b+1); f1=b2 - 2 4 a -a2 b ; Nếu fi<0 thì xi+1=xi+1 , yi+1=yi H=H+2b2 ; K=K+2b2 ; fi+1 = fi + H; Nếu fi>0 thì xi+1=xi +1, yi+1=yi+1 H=H+2b2 ; K=K+2b2 – 2a2 ; fi+1=fi +K; Trường hợp tăng nhanh 2 2 2 1 '( )f x a x b a      thì   1 1 1 , 1 i i i i i y y x x x       
  • 26. Hàm kiểm tra bên trên, bên dưới hyperbol F(x,y)=b2 x2 - a2 y2 + a2 b2 Gọi điểm MidPoint là M(xi+ 1 2 ,yi+1) đặt fi=F(Mi) ta có: F(M)=F(xi+ 1 2 ,yi+1)= b2 (xi+ 1 2 )2 – a2 (yi+1)2 + a2 b2 = b2 xi 2 +b2 xi – a2 yi 2 – 2a2 yi+[ 2 4 b ]- a2 + a2 b2  Nếu F(Mi)<0 ta có điểm Mi nằm bên trên hyperbol, căn cứ vào Hình, điểm nguyên tiếp theo ta chọn là điểm B(xi+1,yi+1) với xi+1 =xi+1  Nếu F(Mi)>0 ta có điểm Mi nằm bên dưới hyperbol, căn cứ vào Hình, điểm nguyên tiếp theo ta chọn là điểm A(xi,yi+1) với xi+1 =xi Để tính F(M) nhanh hơn ta tìm sự chênh lệch giữa F(Mi) và F(Mi+1) F(Mi+1) – F(Mi)=fi+1 - fi Xét F(Mi)<0 ta có: fi+1 - fi = b2 (xi +1)2 +b2 (xi +1) – a2 (yi +1)2 – 2a2 (yi +1)+ 2 4 b - a2 + a2 b2 – [b2 xi 2 +b2 xi – a2 yi 2 – 2a2 yi+ 2 4 b - a2 + a2 b2 ] = 2b2 (xi+1) – a2 (2yi +3) <=> fi+1 = fi + 2b2 (xi+1) – a2 (2yi +3)
  • 27. Xét F(Mi)>0 ta có: fi+1 - fi = b2 xi 2 +b2 xi – a2 (yi +1)2 – 2a2 (yi +1)+ 2 4 b - a2 + a2 b2 – [b2 xi 2 +b2 xi – a2 yi 2 – 2a2 yi+ 2 4 b - a2 + a2 b2 ] = - a2 (2yi+3) <=> fi+1 = fi - a2 (2yi+3) Đặt H = 2b2 (xi+1) – a2 (2yi +3) K=- a2 (2yi+3) Tổng quát ta có: x1= 2 2 2 a b a , y1= 2 2 2 b b a ; H= – 3a2 +2b2 K= - 3a2 - 2 2 2 2 2a b b a f1= -[ 2 2 2 2 a b b a ] +[ 2 4 b ] - a2 ; Nếu fi<0 thì xi+1=xi+1 , yi+1=yi+1 H=H +2b2 – 2a2 ; K=K – 2a2 fi+1 = fi +H; Nếu fi>0 thì xi+1=xi , yi+1=yi+1 H=H – 2a2 ; K=K – 2a2 ; fi+1=fi +K; Bước 4: Thuật toán vẽ hyperbol trong vùng tăng chậm x=0, y=b; H= 2b2 ,K= 2b2 – 2a2 (b+1); f=b2 –[ 2 4 a ]-a2 b; putpixel(x,y); while x< 2 2 2 a b a do if( f<0) then H=H+2b2 ; K=K+2b2 ; f = f + H;
  • 28. else H=H+2b2 ; K=K+2b2 – 2a2 ; f=f +K; y=y+1; end if x=x+1; putpixel(x,y); putpixel(x,-y); putpixel(-x,y); putpixel(-x,-y); end while Thuật toán vẽ hyperbol trong vùng tăng nhanh x= 2 2 2 a b a , y= 2 2 2 b b a ; H= – 3a2 +2b2 K= - 3a2 - 2 2 2 2 2a b b a f1= -[ 2 2 2 2 a b b a ] +[ 2 4 b ] - a2 ; round(x); round(y); round(K); n( với n> 2 2 2 a b a ) điều kiện dừng putpixel(x,y); while x<n do if( f<0) then H=H +2b2 – 2a2 ; K=K – 2a2 f= f +H; x=x+1; else H=H – 2a2 ; K=K – 2a2 ; f=f+K; end if y=y+1;
  • 29. putpixel(x,y); putpixel(x,-y); putpixel(-x,y); putpixel(-x,-y); end while Bài 4: Các điểm nguyên vẽ phát sinh khi sử dụng thuật toán DDA, Bresenham cho các đoạn thẳng sau:  A1(5,10), B1(15,17) Ta có m = y x   = 7 10 <1 nên đây là đoạn thẳng tăng chậm => Các điểm nguyên vẽ phát sinh khi sử dụng thuật toán DDA: i xi y=y+m yi=round(y) 1 5 10 10 2 6 107 10 11 3 7 114 10 11 4 8 121 10 12 5 9 128 10 13 6 10 135 10 14 7 11 142 10 14 8 12 149 10 15 9 13 156 10 16 10 14 163 10 16 11 15 17 17
  • 30. Các điểm nguyên vẽ phát sinh khi sử dụng thuật toán Bresenham: i pi xi yi 1 4 5 10 2 -2 6 11 3 12 7 11 4 6 8 12 5 0 9 13 6 -6 10 14 7 8 11 14 8 2 12 15 9 -4 13 16 10 10 14 16 11 15 17  A2(-2,3) B2(-12,7) Ta có m = y x   = 4 10  <1 nên đây là đoạn thẳng giảm chậm => Các điểm nguyên vẽ phát sinh khi sử dụng thuật toán DDA: i xi y=y+m yi=round(y) 1 -12 7 7 2 -11 66 10 7 3 -10 62 10 6 4 -9 58 10 6 5 -8 54 10 5 6 -7 50 10 5 7 -6 46 10 5 8 -5 42 10 4 9 -4 38 10 4 10 -3 34 10 3 11 -2 3 3
  • 31.  A3(0,10), B3(15,10) Ta có m=0, đây là đường thẳng nằm ngang nhưng ta có thể áp dụng trường hợp của đường thẳng tăng chậm. Các điểm phát sinh khi sử dụng thuật toán DDA: i xi y=y+m yi=round(y) 1 0 10 10 2 1 10 10 3 2 10 10 4 3 10 10 5 4 10 10 6 5 10 10 7 6 10 10 8 7 10 10 9 8 10 10 10 9 10 10 11 10 10 10 12 11 10 10 13 12 10 10 14 13 10 10 15 14 10 10 16 15 10 10  A4(5,-1), B4(5,-11) Các điểm phát sinh khi sử dụng thuật toán DDA: i xi yi 1 5 -1 2 5 -2 3 5 -3 4 5 -4 5 5 -5 6 5 -6 7 5 -7 8 5 -8 9 5 -9 10 5 -10 11 5 -11