【问题标题】:How to get vertexes of polyline from a list of its points?如何从点列表中获取折线的顶点?
【发布时间】:2019-01-03 00:54:44
【问题描述】:

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

我的任务是将这条分割成小的直线(QList<QLineF> 的一个实例)。为了知道上一条子线的结束和下一条子线的开始,我要知道哪些点是折线的顶点,即子线相交的点。

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

【问题讨论】:

  • 你是说你有一个点列表,其中一些相邻点是共线的,你只想找到指示弯曲的点?
  • 在我看来,折线中的所有点都是顶点(顶点),所以我会遍历点列表并从当前索引开始并在索引+1 结束(所以让确保不要迭代到最后一个元素)。如果这与您的想法不符,请详细说明
  • @Amfasis 为您提炼了一个问题。
  • @Nikita 好的,我现在明白了,但你已经找到了答案 ;-) 为了更好地理解,我会在你添加的图像上画一些小点

标签: algorithm qt math polygon polyline


【解决方案1】:

我自己找到了答案。看起来不是很方便和清晰,但它确实有效。

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不相等,则表示曲线改变了方向,它们之间的点是一个顶点。

【讨论】:

    猜你喜欢
    • 2021-05-31
    • 1970-01-01
    • 2015-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-18
    • 2017-05-07
    • 1970-01-01
    相关资源
    最近更新 更多