C++ 套索选线

C++ 套索选线,c++,algorithm,qt,geometry,C++,Algorithm,Qt,Geometry,我正在使用Qt构建一个二维图形应用程序。图形具有节点和边,用户可以创建这些节点和边,并通过套索选择工具进行选择。到目前为止,我已经能够使用一个简单的算法实现节点选择。但是,现在我需要实现边选择 目前,我有三个类来表示这个图:Node、Edge和graph。节点是一个简单的X,Y容器。Edge具有指向源节点和目标节点的指针。图形包含节点和边的列表 我知道当节点是选择的一部分时如何选择边,但是当相应的节点不是选择的一部分时如何实现边选择(即边多边形相交测试)。我之所以说多边形,是因为我的套索工具构造

我正在使用Qt构建一个二维图形应用程序。图形具有节点和边,用户可以创建这些节点和边,并通过套索选择工具进行选择。到目前为止,我已经能够使用一个简单的算法实现节点选择。但是,现在我需要实现边选择

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

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

下面是我需要的算法示例(红色表示预期结果)

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


您如何表示选择?您是否将其转换为多边形(正如您提到的多边形算法中的点所建议的那样)?是的,选择由多边形表示。@Dave您是否使用
QGraphicsView
framework来显示此内容?因为我对
QGraphicsView
框架做了完全相同的事情,并且不需要任何算法,一个简单的高级调用就足够了。@totem我是,但是我使用我自己的绘制方法。我自己也想出了一个解决办法,有时间的时候我会把它贴出来。
$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