套索选择实现

Lasso Selection Implementation

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

有什么better/working方法吗?

就个人而言,我使用 "point in polygon" 算法实现了曲线(例如直线、圆、部分圆、椭圆等)的套索选择,如下所示:

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

您可以从互联网上获取 "point in polygon" 算法和源代码,例如 link (http://alienryderflex.com/polygon/).

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