我正在尝试计算一个点是位于由两点定义的直线上方还是下方。为了澄清,我只需要知道点是在“这一边”还是“那一边”。我意识到如果这条线是完全垂直的,就不会有“上方”或“下方”。我有一条由两点 (centerX, centerY) 和 (xprime, yprime) 定义的线。为简单起见,centerX、centerY可以转换为(0,0)。我想确定 (mouseX, mouseY) 是在那条线的上方还是下方。
我尝试使用这个公式,但它没有给我预期的结果。
var position = Math.sin((xprime -centerX) * (mouseY - centerY) - (yprime - centerY) * (mouseX - prime));
position 的值似乎随着 mouseX、mouseY 值围绕直线旋转而从正到负随机振荡。我的印象是,当鼠标位置 (mouseX,mouseY) 越过这条线时,符号会从正变为负一次。高于该线的值为正,低于该线的值为负。
我将此代码与公式结合使用,以确定原始点击的偏转 Angular 。但我无法确定鼠标现在是在初始点击上方还是下方。 (再次请原谅“上面”和“下面”)
最佳答案
利用叉积属性的简单解决方案。
dx = xprime - centerX
dy = yprime - centerY
mx = mouseX - centerX
my = mouseY - centerY
cross = dx * my - dy * mx //zero means point on line
below = (cross > 0) //mouse is "at the right hand" of the directed line
if dx <> 0 then // check for vertical line
if dy/dx < 0 then //negative slope, invert result
below = not below
关于Javascript 确定一个点是位于由两点定义的直线上方还是下方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36487156/