1

私は時々他の線と交差する1ピクセルの線をたどっています、そして私は同じ線にとどまるためのエレガントな方法を見つけようとしています。

線の例 行example2

現在のピクセルは0(青)です。前のピクセルは-1(黒)です。

最初の画像には、次の2つのピクセル(緑と赤)があります1が、線が続くため、緑のピクセル()を選択する必要があります。

2番目の画像には、同じように満足できる2つの緑色のピクセル(1)があります。赤色でない限り、どちらかを未定義のままにしておいてかまいません。

pseudo-cppの場合:

vector<Point> points;

for (i = x - 1; i < x + 2; i++) {
    for (j = y - 1; j < y + 2; j++) {
        if (i == x && j == y) {
            continue;
        }

        if (IS_ON(i, j) && NOT_VISITED(i, j)) {
            points.push_back(Point(i, j));
        }
    }
}

// sort points to find closest to opposite lastX,lastY

lastX = x;
lastY = y;

x = points[0].x;
y = points[0].y;

ソートステップは私が苦労しているビットです。

std :: sortの使用を考えていましたが、比較関数を作成するのに苦労しています。

適切な比較関数はどのようになりますか、それともより洗練されたアプローチがありますか?

4

1 に答える 1

2

currentP =(x、y)が現在のポイントであり、lastPが前のポイントである場合、ドット積を使用してすべての可能なポイントpをテストします。

(currentP-lastP)*(p-currentP)

そして、最大の内積を持つpを選択します。ドット積については、ウィキペディアを参照してください。

于 2012-09-17T23:18:25.320 に答える