【问题标题】:Lasso Line Selection套索线选择
【发布时间】:2012-07-05 02:00:12
【问题描述】:

我正在使用 Qt 构建一个 2D 图形应用程序。该图具有用户可以创建的节点和边,并且选择是通过套索选择工具完成的。到目前为止,我已经能够使用简单的Point in polygon 算法来实现节点选择。但是,现在我需要实现边缘选择。

目前我用三个类来表示这个图:节点、边和图。 Node 是一个简单的 X、Y 容器。 Edge 有一个指向源节点和目标节点的指针。并且图包含节点和边的列表。

我知道当节点是选择的一部分时我如何选择边但是当相应的节点不是选择的一部分时我如何实现边选择(即边-多边形相交测试)。我说多边形是因为我的套索工具构造了一个代表 n 边多边形的点列表。

这是我需要的算法示例(红色代表预期结果)。

这不是为了学校,而是我正在做的一个爱好项目。

【问题讨论】:

  • 你如何表示选择?您是否将其转换为多边形(正如您提到的多边形算法中的点所建议的那样)?
  • 是的,选择由多边形表示。
  • @Dave 你使用QGraphicsView 框架来显示这个吗?因为我用QGraphicsView框架做了完全一样的事情,不需要任何算法,一个简单的高层调用就足够了。
  • @totem 我是但是我使用我自己的绘画方法。我自己也想出了一个解决方案,有时间会贴出来的。

标签: c++ algorithm qt geometry


【解决方案1】:
$selected = [];

for each $polygon in $scene:
    if $polygon.intersects($selectionPolygon):
        for each $edge in $polygon:
            for each $selectionEdge in $selectionPolygon:
                if $edge.crosses($selectionEdge):
                    $selected.push($edge)
                    break
                endif
            end
        end
    endif
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-05
    • 1970-01-01
    • 1970-01-01
    • 2020-09-06
    • 1970-01-01
    • 1970-01-01
    • 2020-10-12
    相关资源
    最近更新 更多