1

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

行示例 行示例2

当前像素为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 但我很难制定比较函数。

合适的比较函数是什么样的,或者有更优雅的方法吗?

4

1 回答 1

2

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

(currentP-lastP)*(p-currentP)

并选择点积最大的p。有关点积,请参见维基百科。

于 2012-09-17T23:18:25.320 回答