我正在使用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
位于样条曲线与(x0; y0)和(x1; y1)之间的直线之间的区域内,则返回Point
。
在上面的示例中,对于整个“星星”区域,它将返回true:
p0 -----------
*********\
******\
***\
*\*
\*******
`------------- p1
但只想检测点何时正好位于样条曲线上。
有没有办法达到我想要的目的?
任何想法都非常感谢!
编辑: 我在文档中找到了我的问题的解释,但这并没有帮助我找到解决方案:
包含和交叉方法 考虑Shape的内部 它所包围的区域就像它一样 填充。这意味着这些方法 考虑未封闭的形状 隐含地为了目的而关闭 确定形状是否包含或 相交矩形或形状 包含一个观点。
答案 0 :(得分:1)
做一个曲线回到起点。但是,对于用户来说,确实完全在你的曲线上是非常非常困难的!