Javascript确定某个点是位于由两个点

时间:2016-04-07 21:03:31

标签: javascript geometry

我试图计算一个点是位于由两个点定义的线之上还是之下。为了澄清,我只需要知道这一点是否已经开始,这一方面"或者"那边"。我意识到如果线条是完全垂直的,那么就没有"以上#34;或"以下"。我有两行(centerX,centerY)(xprime,yprime)定义的一行。为简单起见centerX,centerY可以转换为(0,0)。我想确定(mouseX,mouseY)是否高于或低于该行。

我试图使用这个公式,但它没有给我我预期的结果。

var position = Math.sin((xprime -centerX) * (mouseY - centerY) - (yprime - centerY) * (mouseX - prime));

位置的值似乎从正到负摆动,因为mouseX,mouseY值围绕直线旋转。我的印象是当鼠标位置(mouseX,mouseY)划过线时,符号会从正变为负一次。线上方的值将为正值,下面的值将为负值。

我将此代码与公式结合使用,以确定原始点击的偏转角度。但我无法确定鼠标现在是否位于初始点击之上或以下。 (再次请原谅"以上"以及"以下")

2 个答案:

答案 0 :(得分:2)

利用跨产品属性的简单解决方案。

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

答案 1 :(得分:0)

我会尝试给你一般解决方案。

如何检查确切点是否高于或低于线功能:

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

如果f(x1) > y1意味着,(x1, y1)就行了。

如果f(x1) < y1表示该行上方的点(x1, y1)

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

你可以看情节:

enter image description here

所有行函数看起来都像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