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