我有两点,比如说x1,y1和x2,y2。 我还有一点x3,y3, 这里是问题,我需要检查是x3,y3坐标出现在x1,y1和x2之间的行中,y2是否发生在javascript中。
提前致谢。
答案 0 :(得分:1)
试试这个:
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);
答案 1 :(得分:0)
首先,验证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) - &gt; (x2,y2,0) - &gt; (x2-x1,y2-y1,0)
第二段:(x1,y1,0) - &gt; (x3,y3,0) - &gt; (x3-x1,y3-y1,0)
if(不是IsNearZero((x2-x1)(y3-y1) - (y2-y1)(x3-x1)) 返回错误
现在,返回true ...