将圆圈捕捉到矩形/线条

时间:2014-01-27 07:40:03

标签: c# wpf geometry

我正在尝试在WPF中为圆圈(代表我的鼠标)实现某种捕捉功能,它应该捕捉到另一个对象(通常这将是一条线或一个矩形)。

enter image description here

有没有办法在没有自己完成所有计算的情况下使用WPF执行此类功能,如果没有,是否有一种简单的方法(库?)来获取此类信息?

编辑:我想将圆圈的边框捕捉到矩形/线条的边框。

2 个答案:

答案 0 :(得分:1)

这种功能只需要几行代码来复制......我怀疑你会找到一个代码库'库'来为你做。方法如下:

保留一个包含4个Point的集合,这些集合形成每个形状的边界框。然后,您需要处理MouseMove上的Canvas事件或形状容器。在这种情况下,您只需要确定当前鼠标位置是否与任何形状边缘相距一定距离......您将对非矩形形状进行更多的工作来计算它们的边缘,但是校长是一样的。

如果检测到附近形状的存在,则只需将最近尺寸的值更改为附近形状的值即按钮。就是这样......比你想象的容易得多。

答案 1 :(得分:1)

作为第一步,你应该在矩形上找到最接近光标的点,以及两者之间的距离:扩展矩形的边缘,将平面划分为9个区域。根据光标所在的区域,搜索距离将是到角落的距离(欧几里德距离公式)或到边缘的距离(横坐标或纵坐标的差异)。

从此距离减去圆半径。这将告诉您是否足够近以便拍摄。

当可以捕捉时,将光标沿着从当前光标位置到最近点的直线移动,直到碰到角落或边缘。您将需要使用线段的参数方程。

完整的讨论需要一些小心,但只涉及简单的数学。

类似的方法可以捕捉到线段。这是一个技巧:如果您旋转线段使其成为水平线,您可以将线段视为退化矩形并使用相同的捕捉算法。旋转线段和光标,应用捕捉逻辑,然后反向旋转更新的光标。