在Java中,如何检查鼠标按下是否在一条线上

在Java中,如何检查鼠标按下是否在一条线上,java,math,geometry,line,Java,Math,Geometry,Line,我正在创建一个java应用程序,并希望它能够让用户点击一行以使事件发生。直线仅由其两个端点定义,这两个端点都具有x和y坐标 关于如何检查从鼠标按下事件(具有x和y坐标)收集的位置是否可以检查,以查看它是否在这条线上,有什么想法吗 我想让线的点击检测对用户来说有一点宽容,这样只要鼠标按得离线很近,它就会被接受。一般的想法是,你应该计算点击点和线之间的距离。如果距离小于2像素,考虑点击足够接近。 如果你愿意,你可以。在Java标准库中,该类具有检查点与直线或线段之间距离的方法 double dist

我正在创建一个java应用程序,并希望它能够让用户点击一行以使事件发生。直线仅由其两个端点定义,这两个端点都具有x和y坐标

关于如何检查从鼠标按下事件(具有x和y坐标)收集的位置是否可以检查,以查看它是否在这条线上,有什么想法吗


我想让线的点击检测对用户来说有一点宽容,这样只要鼠标按得离线很近,它就会被接受。

一般的想法是,你应该计算点击点和线之间的距离。如果距离小于2像素,考虑点击足够接近。 如果你愿意,你可以。在Java标准库中,该类具有检查点与直线或线段之间距离的方法

double distance = Line2D.ptSegDist​(lineStartX, lineStartY, 
                                   lineEndX, lineEndY,
                                   clickX, clickY);

if (distance < 2) {
    // success!
}
double distance=Line2D.ptSegDist​(lineStartX、lineStartY、,
lineEndX,lineEndY,
点击X,点击Y);
如果(距离<2){
//成功!
}

总体思路是,您应该计算单击点与直线之间的距离。如果距离小于2像素,考虑点击足够接近。 如果你愿意,你可以。在Java标准库中,该类具有检查点与直线或线段之间距离的方法

double distance = Line2D.ptSegDist​(lineStartX, lineStartY, 
                                   lineEndX, lineEndY,
                                   clickX, clickY);

if (distance < 2) {
    // success!
}
double distance=Line2D.ptSegDist​(lineStartX、lineStartY、,
lineEndX,lineEndY,
点击X,点击Y);
如果(距离<2){
//成功!
}

奇怪的是,如果点的投影不属于线段,这会发生什么。然后是否返回段的每个端点之间的最小距离?是-ptSegDist返回“指定点与指定端点之间最近点之间的距离”。还有一种直线距离方法,它给出了连接两个点的无限长直线的距离。好的,那么这就是这个用例的正确行为,并且不需要太多来自OPC的代码,如果点的投影不属于线段,那么它的行为如何。然后是否返回段的每个端点之间的最小距离?是-ptSegDist返回“指定点与指定端点之间最近点之间的距离”。还有一种直线距离方法,它给出了连接两点的无限长直线的距离。好的,那么这就是这个用例的正确行为,并且不需要太多的OP代码