c++ - 套索线选择

标签 c++ algorithm qt geometry

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

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

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

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

enter image description here

This is not for school but rather a hobby project I am working on.

最佳答案

$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

关于c++ - 套索线选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11337052/

相关文章:

c++ - 将字符串参数传递给另一个字符串

c++ - 在 C++ 中计算巨大的斐波那契数模 M

algorithm - tv logo自动查找/定位/检测的建议或方法

javascript - 无法从 QWebView 中的 Javascript 调用 Flash (Swf) 方法

Qt 屏幕截图共享应用程序 - 如何选择屏幕区域

c++ - 键/值数组的双调排序

C++ 有什么方法可以在 main() 函数之后放置类定义?

algorithm - MPI:混淆算法实现

algorithm - 经典(基于递归)深度优先搜索是否比基于堆栈的 DFS 的内存效率更高?

linux - Qt 5.5.1 在 Archlinux 上编译结果错误 : this use of "defined" may not be portable [-Wexpansion-to-defined]