スキャンラインベースのポリゴン塗りつぶしアルゴリズムを実装しています。私は一般的なアルゴリズムを知っており、現在C++で実装しようとしています。
エッジテーブルをアクティブなエッジリストに実装する必要があります。
アクティブエッジリストをベクトルにして、動的に簡単に挿入および削除できるようにしました。
ただし、エッジテーブルはもう少し混乱します。
ベクトルの配列を使用してエッジテーブルを実装しようとしています。ベクトルには、作成した構造体が含まれます。
これが構造体です。
struct Bucket
{
// Fields of a bucket list
int ymax, x, dx, dy, sum;
};
渡された頂点の配列を反復処理するforループがあり、バケットを作成して、エッジのyminインデックスでエッジテーブルにバケットを挿入します。
私の問題は、エッジテーブルをループして個々のバケットにアクセスするのに苦労していることです。
バケットのベクトルの配列の宣言は次のとおりです。
// This array is the edge table which has a max index of 300
// The window for the program is never more than 300 by 300
vector<Bucket> et[300];
これが、アイテムを印刷しようとしてエッジテーブルを反復処理するforループです。インデックスにイテレータと通常のintを使用しようとしましたが、各バケットの値を出力しようとするとどちらも機能しません。
// Debugging the edge table, prints out all buckets
vector<Bucket>::iterator it;
for(int j = 0; j < 300; j++)
{
for(it = et[j].begin(); it < et[j].end(); it++)
{
// printf(*it);
// printf();
}
for(int q = 0; q < et[j].size(); q++)
{
printf("ymax = %d", q[0]);
}
}