8

我正在开发一个 Mac OS X 应用程序,作为它的 UI 的一部分,它将在它的主视图中显示许多可以选择的视觉元素。这些元素可以真正定位在视图中的任何位置。UI 将支持选择元素的各种方式:矩形选框选择、椭圆选框选择和“自由”套索选择。

我已经有矩形和椭圆选框工作。该算法非常简单;如果元素的区域与矩形/椭圆的区域相交,则该元素被视为“已选中”。

套索选择将像在 Photoshop 等现代图像处理应用程序中一样工作;用户可以单击并拖动一条将自行关闭的路径,并且将选择包含在绘制的路径中的元素。

该算法可能比矩形/椭圆选择复杂得多,因为选择的形式不受限制。我想知道是否有人有编写这样的东西的经验,或者您是否可以为我指出正确的方向,即需要什么样的编程技术,以及该算法可以工作的最有效方式是什么。

提前致谢。

4

3 回答 3

7

我能想到的唯一方法是将套索轮廓视为多边形。然后,您可以使用任何标准的点内多边形测试来检查要选择的元素。

当多边形与自身相交时,您必须做出决定(例如图 8)。

在构建多边形时,为了防止它得到太多的点,也许你可以跳过离前一个点太近的点(可能是 3 个像素左右,取决于你的应用程序)。

于 2010-01-16T23:20:47.420 回答
2

您正在查看多边形问题中的一个点: http ://en.wikipedia.org/wiki/Point_in_polygon如果您可以保证多边形是凸的(不太可能),那么算法就会变得更简单。

于 2010-01-16T23:21:29.697 回答
0

对于徒手套索工具,您可以采用这个非常简单的解决方案:将选择边框的所有点保存在字典中。使用xas 键和 ( y1, y2) 作为值,其中y1 <= y2. 然后遍历所有x'并查看字典中是否有条目。如果是这样,所有点,其中x' = xy >= y1 and y <= y2,都在选择中。

可能不是最好的解决方案,但它应该有效。

于 2018-01-31T12:47:27.457 回答