【问题标题】:Javascript Determine if a point resides above or below a line defined by two pointsJavascript确定一个点是否位于由两点定义的线的上方或下方
【发布时间】:2016-04-07 21:03:31
【问题描述】:

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

我将此代码与一个公式结合使用,以确定原始点击的偏转角度。但我无法确定鼠标现在是在初始点击上方还是下方。 (再次请原谅“上面”和“下面”)

【问题讨论】:

    标签: javascript geometry


    【解决方案1】:

    利用叉积属性的简单解决方案。

    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
    

    【讨论】:

      【解决方案2】:

      我会尽力为您提供一般解决方案。

      如何检查精确点是否高于或低于线函数:

      想象一下,我们有一行f(x) = 4x + 2。我们需要检查,如果点(x1, y1) 低于或高于线,我们需要计算 f(x1) 并将其与 y1 进行比较。

      如果f(x1) &gt; y1 表示,(x1, y1) 在该行下方。

      如果f(x1) &lt; y1 表示在线上方的点(x1, y1)

      如果f(x1) = y1 - 指向一条直线。

      你可以在情节上看到:

      所有线函数看起来都像f(x) = k * x + b,所以,你需要知道kb 常量才能知道确切的线函数。

      如何通过两点得到线函数:

      想象点A (x_a, y_a)B (x_b, y_b),我们想得到线函数,我们需要求解两个方程组:

      y_a = k * x_a + b

      y_b = k * x_b + b

      这很容易。在您知道kb 之后,您可以检查是否低于或高于AB 线

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-10-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-29
        • 1970-01-01
        • 2013-11-08
        相关资源
        最近更新 更多