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