Uploaded by VERAIN SARDANA

CG Lab File

advertisement
Smar
t
Boy
COMPUTERSCI
ENCEANDENGI
NEERI
NG
DEPARTMENT
UCS505COMPUTERGRAPHI
CS
LABASSI
GNMENTS
SUBMI
TTEDTO:Mr
.X
SUBMI
TTEDBY:Name:
Rol
lNumber
:
Bat
ch:COE
6thJune2021
THAPARI
NSTI
TUTEOFENGI
NEERI
NGANDTECHNOLOGY,
PATI
ALA,
PUNJAB
Smar
t
Boy
Tabl
eofCont
ent
s
S.No.
Pr
ogr
am Name
Page
number
1
Wr
i
t
eapr
ogr
am t
o:
● Cr
eat
eempt
ywi
ndow(
Bl
ack,
Whi
t
eanddi
f
f
er
ent
Col
or
s)
● Dr
awapoi
ntofwi
dt
h10pi
xel
● Dr
awagr
eencol
orl
i
nef
r
om (
10,
10)t
o(
50,
50)
● Dr
awat
r
i
angl
eonbl
ackbackgr
ound
● Dr
awar
ect
angl
eonbl
ackbackgr
ound
4-14
2
Wr
i
t
eapr
ogr
am t
odr
awal
i
neusi
ng:
● DDAal
gor
i
t
hm
● Br
esenham’
sl
i
neal
gor
i
t
hm
15-18
3
Wr
i
t
eapr
ogr
am t
o:
● Dr
awaci
r
cl
eusi
ngMi
dpoi
ntci
r
cl
eal
gor
i
t
hm
● Dr
awanel
l
i
pseusi
ngMi
dpoi
ntel
l
i
pseal
gor
i
t
hm
19-23
4
5
6
Wr
i
t
eapr
ogr
am t
of
i
l
l
apol
y
gonusi
ngscanl
i
nef
i
l
l
al
gor
i
t
hm
Wr
i
t
eapr
ogr
am t
of
i
l
l
apol
y
gonusi
ngboundar
yf
i
l
l
and
f
l
oodf
i
l
l
al
gor
i
t
hm (
4connect
edand8connect
ed)f
or
v
ar
i
ousconcav
eandconv
expol
y
gons.
Wr
i
t
eapr
ogr
am f
ordr
awi
ngt
hef
ol
l
owi
ngsi
mpl
et
wo
di
mensi
onal
obj
ect
susi
ngcer
t
ai
ngr
aphi
cf
unct
i
ons
av
ai
l
abl
ef
ordr
awi
ngl
i
nes,
r
ect
angl
es,
pol
y
gons,
el
l
i
pses&
ci
r
cl
eswhi
chgener
at
espi
xel
act
i
v
at
i
onl
i
st
.
(
i
) House
(
i
i
)Car
(
i
i
i
)Fi
sh
(
i
v
)Man
24-26
27-50
51-61
7
Wr
i
t
eapr
ogr
am t
oper
f
or
m basi
c2Dt
r
ansf
or
mat
i
on
(
t
r
ansl
at
i
on,
r
ot
at
i
onandscal
i
ng)aboutor
i
gi
nandabouta
f
i
xedpoi
ntwi
t
houtusi
ngdi
r
ectOpenGl
f
unct
i
onsf
ort
he
t
r
ansf
or
mat
i
ons.
62-69
8
Wr
i
t
eapr
ogr
am t
oper
f
or
m:
(
i
)Ref
l
ect
i
onaboutxaxi
s,
y
axi
sandal
i
ney=x+2
(
i
i
)Shearaboutxaxi
sandy
axi
s
70-76
9
Wr
i
t
eapr
ogr
am f
orper
f
or
mi
ngt
hebasi
ct
r
ansf
or
mat
i
ons
suchast
r
ansl
at
i
on,
Scal
i
ng,
Rot
at
i
onf
oragi
v
en3Dobj
ect
.
77-80
2
Smar
t
Boy
10
Wr
i
t
eapr
ogr
am t
ocl
i
pal
i
neusi
ngLi
angBar
skyAl
gor
i
t
hm
andCohenSut
her
l
and
81-86
11
Wr
i
t
eapr
ogr
am t
ocl
i
pal
i
neusi
ngNi
chol
l
LeeNi
chol
l
Li
ne
cl
i
ppi
ng
87-89
12
Wr
i
t
eapr
ogr
am t
ocl
i
papol
y
gonusi
ngSut
her
l
and
Hodgemanand
Wei
l
erAt
her
t
onal
gor
i
t
hm
90-100
13
Wr
i
t
epr
ogr
amsf
ordesi
gni
ngf
ol
l
owi
ngsi
mpl
eani
mat
i
ons
usi
ngt
r
ansf
or
mat
i
ons.
(
i
) Ci
r
cl
emov
i
ngf
r
om l
ef
tt
or
i
ghtandv
i
cev
er
sa
(
i
i
)Wi
ndmi
l
l
r
ot
at
i
on
(
i
i
i
)Si
mpl
eani
mat
i
onoff
oot
bal
l
goal
101108
3
Smar
t
Boy
Q1:
a)Wr
i
t
eapr
ogr
am t
oCr
eat
eempt
ywi
ndow(
Bl
ack,
Whi
t
eanddi
f
f
er
entCol
or
s)
#i
ncl
ude<GL/
gl
ut
.
h>
v
oi
ddi
spl
ay
(
)
{gl
Cl
ear
(
GL_
COLOR_
BUFFER_
BI
T)
;
gl
Col
or
3f
(
1.
0,
0.
0,
0.
0)
;
gl
Fl
ush(
)
;
}
v
oi
dmy
i
ni
t
(
)
{gl
Cl
ear
Col
or
(
0.
0,
0.
0,
0.
0,
0.
0)
;
}
i
ntmai
n(
i
ntar
gc,
char
*
*ar
gv
)
{
gl
ut
I
ni
t
(
&ar
gc,
ar
gv
)
;
gl
ut
I
ni
t
Di
spl
ay
Mode(
GLUT_
SI
NGLE|
GLUT_
RGB)
;
gl
ut
I
ni
t
Wi
ndowSi
ze(
500,
500)
;
gl
ut
I
ni
t
Wi
ndowPosi
t
i
on(
0,
0)
;
gl
ut
Cr
eat
eWi
ndow(
"
Empt
yBl
ackWi
ndow"
)
;
gl
ut
Di
spl
ay
Func(
di
spl
ay
)
;
my
i
ni
t
(
)
;
gl
ut
Mai
nLoop(
)
;
r
et
ur
n0;
}
4
Smar
t
Boy
#i
ncl
ude<GL/
gl
ut
.
h>
v
oi
ddi
spl
ay
(
)
{gl
Cl
ear
(
GL_
COLOR_
BUFFER_
BI
T)
;
gl
Col
or
3f
(
1.
0,
0.
0,
0.
0)
;
gl
Fl
ush(
)
;
}
v
oi
dmy
i
ni
t
(
)
{gl
Cl
ear
Col
or
(
1.
0,
1.
0,
1.
0,
1.
0)
;
}
i
ntmai
n(
i
ntar
gc,
char
*
*ar
gv
)
{
gl
ut
I
ni
t
(
&ar
gc,
ar
gv
)
;
gl
ut
I
ni
t
Di
spl
ay
Mode(
GLUT_
SI
NGLE|
GLUT_
RGB)
;
gl
ut
I
ni
t
Wi
ndowSi
ze(
500,
500)
;
gl
ut
I
ni
t
Wi
ndowPosi
t
i
on(
0,
0)
;
gl
ut
Cr
eat
eWi
ndow(
"
Empt
y
Whi
t
e
Wi
ndow"
)
;
gl
ut
Di
spl
ay
Func(
di
spl
ay
)
;
my
i
ni
t
(
)
;
gl
ut
Mai
nLoop(
)
;
r
et
ur
n0;
}
5
Smar
t
Boy
#i
ncl
ude<GL/
gl
ut
.
h>
v
oi
ddi
spl
ay
(
)
{gl
Cl
ear
(
GL_
COLOR_
BUFFER_
BI
T)
;
gl
Col
or
3f
(
1.
0,
0.
0,
0.
0)
;
gl
Fl
ush(
)
;
}
v
oi
dmy
i
ni
t
(
)
{gl
Cl
ear
Col
or
(
1.
0,
1.
0,
0.
0,
0.
0)
;
}
i
ntmai
n(
i
ntar
gc,
char
*
*ar
gv
)
{
gl
ut
I
ni
t
(
&ar
gc,
ar
gv
)
;
gl
ut
I
ni
t
Di
spl
ay
Mode(
GLUT_
SI
NGLE|
GLUT_
RGB)
;
gl
ut
I
ni
t
Wi
ndowSi
ze(
500,
500)
;
gl
ut
I
ni
t
Wi
ndowPosi
t
i
on(
0,
0)
;
gl
ut
Cr
eat
eWi
ndow(
"
Empt
y
Yel
l
ow
Wi
ndow"
)
;
gl
ut
Di
spl
ay
Func(
di
spl
ay
)
;
my
i
ni
t
(
)
;
gl
ut
Mai
nLoop(
)
;
r
et
ur
n0;
}
b)Wr
i
t
eapr
ogr
am t
oDr
awapoi
ntofwi
dt
h10pi
xel
6
Smar
t
Boy
#i
ncl
ude<GL/
gl
ut
.
h>
v
oi
ddi
spl
ay
(
)
{gl
Cl
ear
(
GL_
COLOR_
BUFFER_
BI
T)
;
gl
Col
or
3f
(
0.
0,
0.
0,
1.
0)
;
gl
Begi
n(
GL_
POI
NTS)
;
gl
Ver
t
ex2f
(
200.
0,
100.
0)
;
gl
End(
)
;
gl
Fl
ush(
)
;
}
v
oi
dmy
i
ni
t
(
)
{gl
Cl
ear
Col
or
(
1.
0,
1.
0,
1.
0,
1.
0)
;
gl
Col
or
3f
(
1.
0,
0.
0,
0.
0)
;
gl
Poi
nt
Si
ze(
10.
0)
;
gl
Mat
r
i
xMode(
GL_
PROJECTI
ON)
;
gl
LoadI
dent
i
t
y
(
)
;
gl
uOr
t
ho2D(
0.
0,
499.
0,
0.
0,
499.
0)
;
}
i
ntmai
n(
i
ntar
gc,
char
*
*ar
gv
)
{
gl
ut
I
ni
t
(
&ar
gc,
ar
gv
)
;
gl
ut
I
ni
t
Di
spl
ay
Mode(
GLUT_
SI
NGLE|
GLUT_
RGB)
;
gl
ut
I
ni
t
Wi
ndowSi
ze(
500,
500)
;
gl
ut
I
ni
t
Wi
ndowPosi
t
i
on(
0,
0)
;
gl
ut
Cr
eat
eWi
ndow(
"
Poi
ntofwi
dt
h10px"
)
;
gl
ut
Di
spl
ay
Func(
di
spl
ay
)
;
my
i
ni
t
(
)
;
gl
ut
Mai
nLoop(
)
;
r
et
ur
n0;
}
7
Smar
t
Boy
c)Wr
i
t
eapr
ogr
am t
oDr
awagr
eencol
orl
i
nef
r
om (
10,
10)t
o(
50,
50)
#i
ncl
ude<GL/
gl
ut
.
h>
v
oi
di
ni
t
(
)
{gl
Cl
ear
Col
or
(
1.
0,
1.
0,
1.
0,
0.
0)
;
gl
Mat
r
i
xMode(
GL_
PROJECTI
ON)
;
gl
LoadI
dent
i
t
y
(
)
;
gl
uOr
t
ho2D(
0.
0,
300.
0,
0.
0,
300.
0)
;
}
v
oi
ddr
awLi
nes(
)
{gl
Col
or
3f
(
0.
0,
1.
0,
0.
0)
;
gl
Cl
ear
(
GL_
COLOR_
BUFFER_
BI
T)
;
gl
Poi
nt
Si
ze(
2.
0)
;
gl
Begi
n(
GL_
LI
NES)
;
gl
Ver
t
ex2d(
10,
10)
;
gl
Ver
t
ex2d(
50,
50)
;
gl
End(
)
;
gl
Fl
ush(
)
;
}
i
ntmai
n(
i
ntar
gc,
char
*
*ar
gv
)
{
gl
ut
I
ni
t
(
&ar
gc,
ar
gv
)
;
gl
ut
I
ni
t
Wi
ndowPosi
t
i
on(
10,
10)
;
gl
ut
I
ni
t
Wi
ndowSi
ze(
500,
500)
;
gl
ut
I
ni
t
Di
spl
ay
Mode(
GLUT_
SI
NGLE|
GLUT_
RGB)
;
gl
ut
Cr
eat
eWi
ndow(
"
Gr
eenl
i
nef
r
om (
10,
10)t
o(
50,
50)
"
)
;
i
ni
t
(
)
;
gl
ut
Di
spl
ay
Func(
dr
awLi
nes)
;
gl
ut
Mai
nLoop(
)
;
}
8
Smar
t
Boy
9
Smar
t
Boy
d)Wr
i
t
eapr
ogr
am t
oDr
awat
r
i
angl
eonbl
ackbackgr
ound
#i
ncl
ude<GL/
gl
ut
.
h>
v
oi
di
ni
t
(
)
{gl
Cl
ear
Col
or
(
0.
0,
0.
0,
0.
0,
0.
0)
;
gl
Mat
r
i
xMode(
GL_
PROJECTI
ON)
;
gl
LoadI
dent
i
t
y
(
)
;
gl
uOr
t
ho2D(
0.
0,
499.
0,
0.
0,
499.
0)
;
}
v
oi
ddr
awLi
nes(
)
{gl
Col
or
3f
(
1.
0,
1.
0,
1.
0)
;
gl
Cl
ear
(
GL_
COLOR_
BUFFER_
BI
T)
;
gl
Poi
nt
Si
ze(
2.
0)
;
gl
Begi
n(
GL_
TRI
ANGLES)
;
gl
Ver
t
ex2d(
70,
70)
;
gl
Ver
t
ex2d(
100,
150)
;
gl
Ver
t
ex2d(
200,
40)
;
gl
End(
)
;
gl
Fl
ush(
)
;
}
i
ntmai
n(
i
ntar
gc,
char
*
*ar
gv
)
{
gl
ut
I
ni
t
(
&ar
gc,
ar
gv
)
;
gl
ut
I
ni
t
Wi
ndowPosi
t
i
on(
10,
10)
;
gl
ut
I
ni
t
Wi
ndowSi
ze(
500,
500)
;
gl
ut
I
ni
t
Di
spl
ay
Mode(
GLUT_
SI
NGLE|
GLUT_
RGB)
;
gl
ut
Cr
eat
eWi
ndow(
"
Tr
i
angl
eonBl
ackbg"
)
;
i
ni
t
(
)
;
gl
ut
Di
spl
ay
Func(
dr
awLi
nes)
;
gl
ut
Mai
nLoop(
)
;
}
10
Smar
t
Boy
11
Smar
t
Boy
e)Wr
i
t
eapr
ogr
am t
oDr
awar
ect
angl
eonbl
ackbackgr
ound
#i
ncl
ude<GL/
gl
ut
.
h>
v
oi
di
ni
t
(
)
{gl
Cl
ear
Col
or
(
0.
0,
0.
0,
0.
0,
0.
0)
;
gl
Mat
r
i
xMode(
GL_
PROJECTI
ON)
;
gl
LoadI
dent
i
t
y
(
)
;
gl
uOr
t
ho2D(
0.
0,
300.
0,
0.
0,
300.
0)
;
}
v
oi
ddr
awLi
nes(
)
{gl
Col
or
3f
(
1.
0,
1.
0,
1.
0)
;
gl
Cl
ear
(
GL_
COLOR_
BUFFER_
BI
T)
;
gl
Poi
nt
Si
ze(
3.
0)
;
gl
Begi
n(
GL_
POLYGON)
;
gl
Ver
t
ex2d(
50,
50)
;
gl
Ver
t
ex2d(
150,
50)
;
gl
Ver
t
ex2d(
150,
200)
;
gl
Ver
t
ex2d(
50,
200)
;
gl
End(
)
;
gl
Fl
ush(
)
;
}
i
ntmai
n(
i
ntar
gc,
char
*
*ar
gv
)
{
gl
ut
I
ni
t
(
&ar
gc,
ar
gv
)
;
gl
ut
I
ni
t
Wi
ndowPosi
t
i
on(
10,
10)
;
gl
ut
I
ni
t
Wi
ndowSi
ze(
500,
500)
;
gl
ut
I
ni
t
Di
spl
ay
Mode(
GLUT_
SI
NGLE|
GLUT_
RGB)
;
gl
ut
Cr
eat
eWi
ndow(
"
Rect
angl
eonBl
ackbg"
)
;
i
ni
t
(
)
;
gl
ut
Di
spl
ay
Func(
dr
awLi
nes)
;
gl
ut
Mai
nLoop(
)
;
}
12
Smar
t
Boy
13
Smar
t
Boy
Q2:
a)Wr
i
t
eapr
ogr
am t
odr
awal
i
neusi
ngDDAal
gor
i
t
hm
#i
ncl
ude<GL/
gl
ut
.
h>
#i
ncl
ude<i
ost
r
eam>
#i
ncl
ude<cmat
h>
usi
ngnamespace
st
d;
f
l
oatx1,
x2,
Y1,
y
2;
v
oi
ddi
spl
ay
(
v
oi
d)
{gl
Cl
ear
(
GL_
COLOR_
BUFFER_
BI
T)
;
f
l
oatdy
,
dx,
st
ep,
x,
y
,
k,
Xi
n,
Yi
n;
dx=x2-x1;
dy=y
2-Y1;
i
f(
abs(
dx)>abs(
dy
)
)
{st
ep=abs(
dx)
;
}
el
sest
ep=
abs(
dy
)
;
Xi
n=dx/st
ep;
Yi
n=dy/st
ep;
x=x1;
y=Y1;
gl
Begi
n(
GL_
POI
NTS)
;
gl
Col
or
3f
(
1.
0,
0.
0,
0.
0)
;
gl
Ver
t
ex2i
(
x,
y
)
;
gl
End(
)
;
f
or(
k=1;
k<=st
ep;
k++)
{x=x+Xi
n;
y=y+Yi
n;
gl
Begi
n(
GL_
POI
NTS)
;
gl
Ver
t
ex2i
(
x,
y
)
;
gl
End(
)
;
}
gl
Fl
ush(
)
;
}
v
oi
di
ni
t
(
v
oi
d)
{gl
Cl
ear
Col
or
(
1,
1,
1,
1)
;
gl
Mat
r
i
xMode(
GL_
PROJECTI
ON)
;
gl
uOr
t
ho2D(
0,
400,
0,
400)
;
}
i
ntmai
n(
i
ntar
gc,
char
*
*ar
gv
)
{cout<<"
Ent
ert
hev
al
ueofx1:
"
;
ci
n>>x1;
cout<<"
Ent
ert
hev
al
ueofy
1:
"
;
ci
n>>Y1;
cout<<"
Ent
ert
hev
al
ueofx2:
"
;
ci
n>>x2;
cout<<"
Ent
ert
hev
al
ueofy
2:
"
;
14
Smar
t
Boy
ci
n>>y
2;
gl
ut
I
ni
t
(
&ar
gc,
ar
gv
)
;
gl
ut
I
ni
t
Di
spl
ay
Mode(
GLUT_
SI
NGLE|
GLUT_
RGB)
;
gl
ut
Cr
eat
eWi
ndow(
"
DDAl
i
nedr
awi
ngal
gor
i
t
hm"
)
;
gl
ut
Di
spl
ay
Func(
di
spl
ay
)
;
i
ni
t
(
)
;
gl
ut
Mai
nLoop(
)
;
r
et
ur
n0;
}
b)Wr
i
t
eapr
ogr
am t
odr
awal
i
neusi
ngBr
esenham’
sl
i
neal
gor
i
t
hm
#i
ncl
ude<GL/
gl
ut
.
h>
#i
ncl
ude<i
ost
r
eam>
#i
ncl
ude<cmat
h>
usi
ngnamespace
st
d;
f
l
oatx1,
x2,
Y1,
y
2;
v
oi
ddi
spl
ay
(
v
oi
d)
{
i
ntx,
y
;
x=x1;
y=Y1;
i
ntdx,
dy
,
pk,
k,
y
_
i
nc;
gl
Cl
ear
(
GL_
COLOR_
BUFFER_
BI
T)
;
gl
Col
or
3f
(
1,
0,
0)
;
gl
Begi
n(
GL_
POI
NTS)
;
15
Smar
t
Boy
gl
Ver
t
ex2i
(
x,
y
)
;
gl
End(
)
;
16
Smar
t
Boy
dx=x2-x1;
dy
=y
2-Y1;
pk=
2*dy-dx;
i
f
(
dx>=0)y
_
i
nc
=1;
el
sey
_
i
nc
=1;
f
or(
k=0;
k<abs(
dx)
;
k++)
{i
f(
pk<0){
pk=pk+2*dy
;
}
el
se{
pk=pk+2*dy-2*dx;
y=y+y
_
i
nc;
}x++;
gl
Begi
n(
GL_
POI
NTS)
;
gl
Ver
t
ex2i
(
x,
y
)
;
gl
End(
)
;
}
gl
Fl
ush(
)
;
}
v
oi
di
ni
t
(
v
oi
d)
{gl
Cl
ear
Col
or
(
1,
1,
1,
1)
;
gl
Mat
r
i
xMode(
GL_
PROJECTI
ON)
;
gl
uOr
t
ho2D(
0,
400,
0,
400)
;
}
i
ntmai
n(
i
ntar
gc,
char
*
*ar
gv
)
{cout<<"
Ent
ert
hev
al
ueofx1:
"
;
ci
n>>x1;
cout<<"
Ent
ert
hev
al
ueofy
1:
"
;
ci
n>>Y1;
cout<<"
Ent
ert
hev
al
ueofx2:
"
;
ci
n>>x2;
cout<<"
Ent
ert
hev
al
ueofy
2:
"
;
ci
n>>y
2;
gl
ut
I
ni
t
(
&ar
gc,
ar
gv
)
;
gl
ut
I
ni
t
Di
spl
ay
Mode(
GLUT_
SI
NGLE|
GLUT_
RGB)
;
gl
ut
Cr
eat
eWi
ndow(
"
Br
esenham’
sl
i
nedr
awi
ngal
gor
i
t
hm"
)
;
i
ni
t
(
)
;
gl
ut
Di
spl
ay
Func(
di
spl
ay
)
;
gl
ut
Mai
nLoop(
)
;
r
et
ur
n0;
}
17
Smar
t
Boy
18
Smar
t
Boy
Q3:
a)Wr
i
t
eapr
ogr
am t
oDr
awaci
r
cl
eusi
ngMi
dpoi
ntci
r
cl
eal
gor
i
t
hm
#i
ncl
ude<GL/
gl
ut
.
h>
#i
ncl
ude<i
ost
r
eam>
usi
ngnamespacest
d;
i
ntpnt
X1,
pnt
Y1,
r
;
v
oi
dpl
ot
(
i
ntx,
i
nty
)
{gl
Begi
n(
GL_
POI
NTS)
;
gl
Ver
t
ex2i
(
x+pnt
X1,
y+
pnt
Y1)
;
gl
End(
)
;
}
v
oi
dmy
I
ni
t
(
v
oi
d)
{gl
Cl
ear
Col
or
(
1.
0,
1.
0,
1.
0,
0.
0)
;
gl
Col
or
3f
(
0.
0f
,
0.
0f
,
0.
0f
)
;
gl
Poi
nt
Si
ze(
4.
0)
;
gl
Mat
r
i
xMode(
GL_
PROJECTI
ON)
;
gl
LoadI
dent
i
t
y
(
)
;
gl
uOr
t
ho2D(
0.
0,
640.
0,
0.
0,
480.
0)
;
}
v
oi
dmi
dPoi
nt
Ci
r
cl
eAl
go(
)
{i
ntx=0;
i
nty=r
;
f
l
oat
deci
si
on=5/4-r
;
pl
ot
(
x,
y
)
;
whi
l
e(
y>x){i
f
(
deci
si
on<0)
{x++;
deci
si
on+=2*x+1;
}
el
se
{
y
;
x++;
deci
si
on+=2*(
x-y
)+1;
}
pl
ot
(
x,
y
)
;
pl
ot
(
x,
y
)
;
pl
ot
(
x
,
y
)
;
pl
ot
(
x
,
y
)
;
pl
ot
(
y
,
x
)
;
pl
ot
(
y
,
x)
;
pl
ot
(
y
,
x)
;
pl
ot
(
y
,
x)
;
}
}
v
oi
dmy
Di
spl
ay
(
v
oi
d)
{
19
Smar
t
Boy
gl
Cl
ear
(
GL_
COLOR_
BUFFER_
BI
T)
;
gl
Col
or
3f
(
0.
0,
0.
0,
0.
0)
;
gl
Poi
nt
Si
ze(
1.
0)
;
mi
dPoi
nt
Ci
r
cl
eAl
go(
)
;
gl
Fl
ush(
)
;
}
i
ntmai
n(
i
ntar
gc,
char
*
*ar
gv
)
{cout<<"
Ent
ert
hecoor
di
nat
esoft
hecent
er
:
"<<
endl
;
cout<<"
Xcoor
di
nat
e:
"
;
ci
n>>pnt
X1;
cout
<<"
Ycoor
di
nat
e:
"
;
ci
n>>pnt
Y1;
cout<<"
Ent
err
adi
us:
"
;
ci
n>>r
;
gl
ut
I
ni
t
(
&ar
gc,
ar
gv
)
;
gl
ut
I
ni
t
Di
spl
ay
Mode(
GLUT_
SI
NGLE|
GLUT_
RGB)
;
gl
ut
I
ni
t
Wi
ndowSi
ze(
640,
480)
;
gl
ut
I
ni
t
Wi
ndowPosi
t
i
on(
100,
150)
;
gl
ut
Cr
eat
eWi
ndow(
"
Ci
r
cl
eusi
ngmi
dpoi
ntci
r
cl
e
al
gor
i
t
hm"
)
;
gl
ut
Di
spl
ay
Func(
my
Di
spl
ay
)
;
my
I
ni
t
(
)
;
gl
ut
Mai
nLoop(
)
;
r
et
ur
n0;
}
b)Wr
i
t
eapr
ogr
am t
oDr
awanel
l
i
pseusi
ngMi
dpoi
ntel
l
i
pseal
gor
i
t
hm
20
Smar
t
Boy
#i
ncl
ude<GL/
gl
ut
.
h>
#i
ncl
ude<i
ost
r
eam>
usi
ngnamespacest
d;
f
l
oata,
b,
h,
k;
v
oi
d
mi
dpt
el
l
i
pse(
)
{gl
Cl
ear
(
GL_
COLOR_
BUFFER_
BI
T)
;
gl
Col
or
3f
(
1,
0,
0)
;
f
l
oatf
x,
f
y
,
d1,
d2,
x,
y
;
x=0;
y=b;
d1=(
b*b)-(
a*a*b)+(
0.
25*a*a)
;
f
x=2*b*b*x;
f
y=2*a*a*y
;
whi
l
e(
f
x<f
y
)
{gl
Begi
n(
GL_
POI
NTS)
;
gl
Ver
t
ex2i
(
x+h,
y+k)
;
gl
Ver
t
ex2i
(
x+h,
y+k)
;
gl
Ver
t
ex2i
(
x+h,
y+k)
;
gl
Ver
t
ex2i
(
x+h,
y+k)
;
gl
End(
)
;
i
f
(
d1<0)
{x++;
f
x=f
x+(
2*b*b)
;
d1=d1+f
x+(
b*b)
;
}el
se
{x++;
y
;
f
x=f
x+(
2*b*b)
;
f
y=f
y-(
2*a*a)
;
d1=d1+f
x-f
y+(
b*b)
;
}
}d2=(
(
b*b)*(
(
x+0.
5)*(
x+0.
5)
)
)+(
(
a*a)*(
(
y-1)*(
y-1)
)
)-(
a*a*b*
b)
;
whi
l
e(
y>=0)
{gl
Begi
n(
GL_
POI
NTS)
;
gl
Ver
t
ex2i
(
x+h,
y+k)
;
gl
Ver
t
ex2i
(
x+h,
y+k)
;
gl
Ver
t
ex2i
(
x+h,
y+k)
;
gl
Ver
t
ex2i
(
x+h,
y+k)
;
gl
End(
)
;
21
Smar
t
Boy
i
f(
d2>0){y
;
f
y=f
y-(
2*a*a)
;
d2=d2+(
a*a)-f
y
;
}
el
se
{
y
;
x++;
f
x=f
x+(
2*b*b)
;
f
y=f
y-(
2*a*a)
;
d2=d2+f
x-f
y+(
a*a)
;
}
}
gl
Fl
ush(
)
;
}
v
oi
dmy
i
ni
t
(
)
{gl
Cl
ear
Col
or
(
1,
1,
1,
0)
;
gl
Mat
r
i
xMode(
GL_
PROJECTI
ON)
;
gl
LoadI
dent
i
t
y
(
)
;
gl
uOr
t
ho2D(
0,
500,
0,
500)
;
}
i
ntmai
n(
i
ntar
gc,
char
*
*ar
gv
)
{cout<<"
Ent
erel
l
i
pseXr
adi
us:
"
;
ci
n>>a;
cout<<"
Ent
erel
l
i
pseYr
adi
us:
"
;
ci
n>>b;
cout<<"
Ent
erel
l
i
psecent
erXcoor
di
nat
e:
"
;
ci
n>>h;
cout<<"
Ent
erel
l
i
psecent
erYcoor
di
nat
e:
"
;
ci
n>>k;
gl
ut
I
ni
t
(
&ar
gc,
ar
gv
)
;
gl
ut
I
ni
t
Di
spl
ay
Mode(
GLUT_
SI
NGLE|
GLUT_
RGB)
;
gl
ut
I
ni
t
Wi
ndowSi
ze(
500,
500)
;
gl
ut
I
ni
t
Wi
ndowPosi
t
i
on(
50,
50)
;
gl
ut
Cr
eat
eWi
ndow(
"
El
l
i
pseusi
ngmi
dpoi
ntel
l
i
pse
al
gor
i
t
hm"
)
;
gl
ut
Di
spl
ay
Func(
mi
dpt
el
l
i
pse)
;
my
i
ni
t
(
)
;
gl
ut
Mai
nLoop(
)
;
r
et
ur
n0;
}
22
Smar
t
Boy
23
Smar
t
Boy
Q4:
Wr
i
t
eapr
ogr
am t
of
i
l
l
apol
y
gonusi
ngscanl
i
nef
i
l
l
al
gor
i
t
hm.
#i
ncl
ude<GL/
gl
ut
.
h>
#i
ncl
ude<st
dl
i
b.
h>
#i
ncl
ude<mat
h.
h>
#i
ncl
ude<i
ost
r
eam>
i
ntLE[
500]
,
RE[
500]
;
v
oi
di
ni
t
(
){
gl
LoadI
dent
i
t
y
(
)
;
gl
Cl
ear
Col
or
(
0.
5,
0.
5,
0.
5,
0.
5)
;
gl
Mat
r
i
xMode(
GL_
PROJECTI
ON)
;
gl
uOr
t
ho2D(
0,
500,
0,
500)
;
gl
Mat
r
i
xMode(
GL_
MODELVI
EW)
;
}v
oi
di
nt
er
sect
i
on(
GLi
ntx1,
GLi
nty
1,
GLi
ntx2,
GLi
nt
y
2){
f
l
oatx,
M;
i
ntt
,
y
;
i
f(
y
1>y
2){
t=x1;
x1=x2;
x2=t
;
t
=y
1;
y
1
=y
2;
y
2
=t
;
}
i
f(
(
y
2-y
1)==0)
{M =(
x2-x1)
;
}el
se
M =(
x2-x1)/(
y
2-y
1)
;
x=x1;
f
or(
y=y
1;
y<=y
2;
y
++){i
f
(
x<LE[
y
]
)LE[
y
]=x;
i
f(
x>RE[
y
]
)RE[
y
]=x;
x=x+M;
}
}v
oi
d
di
spl
ay
(
){
GLi
ntP1[
2]={
125,
250}
,
P2[
2]={
250,
125}
,
P3[
2]={
375,
250}
,
P4[
2]={
250,
375}
;
gl
Cl
ear
(
GL_
COLOR_
BUFFER_
BI
T)
;
f
or(
i
nti
=0;
i
<500;
i
++){
LE[
i
]=500;
RE[
i
]=0;
}
i
nt
er
sect
i
on(
P1[
0]
,
P1[
1]
,
P2[
0]
,
P2[
1]
)
;
i
nt
er
sect
i
on(
P2[
0]
,
P2[
1]
,
P3[
0]
,
P3[
1]
)
;
i
nt
er
sect
i
on(
P3[
0]
,
P3[
1]
,
P4[
0]
,
P4[
1]
)
;
i
nt
er
sect
i
on(
P4[
0]
,
P4[
1]
,
P1[
0]
,
P1[
1]
)
;
f
or(
i
nty=0;
y<500;
y
++){
f
or(
i
ntx=LE[
y
]
;
x<RE[
y
]
;
x++){
24
Smar
t
Boy
gl
Begi
n(
GL_
POI
NTS)
;
gl
Ver
t
ex2i
(
x,
y
)
;
gl
End(
)
;
gl
Fl
ush(
)
;
}
}
}i
ntmai
n(
i
ntar
gc,
char
*
*
ar
gv
){
gl
ut
I
ni
t
(
&ar
gc,
ar
gv
)
;
gl
ut
I
ni
t
Di
spl
ay
Mode(
GLUT_
SI
NGLE|
GLUT_
RGB)
;
gl
ut
I
ni
t
Wi
ndowSi
ze(
500,
500)
;
gl
ut
I
ni
t
Wi
ndowPosi
t
i
on(
10,
10)
;
gl
ut
Cr
eat
eWi
ndow(
"
ScanLi
ne"
)
;
i
ni
t
(
)
;
gl
ut
Di
spl
ay
Func(
di
spl
ay
)
;
gl
ut
Mai
nLoop(
)
;
r
et
ur
n0;
}
25
Smar
t
Boy
26
Smar
t
Boy
Q5:
Wr
i
t
eapr
ogr
am t
of
i
l
l
apol
y
gonusi
ngboundar
yf
i
l
l
andf
l
oodf
i
l
l
al
gor
i
t
hm (
4connect
edand8connect
ed)f
orv
ar
i
ousconcav
eandconv
expol
y
gons.
Boundar
yFi
l
l
4–connect
edconcav
e
#i
ncl
ude<cmat
h>
#i
ncl
ude<GL/
gl
ut
.
h>
st
r
uctPoi
nt{
GLi
ntx;
GLi
nty
;
}
;
st
r
uctCol
or{
GLf
l
oatr
;
GLf
l
oatg;
GLf
l
oatb;
}
;
v
oi
d
i
ni
t
(
){
gl
Cl
ear
Col
or
(
1.
0,
1.
0,
1.
0,
0.
0)
;
gl
Col
or
3f
(
0.
0f
,
0.
0f
,
0.
0f
)
;
gl
uOr
t
ho2D(
0.
0,
640.
0,
0.
0,
480.
0)
;
gl
Mat
r
i
xMode(
GL_
PROJECTI
ON)
;
gl
LoadI
dent
i
t
y
(
)
;
gl
Poi
nt
Si
ze(
1.
0f
)
;
}v
oi
ddr
aw_
dda(
Poi
ntp1,
Poi
nt
p2){
GLf
l
oatdx=p2.
x-p1.
x;
GLf
l
oatdy=p2.
y-p1.
y
;
GLf
l
oatx1=p1.
x;
GLf
l
oaty
1=p1.
y
;
GLf
l
oatst
ep=0;
i
f
(
abs(
dx)>abs(
dy
)
){
st
ep=abs(
dx)
;
}el
se{st
ep=
abs(
dy
)
;
}
GLf
l
oatxI
nc=dx/st
ep;
GLf
l
oaty
I
nc=dy/st
ep;
f
or
(
f
l
oati
=1;
i
<=st
ep;
i
++){
gl
Ver
t
ex2i
(
x1,
y
1)
;
x1+=xI
nc;
y
1+=y
I
nc;
}
}
Col
orget
Pi
xel
Col
or
(
GLi
ntx,
GLi
nty
){
Col
orcol
or
;
gl
ReadPi
xel
s(
x,
y
,
1,
1,
GL_
RGB,
GL_
FLOAT,
&col
or
)
;
r
et
ur
n
col
or
;
27
Smar
t
Boy
}
28
Smar
t
Boy
v
oi
dset
Pi
xel
Col
or
(
GLi
ntx,
GLi
nty
,
Col
orcol
or
){
gl
Col
or
3f
(
col
or
.
r
,
col
or
.
g,
col
or
.
b)
;
gl
Begi
n(
GL_
POI
NTS)
;
gl
Ver
t
ex2i
(
x,
y
)
;
gl
End(
)
;
gl
Fl
ush(
)
;
}v
oi
dboundar
y
Fi
l
l
4(
i
ntx
,
i
nty
,
Col
orf
i
l
l
_
col
or
,
Col
or
boundar
y
_
col
or
){Col
orcur
r
ent
Col
or=get
Pi
xel
Col
or
(
x,
y
)
;
i
f
(
cur
r
ent
Col
or
.
r!
=boundar
y
_
col
or
.
r&&cur
r
ent
Col
or
.
g!
=
boundar
y
_
col
or
.
g&&cur
r
ent
Col
or
.
b!
=boundar
y
_
col
or
.
b){
set
Pi
xel
Col
or
(
x,
y
,
f
i
l
l
_
col
or
)
;
boundar
y
Fi
l
l
4(
x+
1,
y
,
f
i
l
l
_
col
or
,
boundar
y
_
col
or
)
;
boundar
y
Fi
l
l
4(
x,
y+1,
f
i
l
l
_
col
or
,
boundar
y
_
col
or
)
;
boundar
y
Fi
l
l
4(
x-1,
y
,
f
i
l
l
_
col
or
,
boundar
y
_
col
or
)
;
boundar
y
Fi
l
l
4(
x,
y-1,
f
i
l
l
_
col
or
,
boundar
y
_
col
or
)
;
}
}
#def
i
neVERTEX_
COUNT6
Poi
ntpoi
nt
s[
VERTEX_
COUNT]={
100,
200,
120,
150,
100,
100,
160,
70,
130,
150,
150,
150}
;
v
oi
ddi
spl
ay
(
v
oi
d){
gl
Cl
ear
(
GL_
COLOR_
BUFFER_
BI
T)
;
gl
Begi
n(
GL_
POI
NTS)
;
Poi
ntst
Poi
nt=
poi
nt
s[
0]
;
f
or(
i
nti
=1;
i
<
VERTEX_
COUNT;
i
++)
{dr
aw_
dda(
st
Poi
nt
,
poi
nt
s[
i
]
)
;
st
Poi
nt=
poi
nt
s[
i
]
;
}
dr
aw_
dda(
st
Poi
nt
,
poi
nt
s[
0]
)
;
gl
End(
)
;
gl
Fl
ush(
)
;
Col
orf
i
l
l
Col
or={
1.
f
,
1.
0f
,
0.
0f
}
;
Col
or
boundar
y
Col
or={
0.
0f
,
0.
0f
,
0.
0f
}
;
boundar
y
Fi
l
l
4(
101,
101,
f
i
l
l
Col
or
,
boundar
y
Col
or
)
;
}i
ntmai
n(
i
ntar
gc,
char
*
*
ar
gv
){
gl
ut
I
ni
t
(
&ar
gc,
ar
gv
)
;
gl
ut
I
ni
t
Di
spl
ay
Mode(
GLUT_
SI
NGLE|
GLUT_
RGB)
;
gl
ut
I
ni
t
Wi
ndowSi
ze(
640,
480)
;
gl
ut
I
ni
t
Wi
ndowPosi
t
i
on(
200,
200)
;
gl
ut
Cr
eat
eWi
ndow(
"
Boundar
yFi
l
l
4connect
ed"
)
;
i
ni
t
(
)
;
gl
ut
Di
spl
ay
Func(
di
spl
ay
)
;
gl
ut
Mai
nLoop(
)
;
r
et
ur
n0;
}
29
Smar
t
Boy
30
Smar
t
Boy
8–connect
edconcav
e
#i
ncl
ude<cmat
h>
#i
ncl
ude<GL/
gl
ut
.
h>
#i
ncl
ude<i
ost
r
eam>
usi
ngnamespacest
d;
st
r
uctPoi
nt{
GLi
ntx;
GLi
nty
;
}
;
st
r
uctCol
or{
GLf
l
oatr
;
GLf
l
oatg;
GLf
l
oatb;
}
;
v
oi
d
i
ni
t
(
){
gl
Cl
ear
Col
or
(
1.
0,
1.
0,
1.
0,
0.
0)
;
gl
Col
or
3f
(
0.
0f
,
0.
0f
,
0.
0f
)
;
gl
uOr
t
ho2D(
0.
0,
640.
0,
0.
0,
480.
0)
;
gl
Mat
r
i
xMode(
GL_
PROJECTI
ON)
;
gl
LoadI
dent
i
t
y
(
)
;
}v
oi
ddr
aw_
dda(
Poi
ntp1,
Poi
nt
p2){
GLf
l
oatdx=p2.
x-p1.
x;
GLf
l
oatdy=p2.
y-p1.
y
;
GLf
l
oatx1=p1.
x;
GLf
l
oaty
1=p1.
y
;
GLf
l
oatst
ep=0;
i
f
(
abs(
dx)>abs(
dy
)
){
st
ep=abs(
dx)
;
}el
se{st
ep=
abs(
dy
)
;
}
GLf
l
oatxI
nc=dx/st
ep;
GLf
l
oaty
I
nc=dy/st
ep;
f
or
(
f
l
oati
=1;
i
<=st
ep;
i
++){
gl
Ver
t
ex2i
(
x1,
y
1)
;
x1+=xI
nc;
y
1+=y
I
nc;
}
}
Col
orget
Pi
xel
Col
or
(
GLi
ntx,
GLi
nty
){
Col
orcol
or
;
gl
ReadPi
xel
s(
x,
y
,
1,
1,
GL_
RGB,
GL_
FLOAT,
&col
or
)
;
r
et
ur
n
col
or
;
}v
oi
dset
Pi
xel
Col
or
(
GLi
ntx,
GLi
nty
,
Col
or
col
or
){
gl
Col
or
3f
(
col
or
.
r
,
col
or
.
g,
col
or
.
b)
;
31
Smar
t
Boy
gl
Begi
n(
GL_
POI
NTS)
;
gl
Ver
t
ex2i
(
x,
y
)
;
32
Smar
t
Boy
gl
End(
)
;
gl
Fl
ush(
)
;
}v
oi
dboundar
y
Fi
l
l
8(
i
ntx
,
i
nty
,
Col
orf
i
l
l
_
col
or
,
Col
or
boundar
y
_
col
or
){Col
orcur
r
ent
Col
or=get
Pi
xel
Col
or
(
x,
y
)
;
i
f
(
cur
r
ent
Col
or
.
r!
=boundar
y
_
col
or
.
r&&cur
r
ent
Col
or
.
g!
=
boundar
y
_
col
or
.
g&&cur
r
ent
Col
or
.
b!
=boundar
y
_
col
or
.
b){
set
Pi
xel
Col
or
(
x,
y
,
f
i
l
l
_
col
or
)
;
boundar
y
Fi
l
l
8(
x+1,
y
,
f
i
l
l
_
col
or
,
boundar
y
_
col
or
)
;
boundar
y
Fi
l
l
8(
x-1,
y
,
f
i
l
l
_
col
or
,
boundar
y
_
col
or
)
;
boundar
y
Fi
l
l
8(
x,
y+1,
f
i
l
l
_
col
or
,
boundar
y
_
col
or
)
;
boundar
y
Fi
l
l
8(
x,
y-1,
f
i
l
l
_
col
or
,
boundar
y
_
col
or
)
;
boundar
y
Fi
l
l
8(
x-1,
y-1,
f
i
l
l
_
col
or
,
boundar
y
_
col
or
)
;
boundar
y
Fi
l
l
8(
x-1,
y+1,
f
i
l
l
_
col
or
,
boundar
y
_
col
or
)
;
boundar
y
Fi
l
l
8(
x+1,
y-1,
f
i
l
l
_
col
or
,
boundar
y
_
col
or
)
;
boundar
y
Fi
l
l
8(
x+1,
y+
1,
f
i
l
l
_
col
or
,
boundar
y
_
col
or
)
;
}
}
#def
i
neVERTEX_
COUNT6
Poi
ntpoi
nt
s[
VERTEX_
COUNT]={
250,
250,
300,
250,
300,
300,
275,
300,
275,
275,
250,
275}
;
v
oi
ddi
spl
ay
(
v
oi
d){
gl
Cl
ear
(
GL_
COLOR_
BUFFER_
BI
T)
;
gl
Begi
n(
GL_
POI
NTS)
;
Poi
ntst
Poi
nt=
poi
nt
s[
0]
;
f
or(
i
nti
=1;
i
<
VERTEX_
COUNT;
i
++)
{dr
aw_
dda(
st
Poi
nt
,
poi
nt
s[
i
]
)
;
st
Poi
nt=
poi
nt
s[
i
]
;
}
dr
aw_
dda(
st
Poi
nt
,
poi
nt
s[
0]
)
;
gl
End(
)
;
gl
Fl
ush(
)
;
Col
orf
i
l
l
Col
or={
1.
0f
,
0.
0f
,
1.
0f
}
;
Col
orboundar
y
Col
or={
0.
0f
,
0.
0f
,
0.
0f
}
;
boundar
y
Fi
l
l
8(
251,
251,
f
i
l
l
Col
or
,
boundar
y
Col
or
)
;
}i
ntmai
n(
i
ntar
gc,
char
*
*
ar
gv
){
gl
ut
I
ni
t
(
&ar
gc,
ar
gv
)
;
gl
ut
I
ni
t
Di
spl
ay
Mode(
GLUT_
SI
NGLE|
GLUT_
RGB)
;
gl
ut
I
ni
t
Wi
ndowSi
ze(
640,
480)
;
gl
ut
I
ni
t
Wi
ndowPosi
t
i
on(
200,
200)
;
gl
ut
Cr
eat
eWi
ndow(
"
Boundar
yFi
l
l
8connect
ed"
)
;
i
ni
t
(
)
;
gl
ut
Di
spl
ay
Func(
di
spl
ay
)
;
gl
ut
Mai
nLoop(
)
;
r
et
ur
n0;
}
33
Smar
t
Boy
34
Smar
t
Boy
4–connect
edconv
ex
#i
ncl
ude<cmat
h>
#i
ncl
ude<GL/
gl
ut
.
h>
st
r
uctPoi
nt{
GLi
ntx;
GLi
nty
;
}
;
st
r
uctCol
or{
GLf
l
oatr
;
GLf
l
oatg;
GLf
l
oatb;
}
;
v
oi
d
i
ni
t
(
){
gl
Cl
ear
Col
or
(
1.
0,
1.
0,
1.
0,
0.
0)
;
gl
Col
or
3f
(
0.
0f
,
0.
0f
,
0.
0f
)
;
gl
uOr
t
ho2D(
0.
0,
640.
0,
0.
0,
480.
0)
;
gl
Mat
r
i
xMode(
GL_
PROJECTI
ON)
;
gl
LoadI
dent
i
t
y
(
)
;
gl
Poi
nt
Si
ze(
1.
0f
)
;
}v
oi
ddr
aw_
dda(
Poi
ntp1,
Poi
nt
p2){
GLf
l
oatdx=p2.
x-p1.
x;
GLf
l
oatdy=p2.
y-p1.
y
;
GLf
l
oatx1=p1.
x;
GLf
l
oaty
1=p1.
y
;
GLf
l
oatst
ep=0;
i
f
(
abs(
dx)>abs(
dy
)
){
st
ep=abs(
dx)
;
}el
se{st
ep=
abs(
dy
)
;
}
GLf
l
oatxI
nc=dx/st
ep;
GLf
l
oaty
I
nc=dy/st
ep;
f
or
(
f
l
oati
=1;
i
<=st
ep;
i
++){
gl
Ver
t
ex2i
(
x1,
y
1)
;
x1+=xI
nc;
y
1+=y
I
nc;
}
}
Col
orget
Pi
xel
Col
or
(
GLi
ntx,
GLi
nty
){
Col
orcol
or
;
gl
ReadPi
xel
s(
x,
y
,
1,
1,
GL_
RGB,
GL_
FLOAT,
&col
or
)
;
r
et
ur
n
col
or
;
}v
oi
dset
Pi
xel
Col
or
(
GLi
ntx,
GLi
nty
,
Col
or
col
or
){
gl
Col
or
3f
(
col
or
.
r
,
col
or
.
g,
col
or
.
b)
;
gl
Begi
n(
GL_
POI
NTS)
;
35
Smar
t
Boy
gl
Ver
t
ex2i
(
x,
y
)
;
gl
End(
)
;
36
Smar
t
Boy
gl
Fl
ush(
)
;
}v
oi
dboundar
y
Fi
l
l
4(
i
ntx
,
i
nty
,
Col
orf
i
l
l
_
col
or
,
Col
or
boundar
y
_
col
or
){Col
orcur
r
ent
Col
or=get
Pi
xel
Col
or
(
x,
y
)
;
i
f
(
cur
r
ent
Col
or
.
r!
=boundar
y
_
col
or
.
r&&cur
r
ent
Col
or
.
g!
=
boundar
y
_
col
or
.
g&&cur
r
ent
Col
or
.
b!
=boundar
y
_
col
or
.
b){
set
Pi
xel
Col
or
(
x,
y
,
f
i
l
l
_
col
or
)
;
boundar
y
Fi
l
l
4(
x+
1,
y
,
f
i
l
l
_
col
or
,
boundar
y
_
col
or
)
;
boundar
y
Fi
l
l
4(
x,
y+1,
f
i
l
l
_
col
or
,
boundar
y
_
col
or
)
;
boundar
y
Fi
l
l
4(
x-1,
y
,
f
i
l
l
_
col
or
,
boundar
y
_
col
or
)
;
boundar
y
Fi
l
l
4(
x,
y-1,
f
i
l
l
_
col
or
,
boundar
y
_
col
or
)
;
}
}
#def
i
neVERTEX_
COUNT3
Poi
ntpoi
nt
s[
VERTEX_
COUNT]={
250,
300,
300,
300,
300,
250,
}
;
v
oi
d
di
spl
ay
(
v
oi
d){
gl
Cl
ear
(
GL_
COLOR_
BUFFER_
BI
T)
;
gl
Begi
n(
GL_
POI
NTS)
;
Poi
ntst
Poi
nt=
poi
nt
s[
0]
;
f
or(
i
nti
=1;
i
<
VERTEX_
COUNT;
i
++)
{dr
aw_
dda(
st
Poi
nt
,
poi
nt
s[
i
]
)
;
st
Poi
nt=
poi
nt
s[
i
]
;
}
dr
aw_
dda(
st
Poi
nt
,
poi
nt
s[
0]
)
;
gl
End(
)
;
gl
Fl
ush(
)
;
Col
orf
i
l
l
Col
or={
1.
0f
,
1.
0f
,
0.
0f
}
;
Col
orboundar
y
Col
or={
0.
0f
,
0.
0f
,
0.
0f
}
;
boundar
y
Fi
l
l
4(
276,
275,
f
i
l
l
Col
or
,
boundar
y
Col
or
)
;
}i
ntmai
n(
i
ntar
gc,
char
*
*
ar
gv
){
gl
ut
I
ni
t
(
&ar
gc,
ar
gv
)
;
gl
ut
I
ni
t
Di
spl
ay
Mode(
GLUT_
SI
NGLE|
GLUT_
RGB)
;
gl
ut
I
ni
t
Wi
ndowSi
ze(
640,
480)
;
gl
ut
I
ni
t
Wi
ndowPosi
t
i
on(
200,
200)
;
gl
ut
Cr
eat
eWi
ndow(
"
Boundar
yFi
l
l
4connect
ed"
)
;
i
ni
t
(
)
;
gl
ut
Di
spl
ay
Func(
di
spl
ay
)
;
gl
ut
Mai
nLoop(
)
;
r
et
ur
n0;
}
37
Smar
t
Boy
38
Smar
t
Boy
8–connect
edconv
ex
#i
ncl
ude<cmat
h>
#i
ncl
ude<GL/
gl
ut
.
h>
#i
ncl
ude<i
ost
r
eam>
usi
ngnamespacest
d;
st
r
uctPoi
nt{
GLi
ntx;
GLi
nty
;
}
;
st
r
uctCol
or{
GLf
l
oatr
;
GLf
l
oatg;
GLf
l
oatb;
}
;
v
oi
d
i
ni
t
(
){
gl
Cl
ear
Col
or
(
1.
0,
1.
0,
1.
0,
0.
0)
;
gl
Col
or
3f
(
0.
0f
,
0.
0f
,
0.
0f
)
;
gl
uOr
t
ho2D(
0.
0,
640.
0,
0.
0,
480.
0)
;
gl
Mat
r
i
xMode(
GL_
PROJECTI
ON)
;
gl
LoadI
dent
i
t
y
(
)
;
}v
oi
ddr
aw_
dda(
Poi
ntp1,
Poi
nt
p2){
GLf
l
oatdx=p2.
x-p1.
x;
GLf
l
oatdy=p2.
y-p1.
y
;
GLf
l
oatx1=p1.
x;
GLf
l
oaty
1=p1.
y
;
GLf
l
oatst
ep=0;
i
f
(
abs(
dx)>abs(
dy
)
){
st
ep=abs(
dx)
;
}el
se{st
ep=
abs(
dy
)
;
}
GLf
l
oatxI
nc=dx/st
ep;
GLf
l
oaty
I
nc=dy/st
ep;
f
or
(
f
l
oati
=1;
i
<=st
ep;
i
++){
gl
Ver
t
ex2i
(
x1,
y
1)
;
x1+=xI
nc;
y
1+=y
I
nc;
}
}
Col
orget
Pi
xel
Col
or
(
GLi
ntx,
GLi
nty
){
Col
orcol
or
;
gl
ReadPi
xel
s(
x,
y
,
1,
1,
GL_
RGB,
GL_
FLOAT,
&col
or
)
;
r
et
ur
n
col
or
;
}v
oi
dset
Pi
xel
Col
or
(
GLi
ntx,
GLi
nty
,
Col
or
col
or
){
gl
Col
or
3f
(
col
or
.
r
,
col
or
.
g,
col
or
.
b)
;
39
Smar
t
Boy
gl
Begi
n(
GL_
POI
NTS)
;
gl
Ver
t
ex2i
(
x,
y
)
;
40
Smar
t
Boy
gl
End(
)
;
gl
Fl
ush(
)
;
}v
oi
dboundar
y
Fi
l
l
8(
i
ntx
,
i
nty
,
Col
orf
i
l
l
_
col
or
,
Col
or
boundar
y
_
col
or
){Col
orcur
r
ent
Col
or=get
Pi
xel
Col
or
(
x,
y
)
;
i
f
(
cur
r
ent
Col
or
.
r!
=boundar
y
_
col
or
.
r&&cur
r
ent
Col
or
.
g!
=
boundar
y
_
col
or
.
g&&cur
r
ent
Col
or
.
b!
=boundar
y
_
col
or
.
b){
set
Pi
xel
Col
or
(
x,
y
,
f
i
l
l
_
col
or
)
;
boundar
y
Fi
l
l
8(
x+1,
y
,
f
i
l
l
_
col
or
,
boundar
y
_
col
or
)
;
boundar
y
Fi
l
l
8(
x-1,
y
,
f
i
l
l
_
col
or
,
boundar
y
_
col
or
)
;
boundar
y
Fi
l
l
8(
x,
y+1,
f
i
l
l
_
col
or
,
boundar
y
_
col
or
)
;
boundar
y
Fi
l
l
8(
x,
y-1,
f
i
l
l
_
col
or
,
boundar
y
_
col
or
)
;
boundar
y
Fi
l
l
8(
x-1,
y-1,
f
i
l
l
_
col
or
,
boundar
y
_
col
or
)
;
boundar
y
Fi
l
l
8(
x-1,
y+1,
f
i
l
l
_
col
or
,
boundar
y
_
col
or
)
;
boundar
y
Fi
l
l
8(
x+1,
y-1,
f
i
l
l
_
col
or
,
boundar
y
_
col
or
)
;
boundar
y
Fi
l
l
8(
x+1,
y+
1,
f
i
l
l
_
col
or
,
boundar
y
_
col
or
)
;
}
}
#def
i
neVERTEX_
COUNT4
Poi
ntpoi
nt
s[
VERTEX_
COUNT]={
250,
250,
300,
250,
300,
220,
250,
220}
;
v
oi
ddi
spl
ay
(
v
oi
d){
gl
Cl
ear
(
GL_
COLOR_
BUFFER_
BI
T)
;
gl
Begi
n(
GL_
POI
NTS)
;
Poi
ntst
Poi
nt=
poi
nt
s[
0]
;
f
or(
i
nti
=1;
i
<
VERTEX_
COUNT;
i
++)
{dr
aw_
dda(
st
Poi
nt
,
poi
nt
s[
i
]
)
;
st
Poi
nt=
poi
nt
s[
i
]
;
}
dr
aw_
dda(
st
Poi
nt
,
poi
nt
s[
0]
)
;
gl
End(
)
;
gl
Fl
ush(
)
;
Col
orf
i
l
l
Col
or={
1.
0f
,
0.
0f
,
1.
0f
}
;
Col
orboundar
y
Col
or={
0.
0f
,
0.
0f
,
0.
0f
}
;
boundar
y
Fi
l
l
8(
275,
235,
f
i
l
l
Col
or
,
boundar
y
Col
or
)
;
}i
ntmai
n(
i
ntar
gc,
char
*
*
ar
gv
){
gl
ut
I
ni
t
(
&ar
gc,
ar
gv
)
;
gl
ut
I
ni
t
Di
spl
ay
Mode(
GLUT_
SI
NGLE|
GLUT_
RGB)
;
gl
ut
I
ni
t
Wi
ndowSi
ze(
640,
480)
;
gl
ut
I
ni
t
Wi
ndowPosi
t
i
on(
200,
200)
;
gl
ut
Cr
eat
eWi
ndow(
"
Boundar
yFi
l
l
8connect
ed"
)
;
i
ni
t
(
)
;
gl
ut
Di
spl
ay
Func(
di
spl
ay
)
;
gl
ut
Mai
nLoop(
)
;
r
et
ur
n0;
}
41
Smar
t
Boy
42
Smar
t
Boy
Fl
oodFi
l
l
4–connect
ed
concav
e
#i
ncl
ude<cmat
h>
#i
ncl
ude<GL/
gl
ut
.
h>
st
r
uctPoi
nt{
GLi
ntx;
GLi
nty
;
}
;
st
r
uctCol
or{
GLf
l
oatr
;
GLf
l
oatg;
GLf
l
oatb;
}
;
v
oi
d
i
ni
t
(
){
gl
Cl
ear
Col
or
(
1.
0,
1.
0,
1.
0,
0.
0)
;
gl
Col
or
3f
(
0.
0f
,
0.
0f
,
0.
0f
)
;
gl
uOr
t
ho2D(
0.
0,
640.
0,
0.
0,
480.
0)
;
gl
Mat
r
i
xMode(
GL_
PROJECTI
ON)
;
gl
LoadI
dent
i
t
y
(
)
;
gl
Poi
nt
Si
ze(
1.
0f
)
;
}v
oi
ddr
aw_
dda(
Poi
ntp1,
Poi
nt
p2){
GLf
l
oatdx=p2.
x-p1.
x;
GLf
l
oatdy=p2.
y-p1.
y
;
GLf
l
oatx1=p1.
x;
GLf
l
oaty
1=p1.
y
;
GLf
l
oatst
ep=0;
i
f
(
abs(
dx)>abs(
dy
)
){
st
ep=abs(
dx)
;
}el
se{st
ep=
abs(
dy
)
;
}
GLf
l
oatxI
nc=dx/st
ep;
GLf
l
oaty
I
nc=dy/st
ep;
f
or
(
f
l
oati
=1;
i
<=st
ep;
i
++){
gl
Ver
t
ex2i
(
x1,
y
1)
;
x1+=xI
nc;
y
1+=y
I
nc;
}
}
Col
orget
Pi
xel
Col
or
(
GLi
ntx,
GLi
nty
){
Col
orcol
or
;
gl
ReadPi
xel
s(
x,
y
,
1,
1,
GL_
RGB,
GL_
FLOAT,
&col
or
)
;
r
et
ur
n
col
or
;
}v
oi
dset
Pi
xel
Col
or
(
GLi
ntx,
GLi
nty
,
Col
or
col
or
){
43
Smar
t
Boy
gl
Col
or
3f
(
col
or
.
r
,
col
or
.
g,
col
or
.
b)
;
gl
Begi
n(
GL_
POI
NTS)
;
44
Smar
t
Boy
gl
Ver
t
ex2i
(
x,
y
)
;
gl
End(
)
;
gl
Fl
ush(
)
;
}v
oi
df
l
oodFi
l
l
(
GLi
ntx,
GLi
nty
,
Col
orol
dCol
or
,
Col
or
newCol
or
){Col
orcol
or
;
col
or=get
Pi
xel
Col
or
(
x,
y
)
;
i
f(
col
or
.
r==ol
dCol
or
.
r&&col
or
.
g==
ol
dCol
or
.
g&&col
or
.
b==ol
dCol
or
.
b){
set
Pi
xel
Col
or
(
x,
y
,
newCol
or
)
;
f
l
oodFi
l
l
(
x+1,
y
,
ol
dCol
or
,
newCol
or
)
;
f
l
oodFi
l
l
(
x,
y+1,
ol
dCol
or
,
newCol
or
)
;
f
l
oodFi
l
l
(
x-1,
y
,
ol
dCol
or
,
newCol
or
)
;
f
l
oodFi
l
l
(
x,
y-1,
ol
dCol
or
,
newCol
or
)
;
}r
et
ur
n;
}
#def
i
neVERTEX_
COUNT6
Poi
ntpoi
nt
s[
VERTEX_
COUNT]={
100,
200,
120,
150,
100,
100,
160,
70,
130,
150,
150,
150}
;
v
oi
ddi
spl
ay
(
v
oi
d){
gl
Cl
ear
(
GL_
COLOR_
BUFFER_
BI
T)
;
gl
Begi
n(
GL_
POI
NTS)
;
Poi
ntst
Poi
nt=
poi
nt
s[
0]
;
f
or(
i
nti
=1;
i
<
VERTEX_
COUNT;
i
++)
{dr
aw_
dda(
st
Poi
nt
,
poi
nt
s[
i
]
)
;
st
Poi
nt=
poi
nt
s[
i
]
;
}
dr
aw_
dda(
st
Poi
nt
,
poi
nt
s[
0]
)
;
gl
End(
)
;
gl
Fl
ush(
)
;
Col
ornewCol
or={
1.
0f
,
1.
0f
,
0.
0f
}
;
Col
orol
dCol
or={
1.
0f
,
1.
0f
,
1.
0f
}
;
f
l
oodFi
l
l
(
101,
101,
ol
dCol
or
,
newCol
or
)
;
}i
ntmai
n(
i
ntar
gc,
char
*
*
ar
gv
){
gl
ut
I
ni
t
(
&ar
gc,
ar
gv
)
;
gl
ut
I
ni
t
Di
spl
ay
Mode(
GLUT_
SI
NGLE|
GLUT_
RGB)
;
gl
ut
I
ni
t
Wi
ndowSi
ze(
640,
480)
;
gl
ut
I
ni
t
Wi
ndowPosi
t
i
on(
600,
200)
;
gl
ut
Cr
eat
eWi
ndow(
"
Fl
oodFi
l
l
4connect
ed"
)
;
i
ni
t
(
)
;
gl
ut
Di
spl
ay
Func(
di
spl
ay
)
;
gl
ut
Mai
nLoop(
)
;
r
et
ur
n0;
}
45
Smar
t
Boy
46
Smar
t
Boy
8–connect
edconcav
e
#i
ncl
ude<cmat
h>
#i
ncl
ude<GL/
gl
ut
.
h>
st
r
uctPoi
nt{
GLi
ntx;
GLi
nty
;
}
;
st
r
uctCol
or{
GLf
l
oatr
;
GLf
l
oatg;
GLf
l
oatb;
}
;
v
oi
d
i
ni
t
(
){
gl
Cl
ear
Col
or
(
1.
0,
1.
0,
1.
0,
0.
0)
;
gl
Col
or
3f
(
0.
0f
,
0.
0f
,
0.
0f
)
;
gl
uOr
t
ho2D(
0.
0,
640.
0,
0.
0,
480.
0)
;
gl
Mat
r
i
xMode(
GL_
PROJECTI
ON)
;
gl
LoadI
dent
i
t
y
(
)
;
gl
Poi
nt
Si
ze(
1.
0f
)
;
}v
oi
ddr
aw_
dda(
Poi
ntp1,
Poi
nt
p2){
GLf
l
oatdx=p2.
x-p1.
x;
GLf
l
oatdy=p2.
y-p1.
y
;
GLf
l
oatx1=p1.
x;
GLf
l
oaty
1=p1.
y
;
GLf
l
oatst
ep=0;
i
f
(
abs(
dx)>abs(
dy
)
){
st
ep=abs(
dx)
;
}el
se{st
ep=
abs(
dy
)
;
}
GLf
l
oatxI
nc=dx/st
ep;
GLf
l
oaty
I
nc=dy/st
ep;
f
or
(
f
l
oati
=1;
i
<=st
ep;
i
++){
gl
Ver
t
ex2i
(
x1,
y
1)
;
x1+=xI
nc;
y
1+=y
I
nc;
}
}
Col
orget
Pi
xel
Col
or
(
GLi
ntx,
GLi
nty
){
Col
orcol
or
;
gl
ReadPi
xel
s(
x,
y
,
1,
1,
GL_
RGB,
GL_
FLOAT,
&col
or
)
;
r
et
ur
n
col
or
;
}v
oi
dset
Pi
xel
Col
or
(
GLi
ntx,
GLi
nty
,
Col
or
col
or
){
gl
Col
or
3f
(
col
or
.
r
,
col
or
.
g,
col
or
.
b)
;
gl
Begi
n(
GL_
POI
NTS)
;
47
Smar
t
Boy
gl
Ver
t
ex2i
(
x,
y
)
;
gl
End(
)
;
48
Smar
t
Boy
gl
Fl
ush(
)
;
}v
oi
df
l
oodFi
l
l
(
GLi
ntx,
GLi
nty
,
Col
orol
dCol
or
,
Col
or
newCol
or
){Col
orcol
or
;
col
or=get
Pi
xel
Col
or
(
x,
y
)
;
i
f(
col
or
.
r==ol
dCol
or
.
r&&col
or
.
g==
ol
dCol
or
.
g&&col
or
.
b==ol
dCol
or
.
b){
set
Pi
xel
Col
or
(
x,
y
,
newCol
or
)
;
f
l
oodFi
l
l
(
x
+1,
y
,
ol
dCol
or
,
newCol
or
)
;
f
l
oodFi
l
l
(
x,
y
+1,
ol
dCol
or
,
newCol
or
)
;
f
l
oodFi
l
l
(
x-1,
y
,
ol
dCol
or
,
newCol
or
)
;
f
l
oodFi
l
l
(
x
,
y-1,
ol
dCol
or
,
newCol
or
)
;
f
l
oodFi
l
l
(
x+1,
y+
1,
ol
dCol
or
,
newCol
or
)
;
f
l
oodFi
l
l
(
x-1,
y
+1,
ol
dCol
or
,
newCol
or
)
;
f
l
oodFi
l
l
(
x-1,
y-1,
ol
dCol
or
,
newCol
or
)
;
f
l
oodFi
l
l
(
x+
1,
y-1,
ol
dCol
or
,
newCol
or
)
;
}r
et
ur
n;
}
#def
i
neVERTEX_
COUNT6
Poi
ntpoi
nt
s[
VERTEX_
COUNT]={
250,
250,
300,
250,
300,
300,
275,
300,
275,
275,
250,
275}
;
v
oi
ddi
spl
ay
(
v
oi
d){
gl
Cl
ear
(
GL_
COLOR_
BUFFER_
BI
T)
;
gl
Begi
n(
GL_
POI
NTS)
;
Poi
ntst
Poi
nt=
poi
nt
s[
0]
;
f
or(
i
nti
=1;
i
<
VERTEX_
COUNT;
i
++)
{dr
aw_
dda(
st
Poi
nt
,
poi
nt
s[
i
]
)
;
st
Poi
nt=
poi
nt
s[
i
]
;
}
dr
aw_
dda(
st
Poi
nt
,
poi
nt
s[
0]
)
;
gl
End(
)
;
gl
Fl
ush(
)
;
Col
ornewCol
or={
1.
0f
,
0.
0f
,
1.
0f
}
;
Col
orol
dCol
or={
1.
0f
,
1.
0f
,
1.
0f
}
;
f
l
oodFi
l
l
(
251,
251,
ol
dCol
or
,
newCol
or
)
;
}i
ntmai
n(
i
ntar
gc,
char
*
*
ar
gv
){
gl
ut
I
ni
t
(
&ar
gc,
ar
gv
)
;
gl
ut
I
ni
t
Di
spl
ay
Mode(
GLUT_
SI
NGLE|
GLUT_
RGB)
;
gl
ut
I
ni
t
Wi
ndowSi
ze(
640,
480)
;
gl
ut
I
ni
t
Wi
ndowPosi
t
i
on(
200,
200)
;
gl
ut
Cr
eat
eWi
ndow(
"
Fl
oodFi
l
l
8connect
ed"
)
;
i
ni
t
(
)
;
gl
ut
Di
spl
ay
Func(
di
spl
ay
)
;
gl
ut
Mai
nLoop(
)
;
r
et
ur
n0;
}
49
Smar
t
Boy
50
Smar
t
Boy
4–connect
edconv
ex
#i
ncl
ude<cmat
h>
#i
ncl
ude<GL/
gl
ut
.
h>
st
r
uctPoi
nt{
GLi
ntx;
GLi
nty
;
}
;
st
r
uctCol
or{
GLf
l
oatr
;
GLf
l
oatg;
GLf
l
oatb;
}
;
v
oi
d
i
ni
t
(
){
gl
Cl
ear
Col
or
(
1.
0,
1.
0,
1.
0,
0.
0)
;
gl
Col
or
3f
(
0.
0f
,
0.
0f
,
0.
0f
)
;
gl
uOr
t
ho2D(
0.
0,
640.
0,
0.
0,
480.
0)
;
gl
Mat
r
i
xMode(
GL_
PROJECTI
ON)
;
gl
LoadI
dent
i
t
y
(
)
;
gl
Poi
nt
Si
ze(
1.
0f
)
;
}v
oi
ddr
aw_
dda(
Poi
ntp1,
Poi
nt
p2){
GLf
l
oatdx=p2.
x-p1.
x;
GLf
l
oatdy=p2.
y-p1.
y
;
GLf
l
oatx1=p1.
x;
GLf
l
oaty
1=p1.
y
;
GLf
l
oatst
ep=0;
i
f
(
abs(
dx)>abs(
dy
)
){
st
ep=abs(
dx)
;
}el
se{st
ep=
abs(
dy
)
;
}
GLf
l
oatxI
nc=dx/st
ep;
GLf
l
oaty
I
nc=dy/st
ep;
f
or
(
f
l
oati
=1;
i
<=st
ep;
i
++){
gl
Ver
t
ex2i
(
x1,
y
1)
;
x1+=xI
nc;
y
1+=y
I
nc;
}
}
Col
orget
Pi
xel
Col
or
(
GLi
ntx,
GLi
nty
){
Col
orcol
or
;
gl
ReadPi
xel
s(
x,
y
,
1,
1,
GL_
RGB,
GL_
FLOAT,
&col
or
)
;
r
et
ur
n
col
or
;
}v
oi
dset
Pi
xel
Col
or
(
GLi
ntx,
GLi
nty
,
Col
or
col
or
){
gl
Col
or
3f
(
col
or
.
r
,
col
or
.
g,
col
or
.
b)
;
gl
Begi
n(
GL_
POI
NTS)
;
51
Smar
t
Boy
gl
Ver
t
ex2i
(
x,
y
)
;
gl
End(
)
;
52
Smar
t
Boy
gl
Fl
ush(
)
;
}v
oi
df
l
oodFi
l
l
(
GLi
ntx,
GLi
nty
,
Col
orol
dCol
or
,
Col
or
newCol
or
){Col
orcol
or
;
col
or=get
Pi
xel
Col
or
(
x,
y
)
;
i
f(
col
or
.
r==ol
dCol
or
.
r&&col
or
.
g==
ol
dCol
or
.
g&&col
or
.
b==ol
dCol
or
.
b){
set
Pi
xel
Col
or
(
x,
y
,
newCol
or
)
;
f
l
oodFi
l
l
(
x+1,
y
,
ol
dCol
or
,
newCol
or
)
;
f
l
oodFi
l
l
(
x,
y+1,
ol
dCol
or
,
newCol
or
)
;
f
l
oodFi
l
l
(
x-1,
y
,
ol
dCol
or
,
newCol
or
)
;
f
l
oodFi
l
l
(
x,
y-1,
ol
dCol
or
,
newCol
or
)
;
}r
et
ur
n;
}
#def
i
neVERTEX_
COUNT3
Poi
ntpoi
nt
s[
VERTEX_
COUNT]={
250,
300,
300,
300,
300,
250,
}
;
v
oi
d
di
spl
ay
(
v
oi
d){
gl
Cl
ear
(
GL_
COLOR_
BUFFER_
BI
T)
;
gl
Begi
n(
GL_
POI
NTS)
;
Poi
ntst
Poi
nt=
poi
nt
s[
0]
;
f
or(
i
nti
=1;
i
<
VERTEX_
COUNT;
i
++)
{dr
aw_
dda(
st
Poi
nt
,
poi
nt
s[
i
]
)
;
st
Poi
nt=
poi
nt
s[
i
]
;
}
dr
aw_
dda(
st
Poi
nt
,
poi
nt
s[
0]
)
;
gl
End(
)
;
gl
Fl
ush(
)
;
Col
ornewCol
or={
1.
0f
,
1.
0f
,
0.
0f
}
;
Col
orol
dCol
or={
1.
0f
,
1.
0f
,
1.
0f
}
;
f
l
oodFi
l
l
(
276,
275,
ol
dCol
or
,
newCol
or
)
;
}i
ntmai
n(
i
ntar
gc,
char
*
*
ar
gv
){
gl
ut
I
ni
t
(
&ar
gc,
ar
gv
)
;
gl
ut
I
ni
t
Di
spl
ay
Mode(
GLUT_
SI
NGLE|
GLUT_
RGB)
;
gl
ut
I
ni
t
Wi
ndowSi
ze(
640,
480)
;
gl
ut
I
ni
t
Wi
ndowPosi
t
i
on(
200,
200)
;
gl
ut
Cr
eat
eWi
ndow(
"
Fl
oodFi
l
l
4connect
ed"
)
;
i
ni
t
(
)
;
gl
ut
Di
spl
ay
Func(
di
spl
ay
)
;
gl
ut
Mai
nLoop(
)
;
r
et
ur
n0;
}
53
Smar
t
Boy
54
Smar
t
Boy
8–connect
edconv
ex
#i
ncl
ude<cmat
h>
#i
ncl
ude<GL/
gl
ut
.
h>
st
r
uctPoi
nt{
GLi
ntx;
GLi
nty
;
}
;
st
r
uctCol
or{
GLf
l
oatr
;
GLf
l
oatg;
GLf
l
oatb;
}
;
v
oi
d
i
ni
t
(
){
gl
Cl
ear
Col
or
(
1.
0,
1.
0,
1.
0,
0.
0)
;
gl
Col
or
3f
(
0.
0f
,
0.
0f
,
0.
0f
)
;
gl
uOr
t
ho2D(
0.
0,
640.
0,
0.
0,
480.
0)
;
gl
Mat
r
i
xMode(
GL_
PROJECTI
ON)
;
gl
LoadI
dent
i
t
y
(
)
;
gl
Poi
nt
Si
ze(
1.
0f
)
;
}v
oi
ddr
aw_
dda(
Poi
ntp1,
Poi
nt
p2){
GLf
l
oatdx=p2.
x-p1.
x;
GLf
l
oatdy=p2.
y-p1.
y
;
GLf
l
oatx1=p1.
x;
GLf
l
oaty
1=p1.
y
;
GLf
l
oatst
ep=0;
i
f
(
abs(
dx)>abs(
dy
)
){
st
ep=abs(
dx)
;
}el
se{st
ep=
abs(
dy
)
;
}
GLf
l
oatxI
nc=dx/st
ep;
GLf
l
oaty
I
nc=dy/st
ep;
f
or
(
f
l
oati
=1;
i
<=st
ep;
i
++){
gl
Ver
t
ex2i
(
x1,
y
1)
;
x1+=xI
nc;
y
1+=y
I
nc;
}
}
Col
orget
Pi
xel
Col
or
(
GLi
ntx,
GLi
nty
){
Col
orcol
or
;
gl
ReadPi
xel
s(
x,
y
,
1,
1,
GL_
RGB,
GL_
FLOAT,
&col
or
)
;
r
et
ur
n
col
or
;
}v
oi
dset
Pi
xel
Col
or
(
GLi
ntx,
GLi
nty
,
Col
or
col
or
){
gl
Col
or
3f
(
col
or
.
r
,
col
or
.
g,
col
or
.
b)
;
gl
Begi
n(
GL_
POI
NTS)
;
55
Smar
t
Boy
gl
Ver
t
ex2i
(
x,
y
)
;
gl
End(
)
;
56
Smar
t
Boy
gl
Fl
ush(
)
;
}v
oi
df
l
oodFi
l
l
(
GLi
ntx,
GLi
nty
,
Col
orol
dCol
or
,
Col
or
newCol
or
){Col
orcol
or
;
col
or=get
Pi
xel
Col
or
(
x,
y
)
;
i
f(
col
or
.
r==ol
dCol
or
.
r&&col
or
.
g==
ol
dCol
or
.
g&&col
or
.
b==ol
dCol
or
.
b){
set
Pi
xel
Col
or
(
x,
y
,
newCol
or
)
;
f
l
oodFi
l
l
(
x
+1,
y
,
ol
dCol
or
,
newCol
or
)
;
f
l
oodFi
l
l
(
x,
y
+1,
ol
dCol
or
,
newCol
or
)
;
f
l
oodFi
l
l
(
x-1,
y
,
ol
dCol
or
,
newCol
or
)
;
f
l
oodFi
l
l
(
x
,
y-1,
ol
dCol
or
,
newCol
or
)
;
f
l
oodFi
l
l
(
x+1,
y+
1,
ol
dCol
or
,
newCol
or
)
;
f
l
oodFi
l
l
(
x+1,
y
-1,
ol
dCol
or
,
newCol
or
)
;
f
l
oodFi
l
l
(
x-1,
y
+1,
ol
dCol
or
,
newCol
or
)
;
f
l
oodFi
l
l
(
x-1,
y-1,
ol
dCol
or
,
newCol
or
)
;
}r
et
ur
n;
}
#def
i
neVERTEX_
COUNT4
Poi
ntpoi
nt
s[
VERTEX_
COUNT]={
250,
250,
300,
250,
300,
220,
250,
220}
;
v
oi
ddi
spl
ay
(
v
oi
d){
gl
Cl
ear
(
GL_
COLOR_
BUFFER_
BI
T)
;
gl
Begi
n(
GL_
POI
NTS)
;
Poi
ntst
Poi
nt=
poi
nt
s[
0]
;
f
or(
i
nti
=1;
i
<
VERTEX_
COUNT;
i
++)
{dr
aw_
dda(
st
Poi
nt
,
poi
nt
s[
i
]
)
;
st
Poi
nt=
poi
nt
s[
i
]
;
}
dr
aw_
dda(
st
Poi
nt
,
poi
nt
s[
0]
)
;
gl
End(
)
;
gl
Fl
ush(
)
;
Col
ornewCol
or={
1.
0f
,
0.
0f
,
1.
0f
}
;
Col
orol
dCol
or={
1.
0f
,
1.
0f
,
1.
0f
}
;
f
l
oodFi
l
l
(
265,
245,
ol
dCol
or
,
newCol
or
)
;
}i
ntmai
n(
i
ntar
gc,
char
*
*
ar
gv
){
gl
ut
I
ni
t
(
&ar
gc,
ar
gv
)
;
gl
ut
I
ni
t
Di
spl
ay
Mode(
GLUT_
SI
NGLE|
GLUT_
RGB)
;
gl
ut
I
ni
t
Wi
ndowSi
ze(
640,
480)
;
gl
ut
I
ni
t
Wi
ndowPosi
t
i
on(
200,
200)
;
gl
ut
Cr
eat
eWi
ndow(
"
Fl
oodFi
l
l
8connect
ed"
)
;
i
ni
t
(
)
;
gl
ut
Di
spl
ay
Func(
di
spl
ay
)
;
gl
ut
Mai
nLoop(
)
;
r
et
ur
n0;
}
57
Smar
t
Boy
58
Smar
t
Boy
Q6:
Wr
i
t
eapr
ogr
am f
ordr
awi
ngt
hef
ol
l
owi
ngsi
mpl
et
wodi
mensi
onal
obj
ect
susi
ng
cer
t
ai
ngr
aphi
cf
unct
i
onsav
ai
l
abl
ef
ordr
awi
ngl
i
nes,
r
ect
angl
es,
pol
y
gons,
el
l
i
pses&
ci
r
cl
eswhi
chgener
at
espi
xel
act
i
v
at
i
onl
i
st
.
(
i
) House
#i
ncl
ude<GL/
gl
ut
.
h>
v
oi
di
ni
t
(
v
oi
d){
gl
Cl
ear
Col
or
(
1.
0,
1.
0,
1.
0,
0.
0)
;
gl
Mat
r
i
xMode(
GL_
PROJECTI
ON)
;
gl
uOr
t
ho2D(
0.
0,
200.
0,
0.
0,
150.
0)
;
}v
oi
dbui
l
dHouse(
v
oi
d)
{gl
Cl
ear
(
GL_
COLOR_
BUFFER_
BI
T)
;
gl
Col
or
3f
(
1.
0,
1.
0,
1.
0)
;
gl
Begi
n(
GL_
POLYGON)
;
gl
Col
or
3f
(
0.
5,
1.
0,
1.
0)
;
gl
Ver
t
ex2i
(
50,
0)
;
gl
Col
or
3f
(
0.
5,
1.
0,
1.
0)
;
gl
Ver
t
ex2i
(
50,
100)
;
gl
Col
or
3f
(
0.
5,
1.
0,
1.
0)
;
gl
Ver
t
ex2i
(
150,
100)
;
gl
Col
or
3f
(
0.
5,
1.
0,
1.
0)
;
gl
Ver
t
ex2i
(
150,
0)
;
gl
End(
)
;
gl
Begi
n(
GL_
POLYGON)
;
gl
Col
or
3f
(
0.
0,
0.
0,
0.
0)
;
gl
Ver
t
ex2i
(
60,
80)
;
gl
Ver
t
ex2i
(
80,
80)
;
gl
Ver
t
ex2i
(
80,
65)
;
gl
Ver
t
ex2i
(
60,
65)
;
gl
End(
)
;
gl
Begi
n(
GL_
POLYGON)
;
gl
Col
or
3f
(
0.
0,
0.
0,
0.
0)
;
gl
Ver
t
ex2i
(
120,
80)
;
gl
Ver
t
ex2i
(
140,
80)
;
gl
Ver
t
ex2i
(
140,
65)
;
gl
Ver
t
ex2i
(
120,
65)
;
gl
End(
)
;
gl
Begi
n(
GL_
POLYGON)
;
gl
Col
or
3f
(
1.
0,
0.
0,
0.
0)
;
gl
Ver
t
ex2i
(
50,
100)
;
gl
Col
or
3f
(
0.
5,
0.
0,
0.
3)
;
gl
Ver
t
ex2i
(
150,
100)
;
gl
Col
or
3f
(
1.
0,
0.
0,
0.
0)
;
gl
Ver
t
ex2i
(
100,
130)
;
gl
End(
)
;
gl
Begi
n(
GL_
POLYGON)
;
59
Smar
t
Boy
gl
Col
or
3f
(
0.
0,
0.
0,
0.
0)
;
gl
Ver
t
ex2i
(
80,
0)
;
60
Smar
t
Boy
gl
Ver
t
ex2i
(
80,
50)
;
gl
Ver
t
ex2i
(
120,
50)
;
gl
Ver
t
ex2i
(
120,
0)
;
gl
End(
)
;
gl
Fl
ush(
)
;
}i
ntmai
n(
i
ntar
gc,
char
*
*
ar
gv
){
gl
ut
I
ni
t
(
&ar
gc,
ar
gv
)
;
gl
ut
I
ni
t
Di
spl
ay
Mode(
GLUT_
SI
NGLE|
GLUT_
RGB)
;
gl
ut
I
ni
t
Wi
ndowPosi
t
i
on(
50,
100)
;
gl
ut
I
ni
t
Wi
ndowSi
ze(
500,
500)
;
gl
ut
Cr
eat
eWi
ndow(
"
House"
)
;
i
ni
t
(
)
;
gl
ut
Di
spl
ay
Func(
bui
l
dHouse)
;
gl
ut
Mai
nLoop(
)
;
r
et
ur
n0;
}
(
i
i
)Car
61
Smar
t
Boy
#i
ncl
ude<GL/
gl
ut
.
h>
#i
ncl
ude<mat
h.
h>
v
oi
di
ni
t
(
){
gl
Cl
ear
Col
or
(
1,
1,
1,
1)
;
gl
Mat
r
i
xMode(
GL_
PROJECTI
ON)
;
gl
uOr
t
ho2D(
0.
0,
800,
0.
0,
600)
;
}v
oi
dwheel
(
i
ntx,
i
nt
y
){
f
l
oatt
h;
gl
Begi
n(
GL_
POLYGON)
;
gl
Col
or
3f
(
0,
0,
0)
;
f
or(
i
nti
=0;
i
<360;
i
++){
t
h=i
*(
3.
1416/180)
;
gl
Ver
t
ex2f
(
x+30
*cos(
t
h)
,
y+30*si
n(
t
h)
)
;
}gl
End(
)
;
}v
oi
d
smal
l
_
wheel
(
i
ntx,
i
nty
){
f
l
oatt
h;
gl
Begi
n(
GL_
POLYGON)
;
gl
Col
or
3f
(
1,
1,
1)
;
f
or(
i
nti
=0;
i
<360;
i
++){
t
h=i
*(
3.
1416/180)
;
gl
Ver
t
ex2f
(
x+8
*cos(
t
h)
,
y+8*si
n(
t
h)
)
;
}gl
End(
)
;
}v
oi
d
car
(
){
gl
Cl
ear
(
GL_
COLOR_
BUFFER_
BI
T)
;
gl
Col
or
3f
(
0.
3,
0.
5,
0.
8)
;
gl
Begi
n(
GL_
POLYGON)
;
gl
Ver
t
ex2f
(
200,
300)
;
gl
Ver
t
ex2f
(
200,
400)
;
gl
Ver
t
ex2f
(
600,
400)
;
gl
Ver
t
ex2f
(
600,
300)
;
gl
End(
)
;
gl
Col
or
3f
(
0.
7,
0.
2,
0.
3)
;
gl
Begi
n(
GL_
POLYGON)
;
gl
Ver
t
ex2f
(
250,
400)
;
gl
Ver
t
ex2f
(
330,
500)
;
gl
Ver
t
ex2f
(
470,
500)
;
gl
Ver
t
ex2f
(
550,
400)
;
gl
End(
)
;
wheel
(
330,
280)
;
wheel
(
470,
280)
;
smal
l
_
wheel
(
330,
280)
;
smal
l
_
wheel
(
470,
280)
;
gl
Col
or
3f
(
0,
0,
0)
;
62
Smar
t
Boy
gl
Begi
n(
GL_
LI
NES)
;
gl
Ver
t
ex2f
(
0,
250)
;
gl
Ver
t
ex2f
(
800,
250)
;
gl
End(
)
;
gl
Col
or
3f
(
0,
0,
0)
;
gl
Begi
n(
GL_
LI
NES)
;
gl
Ver
t
ex2f
(
350,
500)
;
gl
Ver
t
ex2f
(
350,
400)
;
gl
End(
)
;
gl
Col
or
3f
(
0,
0,
0)
;
gl
Begi
n(
GL_
LI
NES)
;
gl
Ver
t
ex2f
(
450,
500)
;
gl
Ver
t
ex2f
(
450,
400)
;
gl
End(
)
;
gl
Fl
ush(
)
;
}i
ntmai
n(
i
ntar
gc,
char
*
*
ar
gv
){
gl
ut
I
ni
t
(
&ar
gc,
ar
gv
)
;
gl
ut
I
ni
t
Di
spl
ay
Mode(
GLUT_
SI
NGLE|
GLUT_
RGB)
;
gl
ut
I
ni
t
Wi
ndowPosi
t
i
on(
100,
100)
;
gl
ut
I
ni
t
Wi
ndowSi
ze(
800,
600)
;
gl
ut
Cr
eat
eWi
ndow(
"
Car
"
)
;
i
ni
t
(
)
;
gl
ut
Di
spl
ay
Func(
car
)
;
gl
ut
Mai
nLoop(
)
;
}
63
Smar
t
Boy
(
i
i
i
)Fi
sh
#i
ncl
ude<GL/
gl
ut
.
h>#i
ncl
ude
<mat
h.
h>v
oi
ddr
aw(
i
ntx,
i
nty
,
i
nt
xc,
i
nty
c){
gl
Ver
t
ex2f
(
xc+x,
y
c+y
)
;
gl
Ver
t
ex2f
(
xc+x,
y
c-y
)
;
gl
Ver
t
ex2f
(
xc-x,
y
c-y
)
;
gl
Ver
t
ex2f
(
xc-x,
y
c+y
)
;
gl
Ver
t
ex2f
(
xc+y
,
y
c+x)
;
gl
Ver
t
ex2f
(
xc-y
,
y
c+x)
;
gl
Ver
t
ex2f
(
xc-y
,
y
c-x)
;
gl
Ver
t
ex2f
(
xc+y
,
y
c-x)
;
}
v
oi
dci
r
cl
e(
i
ntR,
i
ntxc,
i
nty
c){
gl
Begi
n(
GL_
POLYGON)
;
i
ntx=0,
y=R;
i
ntP=3
-2*R;
whi
l
e(
y>=x){
dr
aw(
x,
y
,
xc,
y
c)
;
i
f(
P<0){
P+=4*x+6;
}el
se{
P+=4*(
x-y
)+10;
y
;
}x++;
}gl
End(
)
;
}v
oi
dt
r
ai
ngl
e(
i
ntx1,
i
ntx2,
i
ntx3,
i
nty
1,
i
nty
2,
i
nty
3){
gl
Begi
n(
GL_
POLYGON)
;
gl
Ver
t
ex2f
(
x1,
y
1)
;
gl
Ver
t
ex2f
(
x2,
y
2)
;
gl
Ver
t
ex2f
(
x3,
y
3)
;
gl
End(
)
;
}
v
oi
ddr
aw1(
i
ntx,
i
nty
,
i
ntxc,
i
nty
c)
{
gl
Ver
t
ex2f
(
xc+x,
y
c+y
)
;
gl
Ver
t
ex2f
(
xc+x,
y
c-y
)
;
gl
Ver
t
ex2f
(
xc-x,
y
c-y
)
;
gl
Ver
t
ex2f
(
xc-x,
y
c+y
)
;
}v
oi
del
l
i
pse(
i
ntr
x,
i
ntr
y
,
i
ntxc,
i
nt
y
c){
gl
Begi
n(
GL_
POLYGON)
;
i
ntx=0,
y=
r
y
;
i
ntr
y
_
sq=r
y*r
y
;
i
ntr
x_
sq=r
x*
r
x;
i
ntP=r
y
_
sq-r
x_
sq*r
y+0.
25*
r
x_
sq;
whi
l
e(
r
y
_
sq*x<r
x_
sq*y
){
64
Smar
t
Boy
65
Smar
t
Boy
dr
aw1(
x
,
y
,
xc,
y
c)
;
i
f(
P<0){
P+=r
y
_
sq*(
2*x+3)
;
}el
se{
P+=r
y
_
sq*(
2*x+3)+r
x_
sq*(
2*y+2)
;
y
;
}
x++;
}
P=r
y
_
sq*(
x+f
l
oat
(
1)/2)*(
x+f
l
oat
(
1)/2)+
doubl
e(
r
x_
sq)*(
y-1)*(
y-1)-doubl
e(
r
x_
sq)*r
y
_
sq;
whi
l
e(
y>=0){
dr
aw1(
x
,
y
,
xc,
y
c)
;
i
f(
P>=0){
P+=r
x
_
sq*(
2*y+3)
;
}el
se{
P+=r
y
_
sq*(
2*x+2)+r
x_
sq*(
2*y+3)
;
x++;
}
y
;
}gl
End(
)
;
}
v
oi
ddi
spl
ay
(
)
{
gl
Cl
ear
(
GL_
COLOR_
BUFFER_
BI
T)
;
gl
Col
or
3f
(
0.
8,
0.
5,
0.
0)
;
el
l
i
pse(
80,
50,
300,
100)
;
t
r
ai
ngl
e(
240,
170,
170,
100,
150,
50)
;
gl
Col
or
3f
(
0.
0,
0.
0,
0.
0)
;
ci
r
cl
e(
5,
360,
120)
;
gl
Fl
ush(
)
;
}v
oi
d
my
i
ni
t
(
){
gl
Cl
ear
Col
or
(
0.
5,
0.
6,
1.
0,
1.
0)
;
gl
Col
or
3f
(
1.
0,
0.
0,
0.
0)
;
gl
Poi
nt
Si
ze(
5.
0)
;
gl
Mat
r
i
xMode(
GL_
PROJECTI
ON)
;
gl
LoadI
dent
i
t
y
(
)
;
gl
uOr
t
ho2D(
0.
0,
699.
0,
0.
0,
499.
0)
;
}i
ntmai
n(
i
ntar
gc,
char
*
*
ar
gv
){
gl
ut
I
ni
t
(
&ar
gc,
ar
gv
)
;
gl
ut
I
ni
t
Di
spl
ay
Mode(
GLUT_
SI
NGLE|
GLUT_
RGB)
;
gl
ut
I
ni
t
Wi
ndowSi
ze(
700,
500)
;
gl
ut
I
ni
t
Wi
ndowPosi
t
i
on(
0,
0)
;
gl
ut
Cr
eat
eWi
ndow(
"
Poi
nt
s"
)
;
gl
ut
Di
spl
ay
Func(
di
spl
ay
)
;
66
Smar
t
Boy
my
i
ni
t
(
)
;
gl
ut
Mai
nLoop(
)
;
67
Smar
t
Boy
}
68
Smar
t
Boy
(
i
v
)Man
#i
ncl
ude<GL/
gl
ut
.
h>
#i
ncl
ude<mat
h.
h>
v
oi
di
ni
t
(
){
gl
Cl
ear
Col
or
(
1,
1,
1,
1)
;
gl
Mat
r
i
xMode(
GL_
PROJECTI
ON)
;
gl
uOr
t
ho2D(
0.
0,
800,
0.
0,
600)
;
}v
oi
dci
r
cl
e(
i
ntx,
i
nt
y
){
f
l
oatt
h;
gl
Col
or
3f
(
1,
204/255.
0,
104/255.
0)
;
gl
Begi
n(
GL_
POLYGON)
;
f
or(
i
nti
=0;
i
<360;
i
++){
t
h=i
*(
3.
1416/180)
;
gl
Ver
t
ex2f
(
x+20
*cos(
t
h)
,
y+20*si
n(
t
h)
)
;
}gl
End(
)
;
}
v
oi
dman(
)
{
gl
Cl
ear
(
GL_
COLOR_
BUFFER_
BI
T)
;
gl
Col
or
3f
(
1,
0,
0)
;
gl
Begi
n(
GL_
POLYGON)
;
gl
Ver
t
ex2f
(
100,
100)
;
gl
Ver
t
ex2f
(
150,
100)
;
gl
Ver
t
ex2f
(
150,
180)
;
gl
Ver
t
ex2f
(
100,
180)
;
gl
End(
)
;
gl
Col
or
3f
(
51.
0/255,
153/255.
0,
1)
;
gl
Begi
n(
GL_
POLYGON)
;
gl
Ver
t
ex2f
(
108,
100)
;
gl
Ver
t
ex2f
(
108,
30)
;
gl
Ver
t
ex2f
(
124,
30)
;
gl
Ver
t
ex2f
(
124,
100)
;
gl
End(
)
;
gl
Col
or
3f
(
0,
0,
0)
;
gl
Begi
n(
GL_
POLYGON)
;
gl
Ver
t
ex2f
(
124,
100)
;
gl
Ver
t
ex2f
(
124,
30)
;
gl
Ver
t
ex2f
(
126,
30)
;
gl
Ver
t
ex2f
(
126,
100)
;
gl
End(
)
;
gl
Col
or
3f
(
51.
0/255,
153/255.
0,
1)
;
gl
Begi
n(
GL_
POLYGON)
;
gl
Ver
t
ex2f
(
100,
180)
;
gl
Ver
t
ex2f
(
92,
180)
;
gl
Ver
t
ex2f
(
92,
140)
;
gl
Ver
t
ex2f
(
100,
140)
;
gl
End(
)
;
69
Smar
t
Boy
gl
Col
or
3f
(
1,
204/255.
0,
104/255.
0)
;
70
Smar
t
Boy
gl
Begi
n(
GL_
POLYGON)
;
gl
Ver
t
ex2f
(
92,
140)
;
gl
Ver
t
ex2f
(
92,
80)
;
gl
Ver
t
ex2f
(
100,
80)
;
gl
Ver
t
ex2f
(
100,
140)
;
gl
End(
)
;
gl
Col
or
3f
(
51.
0/255,
153/255.
0,
1)
;
gl
Begi
n(
GL_
POLYGON)
;
gl
Ver
t
ex2f
(
150,
180)
;
gl
Ver
t
ex2f
(
158,
180)
;
gl
Ver
t
ex2f
(
158,
140)
;
gl
Ver
t
ex2f
(
150,
140)
;
gl
End(
)
;
gl
Col
or
3f
(
1,
204/255.
0,
104/
255.
0)
;
gl
Begi
n(
GL_
POLYGON)
;
gl
Ver
t
ex2f
(
158,
140)
;
gl
Ver
t
ex2f
(
158,
80)
;
gl
Ver
t
ex2f
(
150,
80)
;
gl
Ver
t
ex2f
(
150,
140)
;
gl
End(
)
;
gl
Col
or
3f
(
51.
0/255,
153/255.
0,
1)
;
gl
Begi
n(
GL_
POLYGON)
;
gl
Ver
t
ex2f
(
126,
100)
;
gl
Ver
t
ex2f
(
126,
30)
;
gl
Ver
t
ex2f
(
142,
30)
;
gl
Ver
t
ex2f
(
142,
100)
;
gl
End(
)
;
gl
Col
or
3f
(
1,
204/255.
0,
104/
255.
0)
;
gl
Begi
n(
GL_
POLYGON)
;
gl
Ver
t
ex2f
(
118,
180)
;
gl
Ver
t
ex2f
(
118,
195)
;
gl
Ver
t
ex2f
(
132,
195)
;
gl
Ver
t
ex2f
(
132,
180)
;
gl
End(
)
;
ci
r
cl
e(
125,
213)
;
gl
Col
or
3f
(
0,
0,
0)
;
gl
Begi
n(
GL_
LI
NES)
;
gl
Li
neWi
dt
h(
5)
;
gl
Ver
t
ex2f
(
120,
205)
;
gl
Ver
t
ex2f
(
130,
205)
;
gl
End(
)
;
gl
Col
or
3f
(
0,
0,
0)
;
gl
Begi
n(
GL_
POLYGON)
;
gl
Ver
t
ex2f
(
132,
222)
;
gl
Ver
t
ex2f
(
135,
222)
;
gl
Ver
t
ex2f
(
135,
219)
;
gl
Ver
t
ex2f
(
132,
219)
;
gl
End(
)
;
gl
Col
or
3f
(
0,
0,
71
Smar
t
Boy
0)
;
72
Smar
t
Boy
gl
Begi
n(
GL_
POLYGON)
;
gl
Ver
t
ex2f
(
118,
222)
;
gl
Ver
t
ex2f
(
115,
222)
;
gl
Ver
t
ex2f
(
115,
219)
;
gl
Ver
t
ex2f
(
118,
219)
;
gl
End(
)
;
gl
Col
or
3f
(
51.
0/255,
153/255.
0,
1)
;
gl
Begi
n(
GL_
POLYGON)
;
gl
Ver
t
ex2f
(
124,
30)
;
gl
Ver
t
ex2f
(
124,
20)
;
gl
Ver
t
ex2f
(
95,
20)
;
gl
Ver
t
ex2f
(
95,
24)
;
gl
Ver
t
ex2f
(
108,
28)
;
gl
Ver
t
ex2f
(
108,
30)
;
gl
End(
)
;
gl
Col
or
3f
(
51.
0/255,
153/255.
0,
1)
;
gl
Begi
n(
GL_
POLYGON)
;
gl
Ver
t
ex2f
(
126,
30)
;
gl
Ver
t
ex2f
(
126,
20)
;
gl
Ver
t
ex2f
(
155,
20)
;
gl
Ver
t
ex2f
(
155,
24)
;
gl
Ver
t
ex2f
(
142,
28)
;
gl
Ver
t
ex2f
(
142,
30)
;
gl
End(
)
;
gl
Fl
ush(
)
;
}i
ntmai
n(
i
ntar
gc,
char
*
*
ar
gv
){
gl
ut
I
ni
t
(
&ar
gc,
ar
gv
)
;
gl
ut
I
ni
t
Di
spl
ay
Mode(
GLUT_
SI
NGLE|
GLUT_
RGB)
;
gl
ut
I
ni
t
Wi
ndowPosi
t
i
on(
100,
100)
;
gl
ut
I
ni
t
Wi
ndowSi
ze(
800,
600)
;
gl
ut
Cr
eat
eWi
ndow(
"
Man"
)
;
i
ni
t
(
)
;
gl
ut
Di
spl
ay
Func(
man)
;
gl
ut
Mai
nLoop(
)
;
}
73
Smar
t
Boy
74
Smar
t
Boy
Q7:
Wr
i
t
eapr
ogr
am t
oper
f
or
m basi
c2Dt
r
ansf
or
mat
i
on(
t
r
ansl
at
i
on,
r
ot
at
i
onand
scal
i
ng)aboutor
i
gi
nandaboutaf
i
xedpoi
ntwi
t
houtusi
ngdi
r
ectOpenGl
f
unct
i
onsf
or
t
het
r
ansf
or
mat
i
ons.
Tr
ansl
at
i
on:
#i
ncl
ude<GL/
gl
ut
.
h>
#i
ncl
ude<st
dl
i
b.
h>
#i
ncl
ude<mat
h.
h>
v
oi
di
ni
t
(
){
gl
Cl
ear
Col
or
(
1,
1,
1,
1.
0)
;
gl
Poi
nt
Si
ze(
2.
0)
;
gl
Mat
r
i
xMode(
GL_
PROJECTI
ON)
;
gl
LoadI
dent
i
t
y
(
)
;
gl
uOr
t
ho2D(
500,
500.
0,
500.
0,
500.
0)
;
}v
oi
dmakeTr
i
angl
e(
f
l
oatx1,
f
l
oaty
1,
f
l
oatx2,
f
l
oaty
2,
f
l
oatx3,
f
l
oaty
3){
gl
Cl
ear
(
GL_
COLOR_
BUFFER_
BI
T)
;
gl
Col
or
3f
(
1.
0,
0.
0,
1.
0)
;
gl
Begi
n(
GL_
POI
NTS)
;
f
l
oatm1=
f
l
oat
(
y
2-y
1)/(
x2-x1)
;
f
l
oatm2
=f
l
oat
(
y
3-y
2)/(
x3-x2)
;
f
l
oat
m3=f
l
oat
(
y
1-y
3)/(
x1-x3)
;
f
l
oatc1=y
1-m1*
x1;
f
l
oatc2=y
2-m2
*x2;
f
l
oatc3=y
3m3*x3;
i
nti
=0;
whi
l
e(
x1+i
<=x2){
gl
Ver
t
ex2f
(
x1+i
,
m1*(
x1+i
)+
c1)
;
i
++;
}i
=0;
whi
l
e(
x2+i
<=x3){
gl
Ver
t
ex2f
(
x2+i
,
m2*(
x2+i
)+
c2)
;
i
++;
}i
=0;
whi
l
e(
x3-i
>=x1){
gl
Ver
t
ex2f
(
x3-i
,
m3*(
x3-i
)+c3)
;
i
++;
}
}v
oi
dt
r
ansl
at
e(
f
l
oatx1,
f
l
oaty
1,
f
l
oatx2,
f
l
oaty
2,
f
l
oatx3,
f
l
oaty
3){
gl
Cl
ear
(
GL_
COLOR_
BUFFER_
BI
T)
;
x1=x1+150;
x2=x2+150;
x3=x3+150;
y
1=y
1+150;
y
2=y
2+150;
y
3=y
3+150;
75
Smar
t
Boy
makeTr
i
angl
e(
x1,
y
1,
x2,
y
2,
x3,
y
3)
;
gl
End(
)
;
gl
Col
or
3f
(
0,
0.
0,
0.
0)
;
gl
Begi
n(
GL_
LI
NES)
;
gl
Ver
t
ex2f
(
500,
0)
;
gl
Ver
t
ex2f
(
500,
0)
;
gl
Begi
n(
GL_
LI
NES)
;
gl
Ver
t
ex2f
(
0,
500)
;
gl
Ver
t
ex2f
(
0,
500)
;
gl
End(
)
;
gl
Fl
ush(
)
;
}v
oi
d
di
spl
ay
(
){
makeTr
i
angl
e(
0,
0,
60.
0,
140.
0,
110.
0,
0.
0)
;
t
r
ansl
at
e(
0,
0,
60.
0,
140.
0,
110.
0,
0.
0)
;
}i
ntmai
n(
i
ntar
gc,
char
*
*
ar
gv
){
gl
ut
I
ni
t
(
&ar
gc,
ar
gv
)
;
gl
ut
I
ni
t
Di
spl
ay
Mode(
GLUT_
SI
NGLE|
GLUT_
RGB)
;
gl
ut
I
ni
t
Wi
ndowPosi
t
i
on(
100,
100)
;
gl
ut
I
ni
t
Wi
ndowSi
ze(
800,
600)
;
gl
ut
Cr
eat
eWi
ndow(
"
Tr
ansl
at
i
on"
)
;
i
ni
t
(
)
;
gl
ut
Di
spl
ay
Func(
di
spl
ay
)
;
gl
ut
Mai
nLoop(
)
;
}
Rot
at
i
on:
76
Smar
t
Boy
#i
ncl
ude<GL/
gl
ut
.
h>
#i
ncl
ude<st
dl
i
b.
h>
#i
ncl
ude<mat
h.
h>
#i
ncl
ude<i
ost
r
eam>
usi
ngnamespacest
d;
v
oi
di
ni
t
(
){
gl
Cl
ear
Col
or
(
1,
1,
1,
1.
0)
;
gl
Poi
nt
Si
ze(
2.
0)
;
gl
Mat
r
i
xMode(
GL_
PROJECTI
ON)
;
gl
LoadI
dent
i
t
y
(
)
;
gl
uOr
t
ho2D(
500,
500.
0,
500.
0,
500.
0)
;
}v
oi
dmakeTr
i
angl
e(
f
l
oatx1,
f
l
oaty
1,
f
l
oatx2,
f
l
oaty
2,
f
l
oatx3,
f
l
oaty
3){
gl
Cl
ear
(
GL_
COLOR_
BUFFER_
BI
T)
;
gl
Col
or
3f
(
1.
0,
0.
0,
1.
0)
;
gl
Begi
n(
GL_
POI
NTS)
;
f
l
oatm1=
f
l
oat
(
y
2-y
1)/(
x2-x1)
;
f
l
oatm2
=f
l
oat
(
y
3-y
2)/(
x3-x2)
;
f
l
oat
m3=f
l
oat
(
y
1-y
3)/(
x1-x3)
;
f
l
oatc1=y
1-m1*
x1;
f
l
oatc2=y
2-m2
*x2;
f
l
oatc3=y
3m3*x3;
i
nti
=0;
whi
l
e(
x1+i
<=x2){
gl
Ver
t
ex2f
(
x1+i
,
m1*(
x1+i
)+
c1)
;
i
++;
}i
=0;
whi
l
e(
x2+i
<=x3){
gl
Ver
t
ex2f
(
x2+i
,
m2*(
x2+i
)+
c2)
;
i
++;
}i
=0;
whi
l
e(
x3-i
>=x1){
gl
Ver
t
ex2f
(
x3-i
,
m3*(
x3-i
)+c3)
;
i
++;
}
}
v
oi
dt
r
ansl
at
e(
f
l
oatx1,
f
l
oaty
1,
f
l
oatx2,
f
l
oaty
2,
f
l
oatx3,
f
l
oaty
3,
f
l
oatxp,
f
l
oaty
p){
gl
Cl
ear
(
GL_
COLOR_
BUFFER_
BI
T)
;
x1=x1+xp;
x2=x2+xp;
x3=x3+xp;
y
1=y
1+y
p;
y
2=y
2+y
p;
y
3=y
3+y
p;
makeTr
i
angl
e(
x1,
y
1,
x2,
y
2,
x3,
y
3)
;
77
Smar
t
Boy
}v
oi
dr
ot
at
i
on(
f
l
oatx1,
f
l
oaty
1,
f
l
oatx2,
f
l
oaty
2,
f
l
oatx3,
f
l
oat
y
3){
t
r
ansl
at
e(
x1,
y
1,
x2,
y
2,
x3,
y
3,
x1,
y
1)
;
f
l
oatt
h=
10*3.
14159/180;
f
l
oatnew_
x1=(
x1-x1)*
cos(
t
h)-(
y
1-y
1)*si
n(
t
h)
;
f
l
oatnew_
y
1=(
x1-x1)
*si
n(
t
h)+(
y
1-y
1)*cos(
t
h)
;
f
l
oatnew_
x2=(
x2x1)*cos(
t
h)-(
y
2-y
1)*si
n(
t
h)
;
f
l
oatnew_
y
2=
(
x2-x1)*si
n(
t
h)+(
y
2-y
1)*cos(
t
h)
;
f
l
oat
new_
x3=(
x3-x1)*cos(
t
h)-(
y
3-y
1)*si
n(
t
h)
;
f
l
oatnew_
y
3=(
x3-x1)*si
n(
t
h)+(
y
3-y
1)*
cos(
t
h)
;
cout<<new_
x1<<""<<new_
y
1<<""<<new_
x2<<""<<new_
y
2<<""
<<new_
x3<<""<<new_
y
3;
makeTr
i
angl
e(
new_
x1,
new_
y
1,
new_
x2,
new_
y
2,
new_
x3,
new_
y
3)
;
t
r
ansl
at
e(
new_
x1,
new_
y
1,
new_
x2,
new_
y
2,
new_
x3,
new_
y
3,
150,
150)
;
gl
End(
)
;
gl
Col
or
3f
(
0,
0.
0,
0.
0)
;
gl
Begi
n(
GL_
LI
NES)
;
gl
Ver
t
ex2f
(
500,
0)
;
gl
Ver
t
ex2f
(
500,
0)
;
gl
Begi
n(
GL_
LI
NES)
;
gl
Ver
t
ex2f
(
0,
500)
;
gl
Ver
t
ex2f
(
0,
500)
;
gl
End(
)
;
gl
Fl
ush(
)
;
}v
oi
d
di
spl
ay
(
){
makeTr
i
angl
e(
150,
150,
180.
0,
220.
0,
250.
0,
100.
0)
;
r
ot
at
i
on(
150,
150,
180.
0,
220.
0,
250.
0,
100.
0)
;
}i
ntmai
n(
i
ntar
gc,
char
*
*
ar
gv
){
gl
ut
I
ni
t
(
&ar
gc,
ar
gv
)
;
gl
ut
I
ni
t
Di
spl
ay
Mode(
GLUT_
SI
NGLE|
GLUT_
RGB)
;
gl
ut
I
ni
t
Wi
ndowPosi
t
i
on(
100,
100)
;
gl
ut
I
ni
t
Wi
ndowSi
ze(
800,
600)
;
gl
ut
Cr
eat
eWi
ndow(
"
Rot
at
i
on"
)
;
i
ni
t
(
)
;
gl
ut
Di
spl
ay
Func(
di
spl
ay
)
;
gl
ut
Mai
nLoop(
)
;
}
78
Smar
t
Boy
79
Smar
t
Boy
Scal
i
ng:
#i
ncl
ude<GL/
gl
ut
.
h>
#i
ncl
ude<st
dl
i
b.
h>
#i
ncl
ude<mat
h.
h>
v
oi
di
ni
t
(
){
gl
Cl
ear
Col
or
(
1,
1,
1,
1.
0)
;
gl
Poi
nt
Si
ze(
2.
0)
;
gl
Mat
r
i
xMode(
GL_
PROJECTI
ON)
;
gl
LoadI
dent
i
t
y
(
)
;
gl
uOr
t
ho2D(
500,
500.
0,
500.
0,
500.
0)
;
}v
oi
dmakeTr
i
angl
e(
f
l
oatx1,
f
l
oaty
1,
f
l
oatx2,
f
l
oaty
2,
f
l
oatx3,
f
l
oaty
3){
gl
Cl
ear
(
GL_
COLOR_
BUFFER_
BI
T)
;
gl
Col
or
3f
(
1.
0,
0.
0,
1.
0)
;
gl
Begi
n(
GL_
POI
NTS)
;
f
l
oatm1=
f
l
oat
(
y
2-y
1)/(
x2-x1)
;
f
l
oatm2
=f
l
oat
(
y
3-y
2)/(
x3-x2)
;
f
l
oat
m3=f
l
oat
(
y
1-y
3)/(
x1-x3)
;
f
l
oatc1=y
1-m1*
x1;
f
l
oatc2=y
2-m2
*x2;
f
l
oatc3=y
3m3*x3;
i
nti
=0;
whi
l
e(
x1+i
<=x2){
gl
Ver
t
ex2f
(
x1+i
,
m1*(
x1+i
)+
c1)
;
i
++;
}i
=0;
whi
l
e(
x2+i
<=x3){
gl
Ver
t
ex2f
(
x2+i
,
m2*(
x2+i
)+
c2)
;
i
++;
}i
=0;
whi
l
e(
x3-i
>=x1){
gl
Ver
t
ex2f
(
x3-i
,
m3*(
x3-i
)+c3)
;
i
++;
}
}
v
oi
dt
r
ansl
at
e(
f
l
oatx1,
f
l
oaty
1,
f
l
oatx2,
f
l
oaty
2,
f
l
oatx3,
f
l
oaty
3,
f
l
oatxp,
f
l
oaty
p){
gl
Cl
ear
(
GL_
COLOR_
BUFFER_
BI
T)
;
x1=x1+xp;
x2=x2+xp;
x3=x3+xp;
y
1=y
1+y
p;
y
2=y
2+y
p;
y
3=y
3+y
p;
makeTr
i
angl
e(
x1,
y
1,
x2,
y
2,
x3,
y
3)
;
}
v
oi
dscal
i
ng(
f
l
oatx1,
f
l
oaty
1,
f
l
oatx2,
f
l
oaty
2,
f
l
oatx3,
f
l
oaty
3){
80
Smar
t
Boy
t
r
ansl
at
e(
x1,
y
1,
x2,
y
2,
x3,
y
3,
x1,
y
1)
;
f
l
oatnew_
x1=(
x1-x1)*
0.
60;
f
l
oatnew_
y
1=(
y
1-y
1)*0.
5;
f
l
oatnew_
x2=(
x2-x1)*0.
60;
f
l
oatnew_
y
2=(
y
2-y
1)*0.
5;
f
l
oatnew_
x3=(
x3-x1)*0.
60;
f
l
oat
new_
y
3=(
y
3-y
1)*0.
5;
makeTr
i
angl
e(
new_
x1,
new_
y
1,
new_
x2,
new_
y
2,
new_
x3,
new_
y
3)
;
t
r
ansl
at
e(
new_
x1,
new_
y
1,
new_
x2,
new_
y
2,
new_
x3,
new_
y
3,
150,
150)
;
gl
End(
)
;
gl
Col
or
3f
(
0,
0.
0,
0.
0)
;
gl
Begi
n(
GL_
LI
NES)
;
gl
Ver
t
ex2f
(
500,
0)
;
gl
Ver
t
ex2f
(
500,
0)
;
gl
Begi
n(
GL_
LI
NES)
;
gl
Ver
t
ex2f
(
0,
500)
;
gl
Ver
t
ex2f
(
0,
500)
;
gl
End(
)
;
gl
Fl
ush(
)
;
}v
oi
d
di
spl
ay
(
){
makeTr
i
angl
e(
150,
150,
180.
0,
220.
0,
250.
0,
100.
0)
;
scal
i
ng(
150,
150,
180.
0,
220.
0,
250.
0,
100.
0)
;
}i
ntmai
n(
i
ntar
gc,
char
*
*
ar
gv
){
gl
ut
I
ni
t
(
&ar
gc,
ar
gv
)
;
gl
ut
I
ni
t
Di
spl
ay
Mode(
GLUT_
SI
NGLE|
GLUT_
RGB)
;
gl
ut
I
ni
t
Wi
ndowPosi
t
i
on(
100,
100)
;
gl
ut
I
ni
t
Wi
ndowSi
ze(
800,
600)
;
gl
ut
Cr
eat
eWi
ndow(
"
Scal
i
ng"
)
;
i
ni
t
(
)
;
gl
ut
Di
spl
ay
Func(
di
spl
ay
)
;
gl
ut
Mai
nLoop(
)
;
}
81
Smar
t
Boy
82
Smar
t
Boy
Q8:
Wr
i
t
eapr
ogr
am t
oper
f
or
m:
(
i
)Ref
l
ect
i
onaboutxaxi
s,
y
axi
sandal
i
ney=x+2
Aboutxandyaxi
s:
#i
ncl
ude<GL/
gl
ut
.
h>
#i
ncl
ude<st
dl
i
b.
h>
#i
ncl
ude<mat
h.
h>
v
oi
di
ni
t
(
){
gl
Cl
ear
Col
or
(
1,
1,
1,
1.
0)
;
gl
Poi
nt
Si
ze(
2.
0)
;
gl
Mat
r
i
xMode(
GL_
PROJECTI
ON)
;
gl
LoadI
dent
i
t
y
(
)
;
gl
uOr
t
ho2D(
500,
500.
0,
500.
0,
500.
0)
;
}v
oi
dmakeTr
i
angl
e(
f
l
oatx1,
f
l
oaty
1,
f
l
oatx2,
f
l
oaty
2,
f
l
oatx3,
f
l
oaty
3){
gl
Cl
ear
(
GL_
COLOR_
BUFFER_
BI
T)
;
gl
Col
or
3f
(
1.
0,
0.
0,
0.
0)
;
gl
Begi
n(
GL_
POI
NTS)
;
f
l
oatm1=
f
l
oat
(
y
2-y
1)/(
x2-x1)
;
f
l
oatm2
=f
l
oat
(
y
3-y
2)/(
x3-x2)
;
f
l
oat
m3=f
l
oat
(
y
1-y
3)/(
x1-x3)
;
f
l
oatc1=y
1-m1*
x1;
f
l
oatc2=y
2-m2
*x2;
f
l
oatc3=y
3m3*x3;
i
nti
=0;
whi
l
e(
x1+i
<=x2){
gl
Ver
t
ex2f
(
x1+i
,
m1*(
x1+i
)+
c1)
;
i
++;
}i
=0;
whi
l
e(
x2+i
<=x3){
gl
Ver
t
ex2f
(
x2+i
,
m2*(
x2+i
)+
c2)
;
i
++;
}i
=0;
whi
l
e(
x3-i
>=x1){
gl
Ver
t
ex2f
(
x3-i
,
m3*(
x3-i
)+c3)
;
i
++;
}
}v
oi
d
di
spl
ay
(
){
makeTr
i
angl
e(
100,
100,
175.
0,
175.
0,
250.
0,
100.
0)
;
makeTr
i
angl
e(
250,
100,
175.
0,
175.
0,
100.
0,
100.
0)
;
makeTr
i
angl
e(
100,
100,
175.
0,
175.
0,
250.
0,
100.
0)
;
gl
End(
)
;
gl
Col
or
3f
(
0,
0.
0,
0.
0)
;
gl
Begi
n(
GL_
LI
NES)
;
gl
Ver
t
ex2f
(
500,
0)
;
83
Smar
t
Boy
gl
Ver
t
ex2f
(
500,
0)
;
gl
Begi
n(
GL_
LI
NES)
;
gl
Ver
t
ex2f
(
0,
500)
;
gl
Ver
t
ex2f
(
0,
500)
;
gl
End(
)
;
gl
Fl
ush(
)
;
}i
ntmai
n(
i
ntar
gc,
char
*
*
ar
gv
){
gl
ut
I
ni
t
(
&ar
gc,
ar
gv
)
;
gl
ut
I
ni
t
Di
spl
ay
Mode(
GLUT_
SI
NGLE|
GLUT_
RGB)
;
gl
ut
I
ni
t
Wi
ndowPosi
t
i
on(
100,
100)
;
gl
ut
I
ni
t
Wi
ndowSi
ze(
800,
600)
;
gl
ut
Cr
eat
eWi
ndow(
"
Ref
l
ect
i
on"
)
;
i
ni
t
(
)
;
gl
ut
Di
spl
ay
Func(
di
spl
ay
)
;
gl
ut
Mai
nLoop(
)
;
}
Aboutl
i
ney=x+2:
84
Smar
t
Boy
#i
ncl
ude<GL/
gl
ut
.
h>
#i
ncl
ude<st
dl
i
b.
h>
#i
ncl
ude<mat
h.
h>
usi
ngnamespacest
d;
v
oi
di
ni
t
(
){
gl
Cl
ear
Col
or
(
1,
1,
1,
1.
0)
;
gl
Poi
nt
Si
ze(
2.
0)
;
gl
Mat
r
i
xMode(
GL_
PROJECTI
ON)
;
gl
LoadI
dent
i
t
y
(
)
;
gl
uOr
t
ho2D(
500,
500.
0,
500.
0,
500.
0)
;
}v
oi
dmakeTr
i
angl
e(
f
l
oatx1,
f
l
oaty
1,
f
l
oatx2,
f
l
oaty
2,
f
l
oatx3,
f
l
oaty
3){
gl
Cl
ear
(
GL_
COLOR_
BUFFER_
BI
T)
;
gl
Col
or
3f
(
1.
0,
0.
0,
0.
0)
;
gl
Begi
n(
GL_
POI
NTS)
;
f
l
oatm1=
f
l
oat
(
y
2-y
1)/(
x2-x1)
;
f
l
oatm2
=f
l
oat
(
y
3-y
2)/(
x3-x2)
;
f
l
oat
m3=f
l
oat
(
y
1-y
3)/(
x1-x3)
;
f
l
oatc1=y
1-m1*
x1;
f
l
oatc2=y
2-m2
*x2;
f
l
oatc3=y
3m3*x3;
i
nti
=0;
whi
l
e(
x1+i
<=x2){
gl
Ver
t
ex2f
(
x1+i
,
m1*(
x1+i
)+
c1)
;
i
++;
}i
=0;
whi
l
e(
x2+i
<=x3){
gl
Ver
t
ex2f
(
x2+i
,
m2*(
x2+i
)+
c2)
;
i
++;
}i
=0;
whi
l
e(
x3-i
>=x1){
gl
Ver
t
ex2f
(
x3-i
,
m3*(
x3-i
)+c3)
;
i
++;
}
}v
oi
dr
ef
l
ect
i
on(
f
l
oatx1,
f
l
oaty
1,
f
l
oatx2,
f
l
oaty
2,
f
l
oatx3,
f
l
oat
y
3){
f
l
oatnew_
x1=y
1-2;
f
l
oatnew_
y
1=x1+2;
f
l
oatnew_
x2=y
22;
f
l
oatnew_
y
2=x2+2;
f
l
oatnew_
x3=y
3-2;
f
l
oatnew_
y
3=
x3+2;
makeTr
i
angl
e(
new_
x1,
new_
y
1,
new_
x3,
new_
y
3,
new_
x2,
new_
y
2)
;
}v
oi
d
di
spl
ay
(
){
makeTr
i
angl
e(
100,
200,
40,
42,
300,
100)
;
85
Smar
t
Boy
r
ef
l
ect
i
on(
100,
200,
40,
42,
300,
100)
;
gl
End(
)
;
gl
Col
or
3f
(
0,
0.
0,
0.
0)
;
gl
Begi
n(
GL_
LI
NES)
;
gl
Ver
t
ex2f
(
500,
0)
;
gl
Ver
t
ex2f
(
500,
0)
;
gl
Begi
n(
GL_
LI
NES)
;
gl
Ver
t
ex2f
(
0,
500)
;
gl
Ver
t
ex2f
(
0,
500)
;
gl
Begi
n(
GL_
LI
NES)
;
gl
Ver
t
ex2f
(
500,
498)
;
gl
Ver
t
ex2f
(
498,
500)
;
gl
End(
)
;
gl
Fl
ush(
)
;
}i
ntmai
n(
i
ntar
gc,
char
*
*
ar
gv
){
gl
ut
I
ni
t
(
&ar
gc,
ar
gv
)
;
gl
ut
I
ni
t
Di
spl
ay
Mode(
GLUT_
SI
NGLE|
GLUT_
RGB)
;
gl
ut
I
ni
t
Wi
ndowPosi
t
i
on(
100,
100)
;
gl
ut
I
ni
t
Wi
ndowSi
ze(
800,
600)
;
gl
ut
Cr
eat
eWi
ndow(
"
Ref
l
ect
i
on"
)
;
i
ni
t
(
)
;
gl
ut
Di
spl
ay
Func(
di
spl
ay
)
;
gl
ut
Mai
nLoop(
)
;
}
(
i
i
)Shearaboutxaxi
sandy
axi
s
86
Smar
t
Boy
#i
ncl
ude<GL/
gl
ut
.
h>
#i
ncl
ude<st
dl
i
b.
h>
#i
ncl
ude<mat
h.
h>
usi
ngnamespacest
d;
v
oi
di
ni
t
(
){
gl
Cl
ear
Col
or
(
1,
1,
1,
1.
0)
;
gl
Poi
nt
Si
ze(
2.
0)
;
gl
Mat
r
i
xMode(
GL_
PROJECTI
ON)
;
gl
LoadI
dent
i
t
y
(
)
;
gl
uOr
t
ho2D(
500,
500.
0,
500.
0,
500.
0)
;
}v
oi
dmakeTr
i
angl
e(
f
l
oatx1,
f
l
oaty
1,
f
l
oatx2,
f
l
oaty
2,
f
l
oatx3,
f
l
oaty
3){
gl
Cl
ear
(
GL_
COLOR_
BUFFER_
BI
T)
;
gl
Col
or
3f
(
1.
0,
0.
0,
0.
0)
;
gl
Begi
n(
GL_
POI
NTS)
;
f
l
oatm1=
f
l
oat
(
y
2-y
1)/(
x2-x1)
;
f
l
oatm2
=f
l
oat
(
y
3-y
2)/(
x3-x2)
;
f
l
oat
m3=f
l
oat
(
y
1-y
3)/(
x1-x3)
;
f
l
oatc1=y
1-m1*
x1;
f
l
oatc2=y
2-m2
*x2;
f
l
oatc3=y
3m3*x3;
i
nti
=0;
whi
l
e(
x1+i
<=x2){
gl
Ver
t
ex2f
(
x1+i
,
m1*(
x1+i
)+
c1)
;
i
++;
}i
=0;
whi
l
e(
x2+i
<=x3){
gl
Ver
t
ex2f
(
x2+i
,
m2*(
x2+i
)+
c2)
;
i
++;
}i
=0;
whi
l
e(
x3-i
>=x1){
gl
Ver
t
ex2f
(
x3-i
,
m3*(
x3-i
)+c3)
;
i
++;
}
}v
oi
dshear
_
x(
f
l
oatx1,
f
l
oaty
1,
f
l
oatx2,
f
l
oaty
2,
f
l
oatx3,
f
l
oat
y
3){
gl
Cl
ear
(
GL_
COLOR_
BUFFER_
BI
T)
;
x1=x1+0.
5*y
1;
x2=x2+0.
5*y
2;
x3=x3+0.
5*y
3;
makeTr
i
angl
e(
x1,
y
1,
x2,
y
2,
x3,
y
3)
;
}v
oi
dshear
_
y
(
f
l
oatx1,
f
l
oaty
1,
f
l
oatx2,
f
l
oaty
2,
f
l
oatx3,
f
l
oat
y
3){
gl
Cl
ear
(
GL_
COLOR_
BUFFER_
BI
T)
;
y
1=y
1+0.
5*x1;
y
2=y
2+0.
5*x2;
87
Smar
t
Boy
y
3=y
3+0.
5*x3;
makeTr
i
angl
e(
x1,
y
1,
x2,
y
2,
x3,
y
3)
;
}v
oi
d
di
spl
ay
(
){
makeTr
i
angl
e(
0,
0,
75.
0,
75.
0,
150.
0,
0)
;
shear
_
x(
0,
0,
75.
0,
75.
0,
150.
0,
0)
;
makeTr
i
angl
e(
150,
0,
75.
0,
75.
0,
0,
0)
;
shear
_
y
(
150,
0,
75.
0,
75.
0,
0,
0)
;
gl
End(
)
;
gl
Col
or
3f
(
0,
0.
0,
0.
0)
;
gl
Begi
n(
GL_
LI
NES)
;
gl
Ver
t
ex2f
(
500,
0)
;
gl
Ver
t
ex2f
(
500,
0)
;
gl
Begi
n(
GL_
LI
NES)
;
gl
Ver
t
ex2f
(
0,
500)
;
gl
Ver
t
ex2f
(
0,
500)
;
gl
Begi
n(
GL_
LI
NES)
;
gl
End(
)
;
gl
Fl
ush(
)
;
}i
ntmai
n(
i
ntar
gc,
char
*
*
ar
gv
){
gl
ut
I
ni
t
(
&ar
gc,
ar
gv
)
;
gl
ut
I
ni
t
Di
spl
ay
Mode(
GLUT_
SI
NGLE|
GLUT_
RGB)
;
gl
ut
I
ni
t
Wi
ndowPosi
t
i
on(
100,
100)
;
gl
ut
I
ni
t
Wi
ndowSi
ze(
800,
600)
;
gl
ut
Cr
eat
eWi
ndow(
"
Shear
"
)
;
i
ni
t
(
)
;
gl
ut
Di
spl
ay
Func(
di
spl
ay
)
;
gl
ut
Mai
nLoop(
)
;
}
88
Smar
t
Boy
Q9:
Wr
i
t
eapr
ogr
am f
orper
f
or
mi
ngt
hebasi
ct
r
ansf
or
mat
i
onssuchast
r
ansl
at
i
on,
Scal
i
ng,
Rot
at
i
onf
oragi
v
en3Dobj
ect
.
#i
ncl
ude<GL/
gl
ut
.
h>
#i
ncl
ude<st
dl
i
b.
h>
#i
ncl
ude<mat
h.
h>usi
ng
namespacest
d;
t
y
pedef
f
l
oatMat
r
i
x4[
4]
[
4]
;
Mat
r
i
x4t
heMat
r
i
x;
st
at
i
cGLf
l
oati
nput
[
8]
[
3]={
{
40,
40,
50}
,
{
90,
40,
50}
,
{
90,
90,
50}
,
{
40,
90,
50}
,
{
30,
30,
0}
,{
80,
30,
0}
,
{
80,
80,
0}
,{
30,
80,
0}
}
;
f
l
oatout
put
[
8]
[
3]
;
v
oi
di
ni
t
(
){
gl
Cl
ear
Col
or
(
1.
0,
1.
0,
1.
0,
1.
0)
;
gl
Or
t
ho(
454.
0,
454.
0,
250.
0,
250.
0,
250.
0,
250.
0)
;
gl
Enabl
e(
GL_
DEPTH_
TEST)
;
}
v
oi
dset
I
dent
i
t
y
M(
Mat
r
i
x4m){
f
or(
i
nti
=0;
i
<4;
i
++)
f
or(
i
ntj
=0;
j
<4;
j
++)m[
i
]
[
j
]=(
i
==j
)
;
}v
oi
d
Axes(
v
oi
d){
gl
Col
or
3f
(
0.
0,
0.
0,
0.
0)
;
gl
Begi
n(
GL_
LI
NES)
;
gl
Ver
t
ex2s(
1000,
0)
;
gl
Ver
t
ex2s(
1000,
0)
;
gl
End(
)
;
gl
Begi
n(
GL_
LI
NES)
;
gl
Ver
t
ex2s(
0,
1000)
;
gl
Ver
t
ex2s(
0,
1000)
;
gl
End(
)
;
}
v
oi
ddr
aw(
f
l
oata[
8]
[
3]
){
gl
Begi
n(
GL_
QUADS)
;
gl
Col
or
3f
(
0,
1,
0)
;
gl
Ver
t
ex3f
v
(
a[
0]
)
;
gl
Ver
t
ex3f
v
(
a[
1]
)
;
gl
Ver
t
ex3f
v
(
a[
2]
)
;
gl
Ver
t
ex3f
v
(
a[
3]
)
;
gl
Col
or
3f
(
0,
1,
0)
;
gl
Ver
t
ex3f
v
(
a[
0]
)
;
gl
Ver
t
ex3f
v
(
a[
1]
)
;
gl
Ver
t
ex3f
v
(
a[
5]
)
;
gl
Ver
t
ex3f
v
(
a[
4]
)
;
gl
Col
or
3f
(
0,
1,
0)
;
gl
Ver
t
ex3f
v
(
a[
0]
)
;
gl
Ver
t
ex3f
v
(
a[
4]
)
;
gl
Ver
t
ex3f
v
(
a[
7]
)
;
89
Smar
t
Boy
90
Smar
t
Boy
gl
Ver
t
ex3f
v
(
a[
3]
)
;
gl
Col
or
3f
(
0,
1,
0)
;
gl
Ver
t
ex3f
v
(
a[
1]
)
;
gl
Ver
t
ex3f
v
(
a[
2]
)
;
gl
Ver
t
ex3f
v
(
a[
6]
)
;
gl
Ver
t
ex3f
v
(
a[
5]
)
;
gl
Col
or
3f
(
0,
1,
0)
;
gl
Ver
t
ex3f
v
(
a[
2]
)
;
gl
Ver
t
ex3f
v
(
a[
3]
)
;
gl
Ver
t
ex3f
v
(
a[
7]
)
;
gl
Ver
t
ex3f
v
(
a[
6]
)
;
gl
Col
or
3f
(
0,
1,
0)
;
gl
Ver
t
ex3f
v
(
a[
4]
)
;
gl
Ver
t
ex3f
v
(
a[
5]
)
;
gl
Ver
t
ex3f
v
(
a[
6]
)
;
gl
Ver
t
ex3f
v
(
a[
7]
)
;
gl
End(
)
;
gl
Col
or
3f
(
0,
0,
0)
;
gl
Begi
n(
GL_
LI
NE_
LOOP)
;
gl
Ver
t
ex3f
v
(
a[
0]
)
;
gl
Ver
t
ex3f
v
(
a[
1]
)
;
gl
Ver
t
ex3f
v
(
a[
1]
)
;
gl
Ver
t
ex3f
v
(
a[
2]
)
;
gl
Ver
t
ex3f
v
(
a[
2]
)
;
gl
Ver
t
ex3f
v
(
a[
3]
)
;
gl
End(
)
;
gl
Col
or
3f
(
0,
0,
0)
;
gl
Begi
n(
GL_
LI
NE_
STRI
P)
;
gl
Ver
t
ex3f
v
(
a[
0]
)
;
gl
Ver
t
ex3f
v
(
a[
1]
)
;
gl
Ver
t
ex3f
v
(
a[
5]
)
;
gl
Ver
t
ex3f
v
(
a[
4]
)
;
gl
Ver
t
ex3f
v
(
a[
0]
)
;
gl
End(
)
;
gl
Col
or
3f
(
0,
0,
0)
;
gl
Begi
n(
GL_
LI
NE_
STRI
P)
;
gl
Ver
t
ex3f
v
(
a[
0]
)
;
gl
Ver
t
ex3f
v
(
a[
4]
)
;
gl
Ver
t
ex3f
v
(
a[
7]
)
;
gl
Ver
t
ex3f
v
(
a[
3]
)
;
gl
Ver
t
ex3f
v
(
a[
0]
)
;
gl
End(
)
;
gl
Col
or
3f
(
0,
0,
0)
;
gl
Begi
n(
GL_
LI
NE_
STRI
P)
;
gl
Ver
t
ex3f
v
(
a[
1]
)
;
gl
Ver
t
ex3f
v
(
a[
2]
)
;
gl
Ver
t
ex3f
v
(
a[
6]
)
;
gl
Ver
t
ex3f
v
(
a[
5]
)
;
gl
Ver
t
ex3f
v
(
a[
1]
)
;
91
Smar
t
Boy
92
Smar
t
Boy
gl
End(
)
;
gl
Col
or
3f
(
0,
0,
0)
;
gl
Begi
n(
GL_
LI
NE_
STRI
P)
;
gl
Ver
t
ex3f
v
(
a[
2]
)
;
gl
Ver
t
ex3f
v
(
a[
3]
)
;
gl
Ver
t
ex3f
v
(
a[
7]
)
;
gl
Ver
t
ex3f
v
(
a[
6]
)
;
gl
Ver
t
ex3f
v
(
a[
2]
)
;
gl
End(
)
;
gl
Col
or
3f
(
0,
0,
0)
;
gl
Begi
n(
GL_
LI
NE_
STRI
P)
;
gl
Ver
t
ex3f
v
(
a[
4]
)
;
gl
Ver
t
ex3f
v
(
a[
5]
)
;
gl
Ver
t
ex3f
v
(
a[
6]
)
;
gl
Ver
t
ex3f
v
(
a[
7]
)
;
gl
Ver
t
ex3f
v
(
a[
4]
)
;
gl
End(
)
;
}
v
oi
dRot
at
eX(
f
l
oatangl
e)/
/Par
al
l
elt
ox
{angl
e=angl
e*3.
142/
180;
t
heMat
r
i
x[
1]
[
1]=
cos(
angl
e)
;
t
heMat
r
i
x[
1]
[
2]
=si
n(
angl
e)
;
t
heMat
r
i
x[
2]
[
1]=
si
n(
angl
e)
;
t
heMat
r
i
x[
2]
[
2]
=cos(
angl
e)
;
}v
oi
dscal
e(
i
ntsx,
i
ntsy
,
i
nt
sz){
t
heMat
r
i
x[
0]
[
0]=sx;
t
heMat
r
i
x[
1]
[
1]=sy
;
t
heMat
r
i
x[
2]
[
2]=sz;
}v
oi
d
mul
t
i
pl
y
M(
){
f
or(
i
nti
=0;
i
<8;
i
++){
f
or(
i
ntj
=0;
j
<3;
j
++){
f
or(
i
ntk=0;
k<3;
k++){
out
put
[
i
]
[
j
]=out
put
[
i
]
[
j
]+i
nput
[
i
]
[
k]*t
heMat
r
i
x[
k]
[
j
]
;
}
}
}
}
v
oi
dt
r
ans(
i
ntt
x,
i
ntt
y
,
i
ntt
z)
{f
or(
i
nti
=0;
i
<8;
i
++){
out
put
[
i
]
[
0]=i
nput
[
i
]
[
0]+t
x;
out
put
[
i
]
[
1]=i
nput
[
i
]
[
1]+t
y
;
out
put
[
i
]
[
2]=i
nput
[
i
]
[
2]+t
z;
}
}v
oi
d
di
spl
ay
(
){
gl
Cl
ear
(
GL_
COLOR_
BUFFER_
BI
T|
GL_
DEPTH_
BUFFER_
BI
T)
;
93
Smar
t
Boy
Axes(
)
;
gl
Col
or
3f
(
1.
0,
0.
0,
0.
0)
;
dr
aw(
i
nput
)
;
t
r
ans(
25,
25,
25)
;
scal
e(
1.
75,
1.
75,
1.
75)
;
mul
t
i
pl
y
M(
)
;
dr
aw(
out
put
)
;
t
r
ans(
200,
0,
0)
;
Rot
at
eX(
50)
;
mul
t
i
pl
y
M(
)
;
dr
aw(
out
put
)
;
gl
Fl
ush(
)
;
}i
ntmai
n(
i
ntar
gc,
char
*
*
ar
gv
){
gl
ut
I
ni
t
(
&ar
gc,
ar
gv
)
;
gl
ut
I
ni
t
Di
spl
ay
Mode(
GLUT_
SI
NGLE|
GLUT_
RGB|
GLUT_
DEPTH)
;
gl
ut
I
ni
t
Wi
ndowSi
ze(
1000,
600)
;
gl
ut
I
ni
t
Wi
ndowPosi
t
i
on(
0,
0)
;
gl
ut
Cr
eat
eWi
ndow(
"
3DTr
ansf
or
mat
i
ons"
)
;
i
ni
t
(
)
;
gl
ut
Di
spl
ay
Func(
di
spl
ay
)
;
gl
ut
Mai
nLoop(
)
;
}
Q10:
Wr
i
t
eapr
ogr
am t
ocl
i
pal
i
neusi
ngLi
angBar
skyAl
gor
i
t
hm andCohen
Sut
her
l
and
Li
angBar
skyAl
gor
i
t
hm
94
Smar
t
Boy
#i
ncl
ude<GL/
gl
ut
.
h>
#i
ncl
ude<st
dl
i
b.
h>
doubl
ey
_
max=100,
y
_
mi
n=50,
x_
max=100,
x_
mi
n=50; /
/Ol
dv
i
ewpor
t
doubl
eny
_
max=300,
ny
_
mi
n=200,
nx_
max=300,
nx_
mi
n=200;
/
/New
Vi
ewPor
tdoubl
et
1=0.
0,
t
2=1.
0;
doubl
eX1=10;
doubl
eY1=20;
doubl
eX2=
120;
doubl
eY2=80;
v
oi
di
ni
t
(
){
gl
LoadI
dent
i
t
y
(
)
;
gl
Cl
ear
Col
or
(
1.
0,
1.
0,
1.
0,
1.
0)
;
gl
Mat
r
i
xMode(
GL_
PROJECTI
ON)
;
gl
uOr
t
ho2D(
0,
500,
0,
500)
;
gl
Mat
r
i
xMode(
GL_
MODELVI
EW)
;
}
v
oi
ddr
aw_
l
i
neAndPor
t
(
doubl
ex1,
doubl
ey
1,
doubl
ex2,
doubl
ey
2,
doubl
ey
_
max,
doubl
ey
_
mi
n,
doubl
ex_
max,
doubl
ex_
mi
n){
gl
Col
or
3d(
1,
0,
0)
;
gl
Begi
n(
GL_
LI
NE_
LOOP)
;
gl
Ver
t
ex2d(
x_
mi
n,
y
_
mi
n)
;
gl
Ver
t
ex2d(
x_
max,
y
_
mi
n)
;
gl
Ver
t
ex2d(
x_
max,
y
_
max)
;
gl
Ver
t
ex2d(
x_
mi
n,
y
_
max)
;
gl
End(
)
;
gl
Col
or
3d(
0,
0,
0)
;
gl
Begi
n(
GL_
LI
NES)
;
gl
Ver
t
ex2d(
x1,
y
1)
;
gl
Ver
t
ex2d(
x2,
y
2)
;
gl
End(
)
;
}
bool
cl
i
pt
est
(
doubl
ep,
doubl
e
q){
doubl
et=q/p;
i
f(
p==0&&q<0)/
/Li
nei
spar
al
l
elt
o
v
i
ewpor
tandout
si
de
{r
et
ur
n
f
al
se;
}el
sei
f(
p<0){i
f(
t>
t
1)t
1=t
;
i
f(
t>t
2)
r
et
ur
nf
al
se;
}el
sei
f(
p>0){i
f(
t<
t
2)t
2=t
;
i
f(
t<t
1)
r
et
ur
nf
al
se;
}
r
et
ur
nt
r
ue;
}
v
oi
dl
i
angBar
sky
(
doubl
ex1,
doubl
ey
1,
doubl
ex2,
doubl
ey
2){
95
Smar
t
Boy
doubl
edx=x2-x1;
doubl
edy=y
2-y
1;
i
f(
cl
i
pt
est
(
dx,
x1-x_
mi
n)&&cl
i
pt
est
(
dx,
x_
max-x1)&&cl
i
pt
est
(
dy
,
y
1-y
_
mi
n)&&cl
i
pt
est
(
dy
,
y
_
max-y
1)
){
i
f(
t
2<1){
x2=x1+t
2*dx;
y
2=y
1+t
2*dy
;
}i
f(
t
1>
0){
x1=x1+t
1*dx;
y
1=y
1+t
1*dy
;
}
/
/Scal
i
ngt
onewVi
ewpor
t
doubl
escal
e_
x=(
nx_
max-nx_
mi
n)/(
x_
max-x_
mi
n)
;
doubl
escal
e_
y=(
ny
_
max-ny
_
mi
n)/(
y
_
max-y
_
mi
n)
;
/
/Newcoor
di
nat
esoft
hepoi
nt
s
/
/Poi
nt1
doubl
enx1=nx_
mi
n+(
x1-x_
mi
n)*scal
e_
x;
doubl
eny
1=ny
_
mi
n+(
y
1-y
_
mi
n)*scal
e_
y
;
/
/Poi
nt2
doubl
enx2=nx_
mi
n+(
x2-x_
mi
n)*scal
e_
x;
doubl
eny
2=ny
_
mi
n+
(
y
2-y
_
mi
n)*scal
e_
y
;
dr
aw_
l
i
neAndPor
t
(
nx1,
ny
1,
nx2,
ny
2,
ny
_
max,
ny
_
mi
n,
nx_
max,
nx_
mi
n)
;
}
}v
oi
d
di
spl
ay
(
){
gl
Cl
ear
(
GL_
COLOR_
BUFFER_
BI
T)
;dr
aw_
l
i
neAndPor
t
(
X1,Y1,
X2,Y2,y
_
max,y
_
mi
n,x
_
max,x_
mi
n)
;l
i
angBar
sky
(
X1,Y1,X2,
Y2)
;
gl
Fl
ush(
)
;
}i
ntmai
n(
i
ntar
gc,
char
*
*
ar
gv
){
gl
ut
I
ni
t
(
&ar
gc,
ar
gv
)
;
gl
ut
I
ni
t
Di
spl
ay
Mode(
GLUT_
SI
NGLE|
GLUT_
RGB)
;
gl
ut
I
ni
t
Wi
ndowPosi
t
i
on(
0,
0)
;
gl
ut
I
ni
t
Wi
ndowSi
ze(
500,
500)
;
gl
ut
Cr
eat
eWi
ndow(
"
Li
angBar
sky
"
)
;
gl
ut
Di
spl
ay
Func(
di
spl
ay
)
;
i
ni
t
(
)
;
gl
ut
Mai
nLoop(
)
;
r
et
ur
n0;
}
96
Smar
t
Boy
97
Smar
t
Boy
CohenSut
her
l
and
#i
ncl
ude<GL/
gl
ut
.
h>
#i
ncl
ude<st
dl
i
b.
h>
doubl
ey
_
max=100,
y
_
mi
n=50,
x_
max=100,
x_
mi
n=50; /
/Ol
dv
i
ewpor
t
doubl
eny
_
max=300,
ny
_
mi
n=200,
nx_
max=300,
nx_
mi
n=200;
/
/New
Vi
ewPor
ti
ntTOP=8,
BOTTOM =4,
RI
GHT=2,
LEFT=1;
doubl
eX1=10;
doubl
eY1=20;
doubl
eX2=120;
doubl
eY2=80;
v
oi
di
ni
t
(
){
gl
LoadI
dent
i
t
y
(
)
;
gl
Cl
ear
Col
or
(
1.
0,
1.
0,
1.
0,
1.
0)
;
gl
Mat
r
i
xMode(
GL_
PROJECTI
ON)
;
gl
uOr
t
ho2D(
0,
500,
0,
500)
;
gl
Mat
r
i
xMode(
GL_
MODELVI
EW)
;
}
v
oi
ddr
aw_
l
i
neAndPor
t
(
doubl
ex1,
doubl
ey
1,
doubl
ex2,
doubl
ey
2,
doubl
ey
_
max,
doubl
ey
_
mi
n,
doubl
ex_
max,
doubl
ex_
mi
n){
gl
Col
or
3d(
1,
0,
0)
;
gl
Begi
n(
GL_
LI
NE_
LOOP)
;
gl
Ver
t
ex2d(
x_
mi
n,
y
_
mi
n)
;
gl
Ver
t
ex2d(
x_
max,
y
_
mi
n)
;
gl
Ver
t
ex2d(
x_
max,
y
_
max)
;
gl
Ver
t
ex2d(
x_
mi
n,
y
_
max)
;
gl
End(
)
;
gl
Col
or
3d(
0,
0,
0)
;
gl
Begi
n(
GL_
LI
NES)
;
gl
Ver
t
ex2d(
x1,
y
1)
;
gl
Ver
t
ex2d(
x2,
y
2)
;
gl
End(
)
;
}
i
ntout
code(
doubl
ex,
doubl
e
y
){
i
ntout
code=0;
i
f(
y>y
_
max)
out
code|
=TOP;
el
sei
f(
y<y
_
mi
n)
out
code|
=BOTTOM;
i
f(
x>x_
max)
out
code|
=RI
GHT;
el
sei
f(
x<x_
mi
n)
out
code|
=LEFT;
r
et
ur
nout
code;
}v
oi
dcohenSut
her
l
and(
doubl
ex1,
doubl
ey
1,
doubl
ex2,
doubl
ey
2){
i
ntout
code1=out
code(
x1,
y
1)
;
i
ntout
code2=out
code(
x2,
y
2)
;
i
ntout
codeOut
;
bool
accept=f
al
se,
done=f
al
se;
98
Smar
t
Boy
99
Smar
t
Boy
do{
i
f(
(
out
code1|
out
code2)==0)/
/l
i
nei
scompl
et
el
yi
nsi
de
{accept=
t
r
ue;
done=
t
r
ue;
}el
sei
f(
(
out
code1&out
code2)!
=0)/
/l
i
nei
scompl
et
el
yout
si
de
{done=
t
r
ue;
}el
se{out
codeOut=(
out
code1!
=0)?out
code1
:
out
code2;
doubl
ex,
y
;
doubl
esl
ope=(
y
2-y
1)
/(
x2-x1)
;
i
f(
out
codeOut&TOP){y=y
_
max;
x=x1+(
y-y
1)/sl
ope;
}el
sei
f(
out
codeOut&BOTTOM)
{y=y
_
mi
n;
x=x1+(
y-y
1)/sl
ope;
}el
sei
f(
out
codeOut&RI
GHT)
{x=x_
max;
y=y
1+(
x-x1)*sl
ope;
}el
se{x=
x_
mi
n;
y=y
1+(
x-x1)*sl
ope;
}i
f(
out
codeOut==
out
code1){
x1=x;
y
1=y
;
out
code1=out
code(
x1,
y
1)
;
}el
se
{x2=x;
y
2=y
;
out
code2=out
code(
x2,
y
2)
;
}
}
}whi
l
e(
!
done)
;
i
f(
accept
){
doubl
escal
e_
x=(
nx_
max-nx_
mi
n)/(
x_
max-x_
mi
n)
;
doubl
e
scal
e_
y=(
ny
_
max-ny
_
mi
n)/(
y
_
max-y
_
mi
n)
;
doubl
enx1=nx_
mi
n
+(
x1-x_
mi
n)*scal
e_
x;
doubl
eny
1=ny
_
mi
n+(
y
1-y
_
mi
n)*scal
e_
y
;
doubl
enx2=nx_
mi
n+(
x2-x_
mi
n)*scal
e_
x;
doubl
eny
2=ny
_
mi
n+
(
y
2-y
_
mi
n)*scal
e_
y
;
dr
aw_
l
i
neAndPor
t
(
nx1,
ny
1,
nx2,
ny
2,
ny
_
max,
ny
_
mi
n,
nx_
max,
nx_
mi
n)
;
}
}v
oi
d
di
spl
ay
(
){
gl
Cl
ear
(
GL_
COLOR_
BUFFER_
BI
T)
;
dr
aw_
l
i
neAndPor
t
(
X1,
Y1,
X2,
Y2,
y
_
max,
y
_
mi
n,
x_
max,
x_
mi
n)
;
100
Smar
t
Boy
cohenSut
her
l
and(
X1,
Y1,
X2,
Y2)
;
gl
Fl
ush(
)
;
}i
ntmai
n(
i
ntar
gc,
char
*
*
ar
gv
){
gl
ut
I
ni
t
(
&ar
gc,
ar
gv
)
;
gl
ut
I
ni
t
Di
spl
ay
Mode(
GLUT_
SI
NGLE|
GLUT_
RGB)
;
gl
ut
I
ni
t
Wi
ndowPosi
t
i
on(
0,
0)
;
gl
ut
I
ni
t
Wi
ndowSi
ze(
500,
500)
;
gl
ut
Cr
eat
eWi
ndow(
"
CohenSut
her
l
and"
)
;
gl
ut
Di
spl
ay
Func(
di
spl
ay
)
;
i
ni
t
(
)
;
gl
ut
Mai
nLoop(
)
;
r
et
ur
n0;
}
Q11:
Wr
i
t
eapr
ogr
am t
ocl
i
pal
i
neusi
ngNi
chol
l
LeeNi
chol
l
Li
necl
i
ppi
ng
101
Smar
t
Boy
#i
ncl
ude<GL/
gl
ut
.
h>
#i
ncl
ude<st
dl
i
b.
h>
doubl
ey
_
max=100,
y
_
mi
n=50,
x_
max=100,
x_
mi
n=50; /
/Ol
dv
i
ewpor
t
doubl
eny
_
max=300,
ny
_
mi
n=200,
nx_
max=300,
nx_
mi
n=200;
/
/New
Vi
ewPor
ti
ntTOP=8,
BOTTOM =4,
RI
GHT=2,
LEFT=1;
doubl
eX1=10;
doubl
eY1=20;
doubl
eX2=120;
doubl
eY2=80;
v
oi
di
ni
t
(
){
gl
LoadI
dent
i
t
y
(
)
;
gl
Cl
ear
Col
or
(
1.
0,
1.
0,
1.
0,
1.
0)
;
gl
Mat
r
i
xMode(
GL_
PROJECTI
ON)
;
gl
uOr
t
ho2D(
0,
500,
0,
500)
;
gl
Mat
r
i
xMode(
GL_
MODELVI
EW)
;
}
v
oi
ddr
aw_
l
i
neAndPor
t
(
doubl
ex1,
doubl
ey
1,
doubl
ex2,
doubl
ey
2,
doubl
ey
_
max,
doubl
ey
_
mi
n,
doubl
ex_
max,
doubl
ex_
mi
n){
gl
Col
or
3d(
1,
0,
0)
;
gl
Begi
n(
GL_
LI
NE_
LOOP)
;
gl
Ver
t
ex2d(
x_
mi
n,
y
_
mi
n)
;
gl
Ver
t
ex2d(
x_
max,
y
_
mi
n)
;
gl
Ver
t
ex2d(
x_
max,
y
_
max)
;
gl
Ver
t
ex2d(
x_
mi
n,
y
_
max)
;
gl
End(
)
;
gl
Col
or
3d(
0,
0,
0)
;
gl
Begi
n(
GL_
LI
NES)
;
gl
Ver
t
ex2d(
x1,
y
1)
;
gl
Ver
t
ex2d(
x2,
y
2)
;
gl
End(
)
;
}
i
ntout
code(
doubl
ex,
doubl
e
y
){
i
ntout
code=0;
i
f(
y>y
_
max)
out
code|
=TOP;
el
sei
f(
y<y
_
mi
n)
out
code|
=BOTTOM;
i
f(
x>x_
max)
out
code|
=RI
GHT;
el
sei
f(
x<x_
mi
n)
out
code|
=LEFT;
r
et
ur
nout
code;
}v
oi
dcohenSut
her
l
and(
doubl
ex1,
doubl
ey
1,
doubl
ex2,
doubl
ey
2){
i
ntout
code1=out
code(
x1,
y
1)
;
i
ntout
code2=out
code(
x2,
y
2)
;
i
ntout
codeOut
;
bool
accept=f
al
se,
done=f
al
se;
102
Smar
t
Boy
do{
i
f(
(
out
code1|
out
code2)==0)/
/l
i
nei
scompl
et
el
yi
nsi
de
{accept=
t
r
ue;
done=
t
r
ue;
}el
sei
f(
(
out
code1&out
code2)!
=0)/
/l
i
nei
scompl
et
el
yout
si
de
{done=
t
r
ue;
}el
se{out
codeOut=(
out
code1!
=0)?out
code1
:
out
code2;
doubl
ex,
y
;
doubl
esl
ope=(
y
2-y
1)
/(
x2-x1)
;
i
f(
out
codeOut&TOP){y=y
_
max;
x=x1+(
y-y
1)/sl
ope;
}el
sei
f(
out
codeOut&BOTTOM)
{y=y
_
mi
n;
x=x1+(
y-y
1)/sl
ope;
}el
sei
f(
out
codeOut&RI
GHT)
{x=x_
max;
y=y
1+(
x-x1)*sl
ope;
}el
se{x=
x_
mi
n;
y=y
1+(
x-x1)*sl
ope;
}i
f(
out
codeOut==
out
code1){
x1=x;
y
1=y
;
out
code1=out
code(
x1,
y
1)
;
}el
se
{x2=x;
y
2=y
;
out
code2=out
code(
x2,
y
2)
;
}
}
}whi
l
e(
!
done)
;
i
f(
accept
){
doubl
escal
e_
x=(
nx_
max-nx_
mi
n)/(
x_
max-x_
mi
n)
;
doubl
e
scal
e_
y=(
ny
_
max-ny
_
mi
n)/(
y
_
max-y
_
mi
n)
;
doubl
enx1=nx_
mi
n
+(
x1-x_
mi
n)*scal
e_
x;
doubl
eny
1=ny
_
mi
n+(
y
1-y
_
mi
n)*scal
e_
y
;
doubl
enx2=nx_
mi
n+(
x2-x_
mi
n)*scal
e_
x;
doubl
eny
2=ny
_
mi
n+
(
y
2-y
_
mi
n)*scal
e_
y
;
dr
aw_
l
i
neAndPor
t
(
nx1,
ny
1,
nx2,
ny
2,
ny
_
max,
ny
_
mi
n,
nx_
max,
nx_
mi
n)
;
}
}v
oi
d
di
spl
ay
(
){
gl
Cl
ear
(
GL_
COLOR_
BUFFER_
BI
T)
;
dr
aw_
l
i
neAndPor
t
(
X1,
Y1,
X2,
Y2,
y
_
max,
y
_
mi
n,
x_
max,
x_
mi
n)
;
103
Smar
t
Boy
cohenSut
her
l
and(
X1,
Y1,
X2,
Y2)
;
gl
Fl
ush(
)
;
}i
ntmai
n(
i
ntar
gc,
char
*
*
ar
gv
){
gl
ut
I
ni
t
(
&ar
gc,
ar
gv
)
;
gl
ut
I
ni
t
Di
spl
ay
Mode(
GLUT_
SI
NGLE|
GLUT_
RGB)
;
gl
ut
I
ni
t
Wi
ndowPosi
t
i
on(
0,
0)
;
gl
ut
I
ni
t
Wi
ndowSi
ze(
500,
500)
;
gl
ut
Cr
eat
eWi
ndow(
"
CohenSut
her
l
and"
)
;
gl
ut
Di
spl
ay
Func(
di
spl
ay
)
;
i
ni
t
(
)
;
gl
ut
Mai
nLoop(
)
;
r
et
ur
n0;
}
Q12:
Wr
i
t
eapr
ogr
am t
ocl
i
papol
y
gonusi
ngSut
her
l
andHodgemanandWei
l
er
At
her
t
onal
gor
i
t
hm
Sut
her
l
andHodgeman:
104
Smar
t
Boy
#i
ncl
ude<GL/
gl
ut
.
h>
#i
ncl
ude<st
dl
i
b.
h>
#i
ncl
ude<mat
h.
h>
#i
ncl
ude<cst
dl
i
b>
#i
ncl
ude<i
ost
r
eam>usi
ngnamespacest
d;
consti
ntMAX_
POI
NTS=
20;
doubl
ey
_
max=100,
y
_
mi
n=50,
x_
max=100,
x_
mi
n=50;
/
/Ol
ddoubl
eny
_
max=300,
ny
_
mi
n=200,
nx_
max=300,
nx_
mi
n=
200;
/
/Newi
ntn_
sp=4,
n_
cw=4;
st
r
uctv
er
t
ex{
f
l
oatx;
f
l
oaty
;
}
;
v
er
t
excw[
]={
{
50,
50}
,
{
50,
100}
,
{
100,
100}
,
{
100,
50}
}
;
v
er
t
exsp[
]={
{
40,
75}
,
{
75,
110}
,
{
110,
75}
,
{
75,
40}
}
;
v
oi
d
i
ni
t
(
){
gl
LoadI
dent
i
t
y
(
)
;
gl
Cl
ear
Col
or
(
1.
0,
1.
0,
1.
0,
1.
0)
;
gl
Mat
r
i
xMode(
GL_
PROJECTI
ON)
;
gl
uOr
t
ho2D(
0,
500,
0,
500)
;
gl
Mat
r
i
xMode(
GL_
MODELVI
EW)
;
}v
oi
ddr
aw_
l
i
neAndPor
t
(
doubl
ey
_
max,
doubl
ey
_
mi
n,
doubl
ex_
max,
doubl
e
x_
mi
n){
gl
Col
or
3d(
0,
0,
0)
;
gl
Begi
n(
GL_
LI
NE_
LOOP)
;
gl
Ver
t
ex2d(
x_
mi
n,
y
_
mi
n)
;
gl
Ver
t
ex2d(
x_
max,
y
_
mi
n)
;
gl
Ver
t
ex2d(
x_
max,
y
_
max)
;
gl
Ver
t
ex2d(
x_
mi
n,
y
_
max)
;
gl
End(
)
;
}v
oi
ddr
aw_
pol
y
(
v
er
t
ex
v
l
i
st
[
]
,
i
ntn){
gl
Col
or
3d(
1,
0,
0)
;
gl
Begi
n(
GL_
POLYGON)
;
f
or(
i
nti
=0;
i
<n;
i
++){
gl
Ver
t
ex2d(
v
l
i
st
[
i
]
.
x,
v
l
i
st
[
i
]
.
y
)
;
gl
Ver
t
ex2d(
v
l
i
st
[
(
i
+1)%n]
.
x,
v
l
i
st
[
(
i
+1)%
n]
.
y
)
;
}
gl
End(
)
;
}
i
ntx_
i
nt
er
sect
(
i
ntx1,
i
nty
1,
i
ntx2,
i
nty
2,
i
ntx3,
i
nty
3,
i
ntx4,
i
nty
4){
i
ntnum =(
x1*y
2-y
1*x2)*(
x3-x4)-(
x1-x2)*(
x3*y
4-y
3*x4)
;
i
ntden=(
x1-x2)*(
y
3-y
4)-(
y
1-y
2)*(
x3-x4)
;
105
Smar
t
Boy
r
et
ur
nnum /den;
}
i
nty
_
i
nt
er
sect
(
i
ntx1,
i
nty
1,
i
ntx2,
i
nty
2,
i
ntx3,
i
nty
3,
i
ntx4,
i
nty
4){
i
ntnum =(
x1*y
2-y
1*x2)*(
y
3-y
4)-(
y
1-y
2)*(
x3*y
4-y
3*x4)
;
i
ntden=(
x1-x2)*(
y
3-y
4)-(
y
1-y
2)*(
x3-x4)
;
r
et
ur
nnum /den;
}
v
oi
dcl
i
p(
v
er
t
expol
y
_
poi
nt
s[
]
,
i
nt
&pol
y
_
si
ze,
i
ntx1,
i
nty
1,
i
ntx2,
i
nty
2){
i
ntnew_
poi
nt
s[
MAX_
POI
NTS]
[
2]
,
new_
pol
y
_
si
ze=0;
f
or(
i
nti
=0;
i
<pol
y
_
si
ze;
i
++){
/
/iandkf
or
m al
i
nei
n
pol
y
goni
ntk=(
i
+1)%
pol
y
_
si
z
e;
i
nti
x=pol
y
_
poi
nt
s[
i
]
.
x,
i
y=pol
y
_
poi
nt
s[
i
]
.
y
;
i
ntkx=pol
y
_
poi
nt
s[
k]
.
x,
ky=
pol
y
_
poi
nt
s[
k]
.
y
;
/
/Cal
cul
at
i
ngposi
t
i
onoff
i
r
stpoi
nt
/
/w.
r
.
t
.cl
i
pperl
i
ne
i
nti
_
pos=(
x2-x1)*(
i
y-y
1)-(
y
2-y
1)*(
i
x-x1)
;
/
/Cal
cul
at
i
ngposi
t
i
onofsecondpoi
nt
/
/w.
r
.
t
.cl
i
pperl
i
ne
i
ntk_
pos=(
x2-x1)*(
ky-y
1)-(
y
2-y
1)*(
kx-x1)
;
/
/Case1:Whenbot
hpoi
nt
sar
e
i
nsi
dei
f(
i
_
pos<0&&k_
pos<0){
/
/Onl
ysecondpoi
nti
sadded
new_
poi
nt
s[
new_
pol
y
_
si
ze]
[
0]=kx;
new_
poi
nt
s[
new_
pol
y
_
si
ze]
[
1]=ky
;
new_
pol
y
_
si
ze++;
}
/
/Case2:Whenonl
yf
i
r
stpoi
nti
s
out
si
deel
sei
f(
i
_
pos>=0&&k_
pos<0)
{
/
/Poi
ntofi
nt
er
sect
i
onwi
t
h
edge/
/andt
hesecondpoi
nt
i
sadded
new_
poi
nt
s[
new_
pol
y
_
si
ze]
[
0]=
x_
i
nt
er
sect
(
x1,
y
1,
x2,
y
2,
i
x,
i
y
,
kx,
ky
)
;
new_
poi
nt
s[
new_
pol
y
_
si
ze]
[
1]=
y
_
i
nt
er
sect
(
x1,
y
1,
x
2,
y
2,
i
x,
i
y
,
kx,
ky
)
;
new_
pol
y
_
si
ze++;
new_
poi
nt
s[
new_
pol
y
_
si
ze]
[
0]=kx;
new_
poi
nt
s[
new_
pol
y
_
si
ze]
[
1]=ky
;
new_
pol
y
_
si
ze++;
}
/
/Case3:Whenonl
ysecondpoi
nti
s
106
Smar
t
Boy
out
si
deel
sei
f(
i
_
pos<0&&k_
pos>=0){
/
/Onl
ypoi
ntofi
nt
er
sect
i
onwi
t
hedgei
s
addednew_
poi
nt
s[
new_
pol
y
_
si
ze]
[
0]=
x_
i
nt
er
sect
(
x1,
y
1,
x2,
y
2,
i
x,
i
y
,
kx,
ky
)
;
new_
poi
nt
s[
new_
pol
y
_
si
ze]
[
1]=
y
_
i
nt
er
sect
(
x1,
y
1,
x
2,
y
2,
i
x,
i
y
,
kx,
ky
)
;
107
Smar
t
Boy
108
Smar
t
Boy
new_
pol
y
_
si
ze++;
}
/
/Case4:Whenbot
hpoi
nt
sar
e
out
si
deel
se{
/
/Nopoi
nt
sar
eadded
}
}pol
y
_
si
ze=new_
pol
y
_
si
ze;
f
or(
i
nti
=0;
i
<pol
y
_
si
ze;
i
++){
pol
y
_
poi
nt
s[
i
]
.
x=new_
poi
nt
s[
i
]
[
0]
;
pol
y
_
poi
nt
s[
i
]
.
y=new_
poi
nt
s[
i
]
[
1]
;
}
}v
oi
d
sut
her
l
andhodgeman(
){
v
er
t
exsp1[
20]
;
f
or(
i
nti
=0;
i
<4;
i
++){i
ntk=(
i
+1)%4;
cl
i
p(
sp,
n_
sp,
cw[
i
]
.
x,
cw[
i
]
.
y
,
cw[
k]
.
x,
cw[
k]
.
y
)
;
}doubl
escal
e_
x=(
nx_
max-nx_
mi
n)/(
x_
maxx_
mi
n)
;
doubl
escal
e_
y=(
ny
_
max-ny
_
mi
n)/
(
y
_
max-y
_
mi
n)
;
f
or(
i
nti
=0;
i
<n_
sp;
i
++){
sp1[
i
]
.
x=nx_
mi
n+(
sp[
i
]
.
x-x_
mi
n)*scal
e_
x;
sp1[
i
]
.
y=ny
_
mi
n+(
sp[
i
]
.
y-y
_
mi
n)*scal
e_
y
;
}dr
aw_
l
i
neAndPor
t
(
ny
_
max,
ny
_
mi
n,
nx_
max,
nx_
mi
n)
;
dr
aw_
l
i
neAndPor
t
(
y
_
max,
y
_
mi
n,
x_
max,
x_
mi
n)
;
dr
aw_
pol
y
(
sp1,
n_
sp)
;
f
or(
i
nti
=0;
i
<n_
sp;
i
++)
cout<<'
(
'
<<sp[
i
]
.
x<<"
,
"<<sp[
i
]
.
y<<"
)"
;
}v
oi
d
di
spl
ay
(
){
gl
Cl
ear
(
GL_
COLOR_
BUFFER_
BI
T)
;
dr
aw_
l
i
neAndPor
t
(
y
_
max,
y
_
mi
n,
x
_
max,
x_
mi
n)
;
dr
aw_
pol
y
(
sp,
4)
;
sut
her
l
andhodgeman(
)
;
gl
Fl
ush(
)
;
}i
ntmai
n(
i
ntar
gc,
char
*
*
ar
gv
){
gl
ut
I
ni
t
(
&ar
gc,
ar
gv
)
;
gl
ut
I
ni
t
Di
spl
ay
Mode(
GLUT_
SI
NGLE|
GLUT_
RGB)
;
gl
ut
I
ni
t
Wi
ndowPosi
t
i
on(
0,
0)
;
gl
ut
I
ni
t
Wi
ndowSi
ze(
500,
500)
;
gl
ut
Cr
eat
eWi
ndow(
"
Sut
her
l
andHodgeman"
)
;
gl
ut
Di
spl
ay
Func(
di
spl
ay
)
;
i
ni
t
(
)
;
gl
ut
Mai
nLoop(
)
;
r
et
ur
n0;
}
109
Smar
t
Boy
110
Smar
t
Boy
Wei
l
erAt
her
t
onal
gor
i
t
hm
#i
ncl
ude<i
ost
r
eam>
#i
ncl
ude<cst
dl
i
b>
#i
ncl
ude<v
ect
or
>
#i
ncl
ude<l
i
st
>
#i
ncl
ude<GL/
gl
ut
.
h>
#def
i
neSi
ze500
usi
ngnamespace
st
d;
t
y
pedeff
l
oat
Col
or
[
3]
;
st
r
uctPoi
nt
{
i
ntx,
y
;
}
;
t
y
pedefst
r
uctI
nt
er
sect
i
onPoi
nt{
i
ntpoi
nt
Fl
ag;
i
nt
i
ndex0,
i
ndex1;
Poi
ntp;
bool
i
nFl
ag;
i
ntdi
s;
}I
P;
doubl
ey
_
max=100,
y
_
mi
n=50,
x_
max=100,
x_
mi
n=50; /
/Ol
dv
i
ewpor
t
doubl
eny
_
max=300,
ny
_
mi
n=200,
nx_
max=300,
nx_
mi
n=200;
/
/New
Vi
ewPor
tdoubl
escal
e_
x=(
nx_
max-nx_
mi
n)/(
x
_
max-x_
mi
n)
;
doubl
e
scal
e_
y=(
ny
_
max-ny
_
mi
n)/(
y
_
max-y
_
mi
n)
;
cl
assPg{
publ
i
c:
v
ect
or
<Poi
nt
>pt
s;
Pg(
v
oi
d)
;
v
oi
ddr
awPgLi
ne(
Col
orc)
;
v
oi
ddr
awpol
y
(
)
;
}
;
Pg:
:
Pg(
v
oi
d){
}v
oi
d
Pg:
:
dr
awPgLi
ne(
Col
orc){
gl
Col
or
3f
v
(
c)
;
gl
Li
neWi
dt
h(
2.
0)
;
gl
Begi
n(
GL_
LI
NE_
LOOP)
;
i
ntsi
ze
=pt
s.
si
ze(
)
;
f
or(
i
nti
=0;
i
<si
ze;
i
++)
gl
Ver
t
ex2i
(
pt
s[
i
]
.
x,
pt
s[
i
]
.
y
)
;
gl
End(
)
;
}v
oi
d
Pg:
:
dr
awpol
y
(
){
gl
Col
or
3d(
1,
1,
102.
0/255)
;
gl
Begi
n(
GL_
POLYGON)
;
i
ntsi
ze=pt
s.
si
ze(
)
;
f
or
(
i
nti
=0;
i
<si
ze;
i
++){
gl
Ver
t
ex2d(
pt
s[
i
]
.
x,
pt
s[
i
]
.
y
)
;
gl
Ver
t
ex2d(
pt
s[
(
i
+1)
%si
ze]
.
x,
pt
s[
(
i
+1)%si
ze]
.
y
)
;
}
gl
End(
)
;
}
111
Smar
t
Boy
112
bool
i
sPoi
nt
I
nsi
dePg(
Poi
ntp,
Pg&py
){
i
ntcnt=0,
si
ze=py
.
pt
s.
si
ze(
)
;
f
or(
i
nti
=0;
i
<si
ze;
i
++){
Poi
ntp1=py
.
pt
s[
i
]
;
Poi
ntp2=py
.
pt
s[
(
i
+1)%si
ze]
;
i
f(
p1.
y==p2.
y
)cont
i
nue;
i
f(
p.
y
<mi
n(
p1.
y
,
p2.
y
)
)cont
i
nue;
i
f(
p.
y>=max(
p1.
y
,
p2.
y
)
)cont
i
nue;
doubl
ex=
(
doubl
e)
(
p.
y-p1.
y
)*(
doubl
e)
(
p2.
x-p1.
x)/(
doubl
e)
(
p2.
y-p1.
y
)+
p1.
x;
i
f(
x>p.
x
)cnt
++;
}
r
et
ur
n(
cnt%2==1)
;
}i
ntcr
oss(
Poi
nt
&p0,
Poi
nt
&p1,
Poi
nt
&
p2){
r
et
ur
n(
(
p2.
x-p0.
x)*(
p1.
y-p0.
y
)-(
p1.
x-p0.
x)*(
p2.
y-p0.
y
)
)
;
}
bool
onSegment
(
Poi
nt
&p0,
Poi
nt
&p1,
Poi
nt
&p2)
{i
ntmi
nx=mi
n(
p0.
x,
p1.
x)
,
maxx=max(
p0.
x,
p1.
x)
;
i
ntmi
ny=mi
n(
p0.
y
,
p1.
y
)
,
maxy=max(
p0.
y
,
p1.
y
)
;
i
f(
p2.
x>=mi
nx&&p2.
x<=
maxx&&p2.
y>=mi
ny&&p2.
y<=maxy
)r
et
ur
nt
r
ue;
r
et
ur
nf
al
se;
}bool
segment
sI
nt
er
sect
(
Poi
nt
&p1,
Poi
nt
&p2,
Poi
nt
&p3,
Poi
nt
&p4){
i
ntd1=cr
oss(
p3,
p4,
p1)
;
i
ntd2=cr
oss(
p3,
p4,
p2)
;
i
ntd3=cr
oss(
p1,
p2,
p3)
;
i
ntd4=cr
oss(
p1,
p2,
p4)
;
i
f(
(
(
d1>0&&d2<0)|
|
(
d1<0&&d2>0)
)&&
(
(
d3>0&&d4<0)|
|
(
d3<0&&d4>0)
)
)
r
et
ur
nt
r
ue;
i
f(
d1==0&&onSegment
(
p3,
p4,
p1)
)r
et
ur
nt
r
ue;
i
f(
d2==0&&onSegment
(
p3,
p4,
p2)
)r
et
ur
nt
r
ue;
i
f(
d3==0&&
onSegment
(
p1,
p2,
p3)
)r
et
ur
nt
r
ue;
i
f(
d4==0
&&onSegment
(
p1,
p2,
p4)
)r
et
ur
nt
r
ue;
r
et
ur
n
f
al
se;
}
Poi
ntget
i
nt
er
sect
Poi
nt
(
Poi
ntp1,
Poi
ntp2,
Poi
ntp3,
Poi
ntp4){
Poi
ntp;
i
ntb1=(
p2.
y-p1.
y
)*p1.
x+(
p1.
x-p2.
x)*p1.
y
;
i
ntb2=
(
p4.
y-p3.
y
)*p3.
x+(
p3.
x-p4.
x)*p3.
y
;
i
ntD=(
p2.
x-p1.
x)
*(
p4.
y-p3.
y
)-(
p4.
x-p3.
x)*(
p2.
y-p1.
y
)
;
i
ntD1=b2*
(
p2.
x-p1.
x)-b1*(
p4.
x-p3.
x)
;
i
ntD2=b2*(
p2.
y-p1.
y
)113
b1*(
p4.
y-p3.
y
)
;
p.
x=D1/D;
p.
y=D2/D;
r
et
ur
np;
}
v
oi
dgener
at
eI
nt
er
sect
Poi
nt
s(
Pg&py
cl
i
p,
Pg&py
,
l
i
st
<I
P>&i
pl
i
st
){
i
ntcl
i
pSi
ze=py
cl
i
p.
pt
s.
si
ze(
)
,
py
Si
ze=py
.
pt
s.
si
ze(
)
;
f
or(
i
nti
=0;
i
<cl
i
pSi
ze;
i
++){
Poi
ntp1=py
cl
i
p.
pt
s[
i
]
;
Poi
ntp2=py
cl
i
p.
pt
s[
(
i
+1)%cl
i
pSi
ze]
;
f
or(
i
ntj
=0;
j
<py
Si
ze;
j
++){
Poi
ntp3=py
.
pt
s[
j
]
;
Poi
ntp4=py
.
pt
s[
(
j
+1)%py
Si
ze]
;
i
f
(
segment
sI
nt
er
sect
(
p1,
p2,
p3,
p4)
)
{I
Pi
p;
i
p.
i
ndex0=j
;
i
p.
i
ndex1=i
;
i
p.
p
=get
i
nt
er
sect
Poi
nt
(
p1,
p2,
p3,
p4)
;
i
pl
i
st
.
push_
back(
i
p)
;
}
}
}
}i
ntget
Di
st
ance(
Poi
nt
&p1,
Poi
nt
&
p2){
r
et
ur
n(
p1.
x-p2.
x)*(
p1.
x-p2.
x)+(
p1.
y-p2.
y
)*(
p1.
y-p2.
y
)
;
}booldi
st
anceCompar
at
or
(
I
P& i
p1,I
P& i
p2){r
et
ur
ni
p1.
di
s<
i
p2.
di
s;}v
oi
d gener
at
eLi
st
(
Pg& py
,l
i
st
<I
P>& i
pl
i
st
,l
i
st
<I
P>&
coml
i
st
,
i
nti
ndex){
i
ntsi
ze=py
.
pt
s.
si
ze(
)
;
l
i
st
<I
P>:
:
i
t
er
at
ori
t
;
f
or(
i
nt
i
=0;
i
<si
ze;
i
++){
Poi
ntp1=py
.
pt
s[
i
]
;
I
P i
p; i
p.
poi
nt
Fl
ag = 0; i
p.
p = p1;
coml
i
st
.
push_
back(
i
p)
;l
i
st
<I
P> oneSeg;
f
or(
i
t=i
pl
i
st
.
begi
n(
)
;
i
t!
=i
pl
i
st
.
end(
)
;
i
t
++)
{
i
f(
(
i
ndex==0&&i
==i
t
>i
ndex0)|
|
(
i
ndex==1&&i
==i
t
>i
ndex1)
){i
t
>di
s=get
Di
st
ance(
i
t
>p,
p1)
;
i
t
>poi
nt
Fl
ag=1;
oneSeg.
push_
back(
*
i
t
)
;
}
}
oneSeg.
sor
t
(
di
st
anceCompar
at
or
)
;
f
or(
i
t=oneSeg.
begi
n(
)
;
i
t!
=
oneSeg.
end(
)
;
i
t
++)coml
i
st
.
push_
back(
*
i
t
)
;
}
}v
oi
dget
PgPoi
nt
I
nOut
(
l
i
st
<I
P>&Pgl
i
st
,
Pg&
py
cl
i
p){
114
bool
i
nFl
ag;
l
i
st
<I
P>:
:
i
t
er
at
ori
t
;
f
or(
i
t=Pgl
i
st
.
begi
n(
)
;
i
t
!
=Pgl
i
st
.
end(
)
;
i
t
++){
i
f(
i
t
>poi
nt
Fl
ag==0){
i
f(
i
sPoi
nt
I
nsi
dePg(
i
t
>p,
py
cl
i
p)
)
i
nFl
ag=t
r
ue;
el
sei
nFl
ag=
f
al
se;
}el
se{i
nFl
ag=
!
i
nFl
ag;
i
t
>i
nFl
ag
=i
nFl
ag;
}
}
}
bool
oper
at
or
==(
Poi
nt
&p1,
Poi
nt
&p2){r
et
ur
np1.
x==p2.
x&&p1.
y==p2.
y
;
}
v
oi
dget
Cl
i
pPoi
nt
I
nOut
(
l
i
st
<I
P>&cl
i
pl
i
st
,
l
i
st
<I
P>&
Pgl
i
st
){l
i
st
<I
P>:
:
i
t
er
at
ori
t
,
i
t
1;
f
or(
i
t=cl
i
pl
i
st
.
begi
n(
)
;
i
t
!
=cl
i
pl
i
st
.
end(
)
;
i
t
++){i
f(
i
t
>poi
nt
Fl
ag==0)cont
i
nue;
f
or(
i
t
1=Pgl
i
st
.
begi
n(
)
;
i
t
1!
=Pgl
i
st
.
end(
)
;
i
t
1++){
i
f(
i
t
1>poi
nt
Fl
ag==0)cont
i
nue;
i
f(
i
t
>p
==i
t
1>p)i
t
>i
nFl
ag=i
t
1>i
nFl
ag;
}
}
}v
oi
dgener
at
eCl
i
pAr
ea(
l
i
st
<I
P>&Pgl
i
st
,
l
i
st
<I
P>&
cl
i
pl
i
st
){l
i
st
<I
P>:
:
i
t
er
at
ori
t
,
i
t
1;
Pgpy
;
Col
orc={
0.
0,
0.
0,
1.
0}
;
f
or(
i
t=Pgl
i
st
.
begi
n(
)
;
i
t!
=Pgl
i
st
.
end(
)
;
i
t
++)
i
f(
i
t
>poi
nt
Fl
ag==1&&i
t
>i
nFl
ag)br
eak;
py
.
pt
s.
cl
ear
(
)
;
whi
l
e(
t
r
ue){
i
f(
i
t==Pgl
i
st
.
end(
)
)br
eak;
py
.
pt
s.
push_
back(
i
t
>p)
;
f
or(
;
i
t!
=Pgl
i
st
.
end(
)
;
i
t
++){
i
f(
i
t
>poi
nt
Fl
ag==1&&!
i
t
>i
nFl
ag)br
eak;
py
.
pt
s.
push_
back(
i
t
>p)
;
}f
or(
i
t
1=cl
i
pl
i
st
.
begi
n(
)
;
i
t
1!
=cl
i
pl
i
st
.
end(
)
;
i
t
1++)
i
f(
i
t
1>p==i
t
>p)br
eak;
f
or(
;
i
t
1!
=cl
i
pl
i
st
.
end(
)
;
i
t
1++){
i
f(
i
t
1>poi
nt
Fl
ag==1&&i
t
1>i
nFl
ag)br
eak;
py
.
pt
s.
push_
back(
i
t
1>p)
;
}
115
i
f(
py
.
pt
s[
0]==i
t
1>p){
i
ntsi
ze=py
.
pt
s.
si
ze(
)
;
f
or(
i
nti
=0;
i
<si
ze;
++i
){
py
.
pt
s[
i
]
.
x=nx_
mi
n+(
py
.
pt
s[
i
]
.
x-x_
mi
n)*scal
e_
x;
py
.
pt
s[
i
]
.
y=ny
_
mi
n+(
py
.
pt
s[
i
]
.
y-y
_
mi
n)*scal
e_
y
;
}py
.
dr
awpol
y
(
)
;
py
.
pt
s.
cl
ear
(
)
;
f
or(
;
i
t!
=
Pgl
i
st
.
end(
)
;
i
t
++)i
f(
i
t
>poi
nt
Fl
ag==1&&i
t
>i
nFl
ag)br
eak;
cont
i
nue;
}
f
or(
;
i
t!
=Pgl
i
st
.
end(
)
;
i
t
++)
i
f(
i
t
>p==i
t
1>p)br
eak;
}
}
v
oi
dwei
l
er
At
her
t
on(
Pg&py
cl
i
p,
Pg&py
)
{l
i
st
<I
P>i
pl
i
st
,
Pgl
i
st
,
cl
i
pl
i
st
;
gener
at
eI
nt
er
sect
Poi
nt
s(
py
cl
i
p,
py
,
i
pl
i
st
)
;
gener
at
eLi
st
(
py
,
i
pl
i
st
,
Pgl
i
st
,
0)
;
gener
at
eLi
st
(
py
cl
i
p,
i
pl
i
st
,
cl
i
pl
i
st
,
1)
;
get
PgPoi
nt
I
nOut
(
Pgl
i
st
,
py
cl
i
p)
;
get
Cl
i
pPoi
nt
I
nOut
(
cl
i
pl
i
st
,
Pgl
i
st
)
;
gener
at
eCl
i
pAr
ea(
Pgl
i
st
,
cl
i
pl
i
st
)
;
}
v
oi
di
ni
t
(
){
gl
Cl
ear
Col
or
(
0.
0,
0.
0,
0.
0,
0.
0)
;
gl
Col
or
3f
(
1.
0,
0.
0,
0.
0)
;
gl
Poi
nt
Si
ze(
1.
0)
;
gl
Mat
r
i
xMode(
GL_
PROJECTI
ON)
;
gl
LoadI
dent
i
t
y
(
)
;
gl
uOr
t
ho2D(
0.
0,
500,
0.
0,
500)
;
}v
oi
dGener
at
eRandomSi
mpl
ePg(
Pg&G,
i
nt
M){
Poi
ntP;
G.
pt
s.
cl
ear
(
)
;
f
or(
i
nti
=0;
i
<M;
++i
){
bool
f
l
ag;
do{
P.
x=r
and(
)%Si
ze;
P.
y=r
and(
)%Si
ze;
f
l
ag
=t
r
ue;
f
or(
i
ntj
=1;
j
<i
1;
++j
)
i
f(
segment
sI
nt
er
sect
(
G.
pt
s[
j
-1]
,
G.
pt
s[
j
]
,
G.
pt
s[
i
-1]
,
P)
){
f
l
ag=f
al
se;
116
br
eak;
}i
f(
f
l
ag&&i
==M -1)
{
f
or(
i
ntj
=2;
j
<i
;
++j
)
i
f(
segment
sI
nt
er
sect
(
G.
pt
s[
j
-1]
,
G.
pt
s[
j
]
,
P,
G.
pt
s[
0]
)
){
f
l
ag=f
al
se;
br
eak;
}
}
}whi
l
e(
!
f
l
ag)
;
G.
pt
s.
push_
back(
P)
;
}
}
v
oi
ddi
spl
ay
(
){
gl
Cl
ear
(
GL_
COLOR_
BUFFER_
BI
T)
;
gl
Enabl
e(
GL_
POI
NT_
SMOOTH)
;
Pgpy
cl
i
p,
py
,
new_
py
cl
i
p;
Poi
ntp1,
p2,
p3,
p4;
p1.
x=50,
p1.
y=50;
p2.
x=50,
p2.
y=
100;
p3.
x=100,
p3.
y=100;
p4.
x=100,
p4.
y=50;
py
cl
i
p.
pt
s.
push_
back(
p1)
;
py
cl
i
p.
pt
s.
push_
back(
p2)
;
py
cl
i
p.
pt
s.
push_
back(
p3)
;
py
cl
i
p.
pt
s.
push_
back(
p4)
;
Poi
ntp5,
p6,
p7,
p8;
p5.
x=40,
p5.
y=75;
p6.
x=75,
p6.
y=
110;
p7.
x=110,
p7.
y=75;
p8.
x=75,
p8.
y=40;
py
.
pt
s.
push_
back(
p5)
;
py
.
pt
s.
push_
back(
p6)
;
py
.
pt
s.
push_
back(
p7)
;
py
.
pt
s.
push_
back(
p8)
;
Poi
nt
p9,
p10,
p11,
p12;
p9.
x=200,
p9.
y=200;
p10.
x=200,
p10.
y
=300;
p11.
x=300,
p11.
y=
300;
p12.
x=300,
p12.
y=200;
117
new_
py
cl
i
p.
pt
s.
push_
back(
p9)
;
new_
py
cl
i
p.
pt
s.
push_
back(
p1
0)
;
new_
py
cl
i
p.
pt
s.
push_
back(
p1
1)
;
new_
py
cl
i
p.
pt
s.
push_
back(
p1
2)
;
Col
ora={
1.
0,
0.
0,
0.
0}
;
Col
orb={
0.
0,
1.
0,
0.
0}
;
py
.
dr
awpol
y
(
)
;
py
cl
i
p.
dr
awPgLi
ne(
b)
;
new_
py
cl
i
p.
dr
awPgLi
ne(
b)
;
wei
l
er
At
her
t
on(
py
cl
i
p,
py
)
;
gl
Fl
ush(
)
;
}
i
ntmai
n(
i
ntar
gc,
char
*
*ar
gv
){
gl
ut
I
ni
t
(
&ar
gc,
ar
gv
)
;
gl
ut
I
ni
t
Di
spl
ay
Mode(
GLUT_
SI
NGLE|
GLUT_
RGB)
;
gl
ut
I
ni
t
Wi
ndowSi
ze(
Si
ze,
Si
ze)
;
gl
ut
I
ni
t
Wi
ndowPosi
t
i
on(
100,
100)
;
gl
ut
Cr
eat
eWi
ndow(
"
Wei
l
er
At
her
t
on"
)
;
gl
ut
Di
spl
ay
Func(
di
spl
ay
)
;
i
ni
t
(
)
;
gl
ut
Mai
nLoop(
)
;
r
et
ur
n0;
118
}
119
Q13:
Wr
i
t
epr
ogr
amsf
ordesi
gni
ngf
ol
l
owi
ngsi
mpl
eani
mat
i
onsusi
ng
t
r
ansf
or
mat
i
ons.
(
i
) Ci
r
cl
emov
i
ngf
r
om l
ef
tt
or
i
ghtandv
i
cev
er
sa
120
#i
ncl
ude<i
ost
r
eam>
#i
ncl
ude<st
dl
i
b.
h>
#i
ncl
ude
<GL/
gl
ut
.
h>usi
ng
namespacest
d;
f
l
oatbal
l
X=0.
3f
;
f
l
oatbal
l
Y=0.
0f
;
f
l
oatbal
l
Z=1.
0f
;
st
at
i
ci
ntf
l
ag=1;
v
oi
ddr
awBal
l
(
v
oi
d)
{
gl
Col
or
3f
(
0.
5,
1.
0,
1.
0)
;
gl
Tr
ansl
at
ef
(
bal
l
X,
bal
l
Y,
bal
l
Z)
;
gl
ut
Sol
i
dSpher
e(
0.
1,
10,
10)
;
}v
oi
dkey
Pr
ess(
i
ntkey
,
i
ntx,
i
nt
y
){
i
f(
key==GLUT_
KEY_
RI
GHT)bal
l
X=0.
05f
;
i
f(
key==GLUT_
KEY_
LEFT)bal
l
X+=0.
05f
;
gl
ut
Post
Redi
spl
ay
(
)
;
}
v
oi
di
ni
t
Render
i
ng(
){gl
Enabl
e(
GL_
DEPTH_
TEST)
;
}
v
oi
dhandl
eResi
ze(
i
ntw,
i
nth){
gl
Vi
ewpor
t
(
0,
0,
w,
h)
;
gl
Mat
r
i
xMode(
GL_
PROJECTI
ON)
;
gl
LoadI
dent
i
t
y
(
)
;
gl
uPer
spect
i
v
e(
45.
0,
(
doubl
e)
w/
(
doubl
e)
h,
1.
0,
200.
0)
;
}v
oi
d
dr
awScene(
){
gl
Cl
ear
(
GL_
COLOR_
BUFFER_
BI
T|
GL_
DEPTH_
BUFFER_
BI
T)
;
gl
Mat
r
i
xMode(
GL_
MODELVI
EW)
;
gl
LoadI
dent
i
t
y
(
)
;
dr
awBal
l
(
)
;
gl
ut
SwapBuf
f
er
s(
)
;
}v
oi
dupdat
e(
i
nt
v
al
ue){
i
f(
f
l
ag){
bal
l
X+=0.
01f
;
i
f(
bal
l
X>0.
3){
f
l
ag=0;
}
}
i
f(
!
f
l
ag){
bal
l
X=0.
01f
;
i
f
(
bal
l
X<0.
3){
f
l
ag=1;
}
121
}
gl
ut
Post
Redi
spl
ay
(
)
;
122
gl
ut
Ti
mer
Func(
25,
updat
e,
0)
;
}i
ntmai
n(
i
ntar
gc,
char
*
*
ar
gv
){
gl
ut
I
ni
t
(
&ar
gc,
ar
gv
)
;
gl
ut
I
ni
t
Di
spl
ay
Mode(
GLUT_
DOUBLE|
GLUT_
RGB|
GLUT_
DEPTH)
;
gl
ut
I
ni
t
Wi
ndowSi
ze(
400,
400)
;
gl
ut
Cr
eat
eWi
ndow(
"
Ci
r
cl
eMov
es
Lef
tRi
ght
"
)
;
i
ni
t
Render
i
ng(
)
;
gl
ut
Di
spl
ay
Func(
dr
awScene)
;
gl
ut
Speci
al
Func(
key
Pr
ess)
;
gl
ut
ReshapeFunc(
handl
eResi
ze)
;
gl
ut
Ti
mer
Func(
25,
updat
e,
0)
;
gl
ut
Mai
nLoop(
)
;
r
et
ur
n(
0)
;
}
(
i
i
)Wi
ndmi
l
l
r
ot
at
i
on
123
#i
ncl
ude<GL/
gl
ut
.
h>const
doubl
ePI=3.
141592654;
i
nt
f
r
ameNumber=0;
v
oi
ddr
awWi
ndmi
l
l
(
){i
nt
i
;
gl
Col
or
3f
(
0.
8f
,
0.
8f
,
0.
9f
)
;
gl
Begi
n(
GL_
POLYGON)
;
gl
Ver
t
ex2f
(
0.
05f
,
0)
;
gl
Ver
t
ex2f
(
0.
05f
,
0)
;
gl
Ver
t
ex2f
(
0.
05f
,
3)
;
gl
Ver
t
ex2f
(
0.
05f
,
3)
;
gl
End(
)
;
gl
Tr
ansl
at
ef
(
0,
3,
0)
;
gl
Rot
at
ed(
f
r
ameNumber*(
180.
0/46)
,
0,
0,
1)
;
gl
Col
or
3f
(
0.
4f
,
0.
4f
,
0.
8f
)
;
f
or(
i
=0;
i
<3;
i
++){
gl
Rot
at
ed(
120,
0,
0,
1)
;
gl
Begi
n(
GL_
POLYGON)
;
gl
Ver
t
ex2f
(
0,
0)
;
gl
Ver
t
ex2f
(
0.
5f
,
0.
1f
)
;
gl
Ver
t
ex2f
(
1.
5f
,
0)
;
gl
Ver
t
ex2f
(
0.
5f
,
0.
1f
)
;
gl
End(
)
;
}
}v
oi
d
di
spl
ay
(
){
gl
Cl
ear
(
GL_
COLOR_
BUFFER_
BI
T)
;
gl
LoadI
dent
i
t
y
(
)
;
gl
PushMat
r
i
x(
)
;
gl
Tr
ansl
at
ed(
3.
7,
0.
8,
0)
;
gl
Scal
ed(
0.
7,
0.
7,
1)
;
dr
awWi
ndmi
l
l
(
)
;
gl
PopMat
r
i
x(
)
;
gl
PushMat
r
i
x(
)
;
gl
Tr
ansl
at
ed(
3+13*
(
f
r
ameNumber%300)/300.
0,
0,
0)
;
gl
Scal
ed(
0.
3,
0.
3,
1)
;
gl
PopMat
r
i
x(
)
;
gl
ut
SwapBuf
f
er
s(
)
;
}
v
oi
ddoFr
ame(
i
ntv
)
{f
r
ameNumber
++;
gl
ut
Post
Redi
spl
ay
(
)
;
gl
ut
Ti
mer
Func(
30,
doFr
ame,
0)
;
}
v
oi
di
ni
t
(
){
gl
Cl
ear
Col
or
(
0.
5f
,
0.
5f
,
1,
1)
;
gl
Mat
r
i
xMode(
GL_
PROJECTI
ON)
;
gl
LoadI
dent
i
t
y
(
)
;
124
gl
Or
t
ho(
0,
7,
1,
4,
1,
1)
;
gl
Mat
r
i
xMode(
GL_
MODELVI
EW)
;
}i
ntmai
n(
i
ntar
gc,
char
*
*
ar
gv
){
gl
ut
I
ni
t
(
&ar
gc,
ar
gv
)
;
gl
ut
I
ni
t
Di
spl
ay
Mode(
GLUT_
DOUBLE)
;
gl
ut
I
ni
t
Wi
ndowSi
ze(
700,
500)
;
gl
ut
I
ni
t
Wi
ndowPosi
t
i
on(
100,
100)
;
gl
ut
Cr
eat
eWi
ndow(
"
Rot
at
i
ngWi
ndmi
l
l
"
)
;
i
ni
t
(
)
;
gl
ut
Di
spl
ay
Func(
di
spl
ay
)
;
gl
ut
Ti
mer
Func(
200,
doFr
ame,
0)
;
gl
ut
Mai
nLoop(
)
;
r
et
ur
n0;
}
(
i
i
i
)Si
mpl
eani
mat
i
onoff
oot
bal
l
goal
125
#i
ncl
ude<GL/
gl
ut
.
h>
#i
ncl
ude<st
dl
i
b.
h>
#i
ncl
ude<st
r
i
ng.
h>char
st
r
1[
]="
GOAL"
;
f
l
oat
cent
er
_
x=300;
f
l
oat
cent
er
_
y=110;
f
l
oat
cur
r
ent
_
angl
e=0;
GLf
l
oat
BLACK[
]={
0,
0,
0}
;
v
oi
di
ni
t
(
){
gl
LoadI
dent
i
t
y
(
)
;
gl
Cl
ear
Col
or
(
0.
0,
0.
0,
0.
0,
0.
0)
;
gl
Mat
r
i
xMode(
GL_
PROJECTI
ON)
;
gl
uOr
t
ho2D(
0,
700,
0,
600)
;
gl
Mat
r
i
xMode(
GL_
MODELVI
EW)
;
}v
oi
dout
put
(
char
*
st
r
i
ng){gl
Col
or
3f
(
1,
1,
1)
;
gl
Rast
er
Pos2f
(
250,
550)
;
i
ntl
en,
i
;
l
en=
(
i
nt
)
st
r
l
en(
st
r
i
ng)
;
f
or
(
i
=0;
i
<l
en;
i
++){
gl
ut
Bi
t
mapChar
act
er
(
GLUT_
BI
TMAP_
TI
MES_
ROMAN_
24,
st
r
i
ng[
i
]
)
;
}
}f
l
oatcal
_
y
(
i
nt
x){
f
l
oaty=6010/11+(
(
2*x)/11)
;
r
et
ur
ny
;
}f
l
oatcal
_
y
1(
i
nt
x){
f
l
oaty=5290/11+(
(
2*x)/11)
;
r
et
ur
ny
;
}
f
l
oatcal
_
x
(
i
nty
){
f
l
oatx=(
1530+y
)/7;
r
et
ur
nx;
}
f
l
oatcal
_
x
1(
i
nty
){
f
l
oatx=(
3505+y
)/7;
r
et
ur
nx;
}
v
oi
dgoal
(
){
gl
PushMat
r
i
x(
)
;
gl
Tr
ansl
at
ed(
cent
er
_
x,
cent
er
_
y
,
29)
;
gl
Rot
at
ef
(
cur
r
ent
_
angl
e,
1.
0,
0.
0,
0.
0)
;
gl
Rot
at
ef
(
cur
r
ent
_
angl
e,
0.
0,
1.
0,
0.
0)
;
gl
Col
or
3f
(
0,
0,
0)
;
gl
ut
Sol
i
dSpher
e(
30,
30,
30)
;
126
gl
PopMat
r
i
x(
)
;
127
}v
oi
d
di
spl
ay
(
){
gl
Cl
ear
(
GL_
COLOR_
BUFFER_
BI
T|
GL_
DEPTH_
BUFFER_
BI
T)
;
gl
Col
or
3f
(
0,
212.
0/255,
0)
;
gl
Begi
n(
GL_
POLYGON)
;
gl
Ver
t
ex2f
(
70,
50)
;
gl
Ver
t
ex2f
(
600,
10)
;
gl
Ver
t
ex2f
(
570,
400)
;
gl
Ver
t
ex2f
(
270,
450)
;
gl
End(
)
;
gl
Col
or
3f
(
1,
1,
1)
;
gl
Li
neWi
dt
h(
5)
;
gl
Begi
n(
GL_
LI
NES)
;
gl
Ver
t
ex2f
(
280,
430)
;
gl
Ver
t
ex2f
(
290,
500)
;
gl
End(
)
;
gl
Col
or
3f
(
1,
1,
1)
;
gl
Li
neWi
dt
h(
5)
;
gl
Begi
n(
GL_
LI
NES)
;
gl
Ver
t
ex2f
(
555,
380)
;
gl
Ver
t
ex2f
(
565,
450)
;
gl
End(
)
;
gl
Col
or
3f
(
1,
1,
1)
;
gl
Li
neWi
dt
h(
5)
;
gl
Begi
n(
GL_
LI
NES)
;
gl
Ver
t
ex2f
(
290,
500)
;
gl
Ver
t
ex2f
(
565,
450)
;
gl
End(
)
;
f
or
(
i
nti
=290;
i
<555-5;
i
+=10){
gl
Col
or
3f
(
1,
1,
1)
;
gl
Li
neWi
dt
h(
1)
;
gl
Begi
n(
GL_
LI
NES)
;
gl
Ver
t
ex2f
(
i
,
cal
_
y
1(
i
)
)
;
gl
Ver
t
ex2f
(
i
+10,
cal
_
y
(
i
+10)+
2)
;
gl
End(
)
;
}f
or(
i
nti
=443;
i
>
380;
i
=7){
gl
Col
or
3f
(
1,
1,
1)
;
gl
Li
neWi
dt
h(
1)
;
gl
Begi
n(
GL_
LI
NES)
;
gl
Ver
t
ex2f
(
cal
_
x(
i
+50)
,
i
+50)
;
gl
Ver
t
ex2f
(
cal
_
x1(
i
)
,
i
)
;
gl
End(
)
;
}i
f(
cal
_
y
1(
cent
er
_
x)
<cent
er
_
y
){
out
put
(
st
r
1)
;
}el
se{
goal
(
)
;
128
cent
er
_
x+=0.
06;
cent
er
_
y+=0.
1;
cur
r
ent
_
angl
e+=0.
4;
}
gl
Fl
ush(
)
;
gl
ut
SwapBuf
f
er
s(
)
;
gl
ut
Post
Redi
spl
ay
(
)
;
}
v
oi
di
dl
e(
){di
spl
ay
(
)
;
}i
nt
mai
n(
i
ntar
gc,
char
*
*ar
gv
){
gl
ut
I
ni
t
(
&ar
gc,
ar
gv
)
;
gl
ut
I
ni
t
Di
spl
ay
Mode(
GLUT_
SI
NGLE|
GLUT_
RGB)
;
gl
ut
I
ni
t
Wi
ndowSi
ze(
700,
600)
;
gl
ut
I
ni
t
Wi
ndowPosi
t
i
on(
10,
10)
;
gl
ut
Cr
eat
eWi
ndow(
"
Foot
bal
l
"
)
;
i
ni
t
(
)
;
gl
ut
I
dl
eFunc(
i
dl
e)
;
gl
ut
Di
spl
ay
Func(
di
spl
ay
)
;
gl
ut
Mai
nLoop(
)
;
r
et
ur
n0;
}
129
130
Download