【问题标题】:Lasso Selection Implementation套索选择实施
【发布时间】:2015-05-01 01:53:38
【问题描述】:

我想在 2D 中实现类似 autocad 的套索选择。蓝色是完全包含,绿色是部分的(例如:如果您选择一行的一部分)。我正在寻找一个足够好的算法来实现这个目标。套索选择是任意多边形(可以是凹面或凸面或自相交)。
首先,我似乎必须将多边形转换为凸面或对其进行三角剖分。但是对于.net,我发现了这个LibTessDotNet
三角测量方法的问题是我不知道如何知道例如一条线是否被完全包含,因为线的一部分可以位于任何多边形。
另一个想法是使用像 Clipper 这样的库并通过布尔运算确定交集。对于完整的,我会做差异(应该是空的)或部分的交集。

有没有更好/更有效的方法?

【问题讨论】:

    标签: .net math graphics intersection


    【解决方案1】:

    就个人而言,我使用“多边形中的点”算法为曲线(如直线、圆、部分圆、椭圆等)实现了套索选择,如下所示:

    1) 对于给定的曲线,从中采样一些点。
    2)对于每个采样点,检查该点是否在套索路径形成的多边形内。如果套索路径中有两个以上的点,则该曲线是部分封闭的。如果所有采样点都在套索路径内,则这条曲线是完全封闭的。

    您可以从互联网上获取“多边形中的点”算法和源代码,例如此链接 (http://alienryderflex.com/polygon/)。

    如果你有很多曲线并且开始担心性能,那么你可以检查曲线的边界框是否与套索路径的边界框相交。如果不是,那么您可以在搜索中跳过这条曲线。但是这样做需要您事先为每条曲线计算一个边界框,并且您需要确保它是最新的,可以对曲线进行任何可能的更改。

    【讨论】:

    • 这可行,但我不确定它有多精确。即使您有 2-3 像素的间隙,Autocad 似乎也无法匹配完整的外壳,但多边形中的点很容易错过它。另外我不知道如何检查边界框,因为矩形的 4 个点可能不会与套索相交,但套索会与曲线相交..
    • 我关于如何使用边界框加快搜索速度的原始帖子不正确。我混淆了一个不同但相似的场景。帖子已编辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    • 2014-04-21
    相关资源
    最近更新 更多