如何从点列表中获取折线的顶点?
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不相等,则表示曲线改变了方向,它们之间的点是一个顶点。
我有一个点(像素)列表 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不相等,则表示曲线改变了方向,它们之间的点是一个顶点。