检查坐标存在于直线的两个点之间

check coordinate exists between two points of line

本文关键字:两个 之间 坐标 存在 于直线 检查      更新时间:2023-09-26

我有两个点,比方说x1,y1和x2,y2。并且我还有一个点x3,问题是,我需要检查x3,y3坐标是否出现在x1,y1和x2之间的行中,y2是否出现在javascript中。

提前谢谢。

试试这个:

var point_a = [0, 0];
var point_b = [100, 200];
var coord = [50, 100];
function checkCoordinate(coord) {
    var slope = (point_b[1] - point_a[1]) / (point_b[0] - point_a[0]);
    var newSlope = (point_b[1] - coord[1]) / (point_b[0] - coord[0]);
    if (coord[0] > point_a[0] && coord[0] < point_b[0] && coord[1] > point_a[1] && coord[1] < point_b[1] && slope == newSlope) {
        alert('Yes! they are in the same line.');
    } else {
        alert('No :/');
    }
}
checkCoordinate(coord);

Fiddle

首先,验证x2、y2(数字)不等于任一终点:

您可以创建函数来检查这一点,如(伪代码):

IsNearZero(value) 
   if(abs(value) < tolerance) return true
   return false

因此://假设返回错误意味着(x2,y2)不在它们之间。

if((IsNearZero(x2-x1) && IsNearZero(y2-y1))
   return false 
if(IsNearZero(x2-x3) and IsNearZero(y2-y3))
   return false

现在检查(x2,y2)是否在点之间:

// Left Edge
if((x1 < x3) && (x2 < x1))
   return false
if((x3 < x1) && (x2 < x3))
   return false
// Bottom Edge
if((y1 < y3) && (y2 < y1))
   return false
if((y3 < y1) && (y2 < y3))
   return false

对右边缘和下边缘进行类似的测试。。。

最后,取两条线的叉积:

第一段:(x1,y1,0)->(x2,y2,0)-->(x2-x1,y2-y1,0

第二段:(x1,y1,0)->(x3,y3,0)-->(x3-x1,y3-y1,0)

if(不是IsNearZero((x2-x1)(y3-y1)-(y2-y1)(x3-x1))返回错误

现在,返回true。。。