彼岸彩虹

一道道妙趣横生的编程题目,陪伴我的小船,驶向远方的彩虹

JavaScript趣题:点、线、面

题目描述很简单,给定一些点的坐标,返回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;
}



阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/esir82/article/details/52350072
个人分类: JavaScript
所属专栏: JavaScript趣题
上一篇JavaScript趣题:出Bug的等差数列
下一篇JavaScript趣题:依赖注入
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭