Javascript 确定一个点是位于由两点定义的直线上方还是下方

标签 javascript geometry

我正在尝试计算一个点是位于由两点定义的直线上方还是下方。为了澄清,我只需要知道点是在“这一边”还是“那一边”。我意识到如果这条线是完全垂直的,就不会有“上方”或“下方”。我有一条由两点 (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/

相关文章:

c# - asp.net中通过javascript获取控件Id

javascript - JQuery addClass 以一种非常奇怪的方式工作

javascript - 对多个元素使用相同的动画

javascript - 使用 Vanilla JavaScript 棘手地在鼠标悬停时切换事件状态

geometry - 如何计算多个重叠直角多边形的面积?

swift - 动画绘制一个圆

algorithm - 检查一个变化的无向图是否至少有一个圆

algorithm - 非凸多边形内的最大圆

javascript - 使用javascript单击按钮将标签值增加一个

javascript - Circle(ARC) 渐变填充 Canvas JS