GV : V TT THNG NHểM 25
Trờngđạihọcđiệnlựchànội
Báo cáo kỹ thuật đồ họa máy tính
Trình bày thuật toán vẽ Ellipse midpoint,
ứng dụng xây dựng và cài đặt
ch ơng trình vẽ ellipse
- 2012-
Giáo viên h ớng dẫn: Vũ Tất Thắng
Nhóm thực hiện : Nhóm 25
Lớp : D6LT CNTT
GV : VŨ TẤT THẮNG NHÓM 25
Mục lục
Mục lục 2
A. LỜI MỞ ĐẦU 3
B. PHẦN NỘI DUNG 4
1. Giải thuật Midpoint vẽ elip 4
2. Lưu đồ 6
3. Ứng dụng thuật giải midpoint vào xây dựng chương trình vẽ ellipse 7
4. Kết quả chạy chương trình 10
GV : VŨ TẤT THẮNG NHÓM 25
A. LỜI MỞ ĐẦU
!"# $ %& ' ()
* +, " -. */0.12
-2!'00-!31456%&-
2. !' 7 & 8) 8) *
/)!95:;-<=4-
“Kỹ thuật đồ
họa”!'7
2 )->
7"9!,
?5>"9@?.0A*!"#4
"9B!.5,C"D%,-C
,!()*5>!"#)-*1B=E"C5
"C%FG-VŨ TẤT THẮNG, 0A!'!"#/H0
8)AC5:*I)4!-28)J1
G-=K"*15:J4."C18)-/
JG-!'>)
L)*=)M
N
/5$>0OCG
P.=Q.>$)1 0A5):9
8).0A!'!(RS=J-)4TA5A
%.$%&HM-%!U"D=TA5AVWU%O
!':X5%,/(*/$9> J
/0A5TQ ()/)5 !Y.>0A
4!"#5 Z[G-J,
CHÚNG EM XIN CHÂN THÀNH CÁM ƠN!
GV : VŨ TẤT THẮNG NHÓM 25
B. PHẦN NỘI DUNG
1. Giải thuật Midpoint vẽ elip
M-"DTA!,!"#*/8)1:(5:\2!
$,0
E !U !
A >
0]*1
5 !"9
J) %^ A
G"
$ S /
, "D =
A M
: , ! J
&C J
&PJ%"C
%,5)_
`a/)bH c;J>A
dbH ceJ
f
H
f
g
f
-
f
h
f
J
f
ea/)bH c;>A
ia/)bH c;J>A
*Ý tưởng của giải thuật:
AG,!jD!%:/)-/CA
J;klb\D%AJ;lcS,O$HJ/>D
,O$-J/>DHm'-C,!%:
!"9!YJ7$%Hn%-edHnd-o! dHd-
!,>GdbH cAHA-_dHefJ
f
HQd-ef
f
-S,
pG!"#1)4W%"D"T!"9Q!'
=J-_
•SGl_q156!'T!"#!bH
c=H!Y!
/A>Ar6>J"CglSULs/G
8)-/!Y$6>!"#2AYdbH cA,
!t)!SL_
%
edbH
gl.-
huceJ
f
bH
glc
f
g
f
b-
huc
f
h
f
J
f
bJ/Gc
g/)%
va)!t;!"9Q⇒!!"#L
x
T
S
O
y
x
i
x
i+1
y
i -1
y
i
U
V
Q
x
j
x
j+1
y
j -1
y
j
Part 1
Part 2
b
b
(x/a)
2
+ (y/b)
2
= 1
GV : VŨ TẤT THẮNG NHÓM 25
g/)%
`a)!t;!"9Q⇒!!"#S
s/GJ"C/A_
%
gl
edbH
gl
gl.-
gl
huceJ
f
bH
gl
glc
f
g
f
b-
gl
huc
f
h
f
J
f
wG>J/GJ"C_
%
gl
h%
eJ
f
xbH
gl
glc
f
hbH
glc
f
yg
f
xb-
gl
huc
f
hb-
huc
f
y
<=H
gl
eH
gl> 0)>"5)_
%
gl
h%
efJ
f
H
gl
gJ
f
g
f
xb-
gl
huc
f
hb-
huc
f
y
g/)!!"#Sb%
`ac=-
gl
e-
⇒%
gl
e%
gfJ
f
H
gl
gJ
f
b= d
i
+ fx + b
2
c
g/)!!"#Lb%
vac=-
gl
e-
gl
%
gl
e%
gfJ
f
H
gl
gJ
f
hf
f
-
gl
b= d
i
+ fx + b
2
– fy)
qY*7,J/G_
⇒%
l
edba.JceJ
f
g
f
bJhuc
f
h
f
J
f
eJ
f
z
f
Jg
f
n{
•SGf_S2"D"Gloq1561H
!Y,!bH
|gl
|gl
cJ"C|glr6>}U<q~
)!}<~! ~;-;A5T8)-/!Y
!<-!}s/G!"#2J;Y
dbH c,!~"5)_
A
|
edbH
|
gu.-
|
hlceJ
f
bH
|
guc
f
g
f
b-
|
hlc
f
h
f
J
f
bs/Gc
g/)A
|
va!!"#}
g/)A
|
`a!!"#<
qYJ/GJ"C/A_
A
|gl
edbH
|gl
gu.-
|gl
hlceJ
f
bH
|gl
guc
f
g
f
b-
|gl
hlc
f
h
f
J
f
YJ/GJ"C>/_b0Z
-
|gl
e-
hlc
A
|gl
hA
|
eJ
f
xbH
|gl
guc
f
hbH
|
guc
f
yg
f
xb-
|gl
hlc
f
hb-
|
hlc
f
y
eJ
f
xbH
|gl
guc
f
hbH
|
guc
f
yhf
f
-
|gl
g
f
g/)!!"#}$A
|
va=H
|gl
eH
|
⇒A
|gl
eA
|
hf
f
-
|gl
g
f
b= e
j
– fy + a
2
c
g/)!!"#<$A
|
`a=H
|gl
eH
|
gl
⇒A
|gl
eA
|
gfJ
f
H
|gl
hf
f
-
|gl
g
f
b= e
j
+ fx – fy + a
2
c
qY*7,J/GGf&)Y2
):OGlb156bH
*
*
c~! _
BEGIN
p=p+8B
2
x+12B
2
;
(A
2
+B
2
)x
2
≤ A
4
p = 4B
2
– 4A
2
B + A
2
x = 0; y = B;
Put4pixel(x,y,color);
p < 0
p=p+8B
2
x – 8A
2
y+8A
2
+12B
2
;
y=y – 1;
x = x + 1;
Put4pixel(x,y,color);
p=p+8B
2
x+8B
2
– 8A
2
y + 12A
2
;
x = x + 1;
y ≥ 0
p < 0
p=p–8A
2
x + 12A
2
;
y = y –1;
Put4pixel(x,y,color);
END
N
o
Yes
Yes Yes
Yes
N
o
N
o
N
o
LƯU ĐỒ ELLIP
GV : VŨ TẤT THẮNG NHÓM 25
A
l
edbH
*
gu.-
*
hlceJ
f
bH
*
gucg
f
b-
*
hlc
f
h
f
J
f
Chú ý: J/**/0Gl)-8)Gf0
A%•!%:/)-/CAA!,>GdH.d-"
!' "!'=)_
H
gl
eH
glUH
gl
eH
-
gl
e-
U-
gl
e-
hl5)-!,
>G5T!"#44>fJ
f
dHUf
f
d-
2. Lưu đồ
GV : VŨ TẤT THẮNG NHÓM 25
3. Ứng dụng thuật giải midpoint vào xây dựng chương trình vẽ
ellipse
#include <graphics.h>
#include <conio.h>
#include <dos.h>
#dene ROUND(a) ((long)(a+0.5))
void plot(int xc, int yc, int x, int y, int color){
putpixel(xc+x, yc+y, color);
putpixel(xc-x, yc+y, color);
putpixel(xc+x, yc-y, color);
putpixel(xc-x, yc-y, color);
}
void Mid_ellipse(int xc, int yc, int a, int b, int color){
long x, y, fx, fy, a2, b2, p;
x = 0;
y = b;
a2 = a * a; //a2
b2 = b * b; // b2
fx = 0;
fy = 2 * a2 * y; // 2a2y
plot(xc, yc, x,y, color);
p = ROUND(b2-(a2*b)+(0.25*a)); // p=b2 - a2b + a2/4
GV : VŨ TẤT THẮNG NHÓM 25
while (fx < fy){
x++;
fx += 2*b2; //2b2
delay(50);
if (p<0)
p += b2*(2*x +3); // p=p + b2 (2x +3)
else{
y ;
p+= b2*(2*x +3) + a2*(-2*y +2); // p = p + b2(2x +3) + a2 (-2y
+2)
fy -= 2*a2; // 2a2
}
plot(xc, yc, x, y, color);
}
p = ROUND(b2*(x+0.5)*(x+0.5) + a2*(y-1)*(y-1) -
a2*b2);//b2(x+1/2)2+a2(y-1)2 - a2b2
while (y>0)
{
y ;
fy -= 2*a2; // 2a2
delay(50);
if (p>=0)
GV : VŨ TẤT THẮNG NHÓM 25
p+=a2*(3 - 2*y); //p =p + a2(3-2y);
else{
x++;
fx += 2*b2; // 2b2
p += b2*(2*x+2) + a2*(-2*y +3); //p=p + b2(2x +2) +a2(-2y +3)
}
plot(xc, yc, x, y, color);
}
}
void main(){
int gr_drive = DETECT, gr_mode;
initgraph(&gr_drive, &gr_mode, "D:\\TC\\BGI");
Mid_ellipse(getmaxx() / 2, getmaxy() / 2, 150, 80, 4);
getch();
closegraph();
}
GV : VŨ TẤT THẮNG NHÓM 25
4. Kết quả chạy chương trình
Hình ảnh 1:
Hình ảnh 2:
GV : VŨ TẤT THẮNG NHÓM 25
Hình ảnh 3: