套索线选择

时间:2012-07-05 02:00:12

标签: c++ algorithm qt geometry

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

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

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

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

enter image description here

  

这不是针对学校而是我正在研究的业余爱好项目。

1 个答案:

答案 0 :(得分:0)

$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