平成8年度 春期 第二種 午後 問11

                        [更新日]1996.06.04
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃ 次の問11から問14までの4問については、この中から2問を選択し、答案用紙の┃ ┃選択欄の[選]を黒くマークして解答してください。               ┃ ┃ なお、2問以上選択した場合には、はじめの1問について採点します。      ┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ 問11 次のCプログラムの説明及びプログラムを読んで,設問1,2に答えよ。 〔プログラムの説明〕 グラフィックス画面上の,座標(x1,y1)と座標(x2, y2)を結ぶ直線を引く関数 DrawLine( )を作成した。ただし座標(x,y)に点を描画する関数SetPixel( )は 用意されている。 〔プログラム〕 void SetPixel( int x ,int y ); void DrawLine( int x1 , int y1 , int x2 ,int y2 ) { int Thresh = 0 ,Index ; int Xunit = 1 ; /* X方向の増分 */ int Yunit = 1 ; /* Y方向の増分 */ int Xdiff = x2 - x1; /* X方向の変位量 */ int Ydiff = y2 - y1; /* Y方向の変位量 */ if( Xdiff < 0 ){ Xdiff = -Xdiff ; Xunit = -1 ; } if( Ydiff < 0 ){ Ydiff = -Ydiff ; Yunit = -1 ; } if( Xdiff > Ydiff ){ /* ループの方向を決める */ for( Index = 0 ; Index < Xdiff + 1 ; Index++ ){ /* X方向のループ */ SetPixel( x1 , y1 ); x1 += Xunit; Thresh += Ydiff ; if( Thresh >= xdiff ) { Thresh -= Xdiff ; y1 += Yunit; } } } else { for( Index = 0 ; Index < Ydiff + 1 ; Index++ ){ /* Y方向のループ */ SetPixel( x1 , y1 ); y1 += Yunit ; Thresh += Xdiff; if( Thresh >= Ydiff ){ Thresh -= Ydiff; X1 += Xunit ; } } } } 設問1 このプログラムの動作を説明する次の文章中の [ ] に入れる正しい 答えを,解答群の中から選ベ。 (1) 与えられた2点のX方向の変位量とY方向の変位量を求める。 (2) (1)で求めた結果から,x方向の増分とY方向の増分の [ a ] を決定 する。 (3) X方向の変位量とY方向の変位量の [ b ] を比較して,ループの方 向を決める。 (4)(3)の比較の結果, 大きいほうの変位量をDH,小さいほうの変位量をDL とすると,描画する点の数は [ c ] 個である。 a,bに関する解答群 ア 比率 イ 方程式 ウ 正接値 エ 絶対値 オ余弦値 カ 傾き キ 符合 ク 差分 ケ 切片 cに関する解答群 ア |DH| イ |DL| ウ |DH+1| エ |DL+ 1| オ |DH|+1 カ |DL|+1 設問2 もし,すべての直線をX方向のループで描いたとしたら,Y方向の変位量が 大きい場合にどのような不都合が発生するか。正しい答えを解答群の中から選 ベ。 解答群 ア 意図した傾きとは異なる直線になることがある。 イ 除算の分母が0になる危険がある。 ウ 垂直線になることがある。 エ 水平線になることがある。 オ 破線(点が隣接しない状態)になることがある。