我正在使用 GeneralPath 绘制一些样条曲线,如下所示:
GeneralPath path = new GeneralPath();
path.moveTo(x0, y0);
path.curveTo(x0 + 100, y0, x1 - 100, y1, x1, y1);
((Graphics2D) g).draw(path);
基本上,这会在点 (x0;y0) 和点 (x1;y1) 之间绘制一条看起来像电缆或电线的样条线。
p0 --
\
\
`-- p1
绘图没问题,但现在我想检测鼠标何时移动并悬停在这条样条曲线上。问题是该contains(Point)
方法似乎没有做我想要的。true
如果Point
位于样条线与 (x0;y0) 和 (x1;y1) 之间的直线之间的区域内,则返回。
在上面的示例中,它将为整个“星星”区域返回 true:
p0 -----------
*********\
******\
***\
*\*
\*******
`------------- p1
但只想检测点何时恰好位于样条曲线上。
有什么方法可以实现我想要的吗?
任何想法都非常感谢!
编辑:我在文档中找到了我的问题的解释,但这并不能帮助我找到解决方案:
contains 和 intersects 方法将 Shape 的内部视为它包围的区域,就好像它被填充一样。这意味着这些方法将未闭合的形状视为隐式闭合,以确定形状是否包含或与矩形相交,或者形状是否包含点。