请问这一段判断直线相交代码的原理是什么?
在某个项目中遇到下面的代码,用来判断直线是否相交,但不明白其中的数学原理是什么,请各位指点一下,非常感谢~
//这个方法看起来像是向量点积,但又似乎不是
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
这是测试用例:
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
一个平面内直线 只有两个状态 香蕉或者 平行 所以只要平行的时候返回 false 就行了