c++ - 查找行中下一个像素的优雅方法

标签 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 但我很难制定比较函数。

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

最佳答案

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

(currentP-lastP)*(p-currentP)

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

关于c++ - 查找行中下一个像素的优雅方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12468132/

相关文章:

c++ - 为什么在 CentOS 7 上选择了错误的 GCC 7.2 libstdc++ ABI?

python - 如何对包含 float 以及多个不同位置处的前导 + 或 - 号的 Python 字符串进行高效排序

r - ggplot 随着时间的推移每个唯一实例的多线图

line - 在给定距离沿线查找 3D 点

android - 如何在android中显示垂直线

c++ - MITM 代理,TLS 1.2 证书验证失败

c++ - Boost是否有自己的单元测试?

c++ - 为什么构造函数中的多参数在 linux 下不起作用?

Javascript - 从数组中按顺序排列生日

javascript - 如何按字符串值对数组中的对象数组进行排序?