図形の反転

グラフ上の図形を左右・あるいは上下「逆」にしてみましょう。例えば、左向きの矢印を右向きにしたり、上向きの矢印を下向きにする、という処理です。

まず、アプレットで実際にどんな処理をするのか、ご覧ください。Rev-Xボタンは左右反転でRev-Y ボタンは上下反転、さらにExc-XYはX とYを「入れ替える」ボタンです。マウスで適当な位置をクリックしたり、ドラッグして図形をかいたらボタンをクリックします。

このアプレットでは、図形のデータはboolean型2次元配列dot[32][32]に入っています(つまり、図形を描くグラフは32*32のマス目)。反転する時はこの配列に対して処理をして、その結果を表示するわけです。
 まず、左右反転について考えてみましょう。左右に反転する、とは一番左にある点を一番右に、左端から2番目の点を右端から2番目に移動する処理です。この処理を行うためには、まず図形のデータと同じ形の配列を用意して、そこに図形のデータをコピーしておきます。次に、コピーした配列を左端から読み込んで、それを図形の配列の右端から書き込んでいけば、図形の配列には元の図形と左右が「逆」になった図形が作られるでしょう。つまり「左右反転」できたわけです。
 上下反転は、コピーした図形の下端から読み込んで、それを図形データの上端から書き込みます(当然逆でも可)。
 左右反転なら、図形データと同じ形の配列wdot[32][32]に図形データをコピーした後、

・プログラム例(左右反転)

  for (i=0;i<32;i++) /* 左右逆にコピー */
      for (j=0;j<32;j++)
          dot[j][i]=wdot[31-j][i];

 とすれば良いわけです。配列の要素は、第1番目がX方向で、その大きさは32(0-31)ですから、j番目の要素を「左右逆」にしたければ、それを「31-j」に移動すれば良いわけですね。

 最後に、X-Y交換は単純にXYを入れ替えるだけです。こうすると、図形を直線Y=X(赤い線)に対して対称(折り返したような感じ)に移動できます。座標は、左上が(0、0)で右下が(31、31)。

プログラムソース表示


プログラミング資料庫 > 数学アルゴリズム演習ノート