ページ 11

ブレゼンハムの計算について

Posted: 2014年11月25日(火) 12:04
by ガラくた屋
よろしくお願いします&この前はありがとうございました。
今回も分からなかった所があったので使わせてもらいました。
ブレゼンハムを調べていたのですがerr変数の使い方がいまいち理解できてない点と
座標の始点と原点の大きさを逆にしたときのカラーの色が変になっている気がする点
大まかにこの2点です。
環境はVC++2010、コマンドプロンプト 
Ps bbは画面表示とカラー設定用の構造体です。

コード:

 void line_C3(int ix1, int iy1, int c1, int ix2, int iy2 ,int c2, Ps *bb) {

     int x = ix1;
     int y = iy1;
     int dx = abs(ix2 - ix1);
     int dy = abs(iy2 - iy1);
     int sx = (ix2>ix1)?1:-1;
     int sy = (iy2>iy1)?1:-1;
	  int  color_d = 0;//カラー情報用
	 double cd = 0;//カラー計算用
     if (dx >= dy) {
	  int err = 2*dy - dx;
	  int i = 0;
	  for(i=0; i<=dx; ++i) {
		  //カラー処理
		 cd = (double)c1 + (double)(c2-c1) * (double)(x-ix1 )/(double)(ix2-ix1 - 1 );
	      color_d = (int)floor(cd);	
		  bb->bb_color[x][y] = color_d;
		 bb->back_buffer[x][y] = 'a';
	       x += sx;
	       err += 2*dy;
	       if (err >= 0) {
		    y += sy;
		    err -= 2*dx;
	       }
	  }
     }else{
	  int err = 2*dx - dy;
	  int i = 0;
	  for(i=0; i<=dy; ++i) {
		  //カラー処理
		  cd = (double)c1 + (double)(c2-c1) * (double)(y-iy1 )/(double)(iy2-iy1 -1 );
	      color_d = (int)floor(cd);	
		    bb->bb_color[x][y] = color_d;
		 bb->back_buffer[x][y] = 'a';
	       y += sy;
	       err += 2*dx;
	       if (err >= 0) {
		    x += sx;
		    err -= 2*dy;
	       }
	  }
     }
  }