这是一个数学问题,假如有点 A (x1,y1) 、B (x2,y2)、C (x3,y3)
计算他们的斜率 k = (y1-y2)/(x1-x2); 但是, x1如果和 x2 相等,则 k为无穷大,所以,我们代码里面,一般用数组
k = [ y1-y2 , x1-x2 ]
令 a = y1 - y2; b = x1 - x2; 然后取绝对值,在除以他们的最大公倍数,就能够将 k 化简-> 最后,k 如果相等,就是共线,事实上这也是我们常提的一个概念,叫向量,下面给出模拟代码
function gcd(a,b){
//计算最大公倍数
if(b == 0){
return a;
}
var r = a % b;
return gcd(b,r);
}
var p1 ={x:1,y:2};
var p2 = {x:2,y:10};
var a = p1.y - p2.y;
var b = p1.x - p2.x;
var g = gcd(Math.abs(a),Math.abs(b));//计算最大公倍数
a = a / g;
b = b / g;
var k = [a,b]; //向量 k
//最后,可以通过计算多个点的斜率(向量) k ,判断是否共线
|