JavaScript趣题:点、线、面

原创 2016年08月29日 09:29:56

题目描述很简单,给定一些点的坐标,返回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趣题:依赖注入

这是一个编写JavaScript版依赖注入的题目。
  • esir82
  • esir82
  • 2016年08月30日 07:50
  • 483

JavaScript趣题:大整数字符串相加

对于两个大整数字符串相加,很多语言提供了原生支持。 比如Java,提供了BigInteger类,而JS这方面是没有支持的,实现就要靠咋们自己了。 下面这个字符串相加函数,接收两个字符串参数,并返回...
  • esir82
  • esir82
  • 2016年11月23日 16:07
  • 370

JavaScript趣题:螺旋矩阵

给定一个n * n的二维数组,使用螺旋矩阵算法,遍历它,并返回路径。 例子如下: array = [[1,2,3], [4,5,6], [7,8,9]] snail(arr...
  • esir82
  • esir82
  • 2016年11月05日 16:22
  • 464

JavaScript趣题:波浪形排序

这篇博文,我将介绍一种“波浪形排序”。 假如数组中的数字代表波浪的高度,那么两个相邻的数字,更大点的数字代表波峰,更小点的数字代表波谷。 下面就是一个典型的“波浪形数列”: [4, 1, 7, ...
  • esir82
  • esir82
  • 2017年07月23日 10:50
  • 86

JavaScript趣题:Tribonacci数列

下面,我想介绍一下Fibonacci(斐波那契数列)的大兄弟,Tribonacci数列。 正如它的名字所暗示的那样,它和斐波那契数列方式很相像,但又有不同的地方。 如果我们用[1,1,1]开始这个数列...
  • esir82
  • esir82
  • 2016年09月24日 09:56
  • 953

JavaScript趣题:构建URI

创建一个UriBuilder对象,使得你可以轻松地对一个URI进行配置,参数调整。 var builder = new UriBuilder('http://www.codewars.com')...
  • esir82
  • esir82
  • 2016年09月19日 12:38
  • 637

JavaScript趣题:排列组合实战

首先,来看这样一张图,它类似于以前老式平板手机的按键桌面。 我们如果按了“2”这个键,那么可以调出“A”,“B”,“C”三种字母来。 除了“1”和“0”键,其它数字键都可以调出多种字母来。...
  • esir82
  • esir82
  • 2016年10月12日 13:36
  • 539
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JavaScript趣题:点、线、面
举报原因:
原因补充:

(最多只允许输入30个字)