在某个项目中遇到下面的代码,用来判断直线是否相交,但不明白其中的数学原理是什么,请各位指点一下,非常感谢~
//这个方法看起来像是向量点积,但又似乎不是
var vectorMulti = function(ax, ay, bx, by) {
return ax*by-bx*ay;
};
var isCrossing = function(p1, p2, p3, p4) {
var v1 = vectorMulti(p4.X - p3.X, p4.Y - p3.Y, p1.X - p3.X, p1.Y - p3.Y);
var v2 = vectorMulti(p4.X - p3.X, p4.Y - p3.Y, p2.X - p3.X, p2.Y - p3.Y);
var v3 = vectorMulti(p2.X - p1.X, p2.Y - p1.Y, p3.X - p1.X, p3.Y - p1.Y);
var v4 = vectorMulti(p2.X - p1.X, p2.Y - p1.Y, p4.X - p1.X, p4.Y - p1.Y);
return (v1*v2)<0 && (v3*v4)<0;
};
var p1 = {X:1,Y:1},
p2 = {X:2,Y:2},
p3 = {X:1,Y:2},
p4 = {X:3,Y:0};
console.log(isCrossing(p1,p2,p3,p4)); //true
这是测试用例: