题目描述很简单,给定一些点的坐标,返回true如果它们在同一条直线上。
比方说[7, 4],这代表一个点。
onLine([[1,2], [7, 4], [22, 9]]); // returns true onLine([[1,2], [-3, -14], [22, 9]]); // returns false
看到这个题目,我首先在脑海中浮现出一个平面,紧接着出现了一个直角坐标系。
我在坐标系上按照中学数学老师以前教给我的方法,把这些点一个个地描在坐标系上。
然后把点与点间,用一条条线段连接在一起。
那么,怎么判断它们在同一条直线上?
我很快想到了斜率。
若直线上任意两点为(x1,y1)、(x2,y2)则直线斜率k=(y2-y1)/(x2-x1)。
如果这些线段的斜率都是一样的,那么它们肯定在同一条直线上!
在程序中,我只要判断线段间的斜率,不一样就返回false。
根据上面的思路写出代码:
function onLine(points) { var slope; for(var i=0;i<points.length-1;i++){ var p1 = points[i]; var p2 = points[i+1]; var currentSlope = (p2[1] - p1[1]) / (p2[0] - p1[0]); if(slope){ if(slope !== currentSlope){ return false; } } else{ slope = currentSlope; } } return true; }
以上就是JavaScript趣题:点、线、面的内容,更多相关内容请关注PHP中文网(www.php.cn)!