如何从点列表中获取折线的顶点?

How to get vertexes of polyline from a list of its points?

我有一个点(像素)列表 QList<QPoint>,代表一条看起来像正交多段线的曲线。

我的任务是将这个分割成小直线(QList<QLineF> 的实例)。为了知道上一条子线的终点和下一条子线的起点,我得知道哪些点是折线的顶点,也就是子线相交的点。

找出某个点是顶点的最佳方法是什么?

我自己找到了答案。貌似不太方便和清晰,不过还是可以的。

QList<QPoint> vertexes;

for (int i = 2; i < points.size(); i++)
{
    bool xChanged = points[i-2].x() != points[i].x();
    bool yChanged = points[i-2].y() != points[i].y();

    if (xChanged && yChanged)
        vertexes.append(points[i-1]);
}

vertexes.prepend(points.first());
vertexes.append(points.last());

我们在每次循环迭代中检查两个点——当前点和两点之前的点。如果它们的X和Y不相等,则表示曲线改变了方向,它们之间的点是一个顶点。