如何选择Bezier样条曲线?

时间:2014-04-30 05:53:52

标签: c# custom-controls

我需要一种方法来检查用户是否点击了Bezier样条曲线。我目前的方法是将其拆分为段,然后检查命中点是否足够接近这些段中的一个(在数学点到段距离方法方面足够接近)。但这种方法有其缺点:

Bezier selection

如您所见,红点标记的点不会被视为活动点,尽管它们应该是活动的。当然,我可以增加细分数量,但这实际上会使解决方案变得更糟,因为活动区域之间会有更多的差距。

如何可靠地检查Bezier样条附近的用户点击区域?

请注意,我在StackOverflow上发布了这个,而不是它的Math对应物,因为我实际上需要比数学解决方案更可靠的启发式方法(后者通常可能会慢慢用于我的程序,这些检查必须在实时,在鼠标移动过程中。)

2 个答案:

答案 0 :(得分:2)

这应该是评论,但我还不能发表评论,所以我将其作为答案发布。

您是否尝试过测量贝塞尔曲线的控制点多边形而不是贝塞尔曲线本身?贝塞尔曲线位于其控制点的凸包内。如果您的贝塞尔曲线彼此不太接近,则可能足以检查用户是否在控制点的船体内部(或靠近)点击。

答案 1 :(得分:2)

如何在红点和线段交叉点之间添加点 - 点距离计算? 在点对点距离计算中使用的距离相同,它应填补空白并更好地工作。

enter image description here