Javascript 接近多段线时检测鼠标轨迹

Javascript 接近多段线时检测鼠标轨迹,javascript,Javascript,我有一道编程题,有一些数学权重。我有一张上面有形状(多段线)的地图。我可以将这些形状的屏幕坐标转换成地图坐标,然后进行反转。我正在捕捉鼠标位置并在地图上移动。当我移动鼠标时,如果我靠近地图上另一个淹没的形状,我如何识别。我想在鼠标光标周围创建一个点半径,然后不断循环使用可用的形状(我想我可以将它们的坐标加载到数组中)进行匹配。然而,我认为这将是非常缓慢的。关键是,当我在附近时(例如15px),我会将缪斯的位置捕捉到接近的形状。有什么建议吗 如果您拥有形状的每个点/线段(您应该使用多段线),下面是

我有一道编程题,有一些数学权重。我有一张上面有形状(多段线)的地图。我可以将这些形状的屏幕坐标转换成地图坐标,然后进行反转。我正在捕捉鼠标位置并在地图上移动。当我移动鼠标时,如果我靠近地图上另一个淹没的形状,我如何识别。我想在鼠标光标周围创建一个点半径,然后不断循环使用可用的形状(我想我可以将它们的坐标加载到数组中)进行匹配。然而,我认为这将是非常缓慢的。关键是,当我在附近时(例如15px),我会将缪斯的位置捕捉到接近的形状。有什么建议吗

如果您拥有形状的每个点/线段(您应该使用多段线),下面是一个可能的快速简单例程:

对于每个形状 通过平均每个组成点来计算形状中心(即-对于五角大楼,将所有五个点x相加,除以5-对所有点y进行相同操作)。称之为平均形状.x和形状.y。使用距离公式计算鼠标的距离。(Mouse.x-Shape.x)^2+(Mouse.y-Shape.y)^2。。。你不必求它的平方根,因为你只对最接近的形状感兴趣

跟踪每个形状的最小距离“平方”。最小值是最近的形状中心

如果希望捕捉到具有最大范围的行为,只需确保距离平方<像素距离平方


如果您想使其非常有效,形状中心不需要不断重新配置,只需计算一次。如果您在屏幕空间和您提到的其他坐标之间进行转换,则中心将与任何其他点一样进行缩放和平移。

现在-如果您真的想使其完美-您可以计算光标到每个线段的距离

对于每个线段(由点D和点E定义)

按以下格式计算DE段的直线公式:

Ax+By+C=0

A=D.y-E.y

B=E.x-D.x

C=(插入点D)=-1*(A*D.x+B*D.y)

现在将光标位置插入公式:

A*cursor.x+B*cursor.y+C=到线段的距离

*一件事-这是到无界线的距离。现在需要确保位于两个线段点之间。因此,确保光标、D、E三角形中的角度都小于90度。有很多方法可以做到这一点,看看点积公式学习一个快速的

现在,如果anlges小于90,则使用到直线的距离,否则,使用到线段任一点的最小距离(D&E)。现在您有了完整的“捕捉到线”功能