
我想要实现像autocad的套索选择在2D.Blue是完全包含和绿色是部分(例如:如果你选择一个部分线)。我正在寻找一个足够好的算法来实现这个目标。套索选择是任意多边形(可以是凹的或凸的,也可以是自相交的)。
首先,我似乎必须将多边形转换为凸多边形或三角剖分。然而,对于.net,我找到了这个LibTessDotNet。
三角剖分方法的问题是,我不知道如何知道,如果一条线是完全包含,因为部分线可以在任何多边形。
其他的想法是使用库,如剪刀,并确定通过布尔运算的交集。对于完全,我会做差分(应该是空的)或交集的部分。
有没有更好的工作方法?
发布于 2015-04-30 16:38:02
就我个人而言,我使用“多边形中的点”算法实现了曲线(如直线、圆、偏圆、椭圆、...etc)的Lasso选择,如下所示:
1)对于给定的曲线,从曲线中抽取几个点。
2)对于每个取样点,检查该点是否位于由Lasso路径形成的多边形内。如果有两个以上的点在拉索路径内,这条曲线是部分封闭的。如果所有采样点都在Lasso路径内,则完全封闭此曲线。
您可以从互联网上获得“点在多边形”算法和源代码,如在这个链接(http://alienryderflex.com/polygon/)。
如果你有许多曲线,并开始担心性能,那么你可以检查曲线的边框是否与拉索路径的边框相交。如果没有,则可以在搜索中跳过这条曲线。但是要做到这一点,就需要在每条曲线上先计算一个边界框,并且你需要确保它是最新的,并对曲线进行任何可能的更改。
https://stackoverflow.com/questions/29968271
复制相似问题