套索选择实施

时间:2015-04-30 12:52:09

标签: .net math graphics intersection

enter image description here

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

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

1 个答案:

答案 0 :(得分:1)

就我个人而言,我使用“多边形点”算法对曲线(例如直线,圆,部分圆,椭圆等等)进行了Lasso选择:

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

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

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