如何在JavaScript中将鼠标点捕捉到某个角度

如何在JavaScript中将鼠标点捕捉到某个角度,javascript,geometry,html5-canvas,trigonometry,angle,Javascript,Geometry,Html5 Canvas,Trigonometry,Angle,我一直在使用JavaScript/HTML5画布开发一个应用程序。下面是一个JSFIDLE,其中包含一些代码,可以向您展示我正在做的事情: 正如您在小提琴上看到的,创建两个点后,光标开始分别捕捉到90°和180°。但是有一个bug,我不知道如何修复它。它会完美地捕捉到90°,除非您离上次创建的点太近,然后它会稍微抖动。180°捕捉是相同的,只是它比90°捕捉的抖动要远得多。它们都使用相同的代码,所以我不知道为什么它们的行为会不同,我也不知道如何消除这种抖动。这就是问题所在,让我试着解释一下我的一

我一直在使用JavaScript/HTML5画布开发一个应用程序。下面是一个JSFIDLE,其中包含一些代码,可以向您展示我正在做的事情:

正如您在小提琴上看到的,创建两个点后,光标开始分别捕捉到90°和180°。但是有一个bug,我不知道如何修复它。它会完美地捕捉到90°,除非您离上次创建的点太近,然后它会稍微抖动。180°捕捉是相同的,只是它比90°捕捉的抖动要远得多。它们都使用相同的代码,所以我不知道为什么它们的行为会不同,我也不知道如何消除这种抖动。这就是问题所在,让我试着解释一下我的一些代码

我认为混乱的部分就在顶部,
checkAngle
snapmousetoagle
功能

checkAngle
非常简单,它取最后两个创建的点和鼠标光标所在的点,测量它们边的长度,并使用余弦定律测量当前角度(另外,我不是数学家,如果有更好的方法,请告诉我)

snapMouseToAngle
稍微复杂一点。首先,它检查当前鼠标预览是水平还是垂直。然后检查角度,向当前预览坐标添加8个像素(或者我称之为一英尺),然后再次检查角度。然后它通过
snap
功能(这一大块逻辑),检查鼠标是否在
angleSnapDistance
范围内。如果是,则从当前角度减去它应该捕捉到的角度,并将该值放入剩余的
中<代码>剩余
然后除以差值,留下一个数字从鼠标位置减去


那么我做错了什么?我不知道是什么原因导致它像那样摇晃,但我肯定会感谢你们中任何一个能告诉我如何修复它的人。谢谢

设置pxPerFoot=1可消除抖动。pxPerFoot真的有必要吗?它会给观察到的鼠标坐标增加抖动。不过干得不错

对我来说,一个似乎并不比另一个更不稳定。我认为这只是一个骗局。顺便说一句,演示看起来很整洁。干得好嘿,谢谢!我很感激。不知道怎么修吗?我觉得没什么问题,谢谢!这并没有完全解决我的问题,但它让我找到了解决方案,非常感谢!没问题。出于好奇,最终的解决方案是什么?嗯,pxPerFoot变量对于程序的其他部分是必需的,所以我必须将其保持在8。但我从逻辑中删除了它,取而代之的是将angleSnapDistance除以pxPerFoot。给你:再次感谢你的帮助!