优雅的方法找到下一个像素

时间:2012-09-17 22:49:49

标签: c++ sorting line pixel

我正在追踪一条有时与其他线条相交的像素线,我正试图找到一种优雅的方式来保持同一条线。

line example line example2

当前像素为0(蓝色)。前一个像素是-1(黑色)。

在第一张图片中,有两个可能的下一个像素(绿色和红色),但应选择绿色像素(1),因为它会延续线条。

在第二张图片中有两个绿色像素(1),我同样满意 - 我不介意将它们之间的选择保留为未定义,只要它不是红色的。

在伪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,但我很难制定比较函数。

适当的比较功能会是什么样的,或者是否有更优雅的方法?

1 个答案:

答案 0 :(得分:2)

如果currentP =(x,y)是您当前的点,则lastP是前一个点,然后通过采用点积来测试所有可能的点

  

(currentP-lastP)*(P-currentP)

并选择具有最大点积的p。请参阅维基百科的点积。