✐拒绝平躺,每日一卷(第11天)
目录
1.向量解法
2.斜率解法
3.面积解法
⛅题目:
给定一个数组 points ,其中 points[i] = [x, y] 表示 X-Y 坐标平面上的一个点
如果这些点不共线 则返回 true ,共线则返回false。
例1:
输入:points = [[1,1],[2,3],[3,2]]
输出:true
例2:
输入:points = [[1,1],[2,2],[3,3]]
输出:false
题目分析:
运用中学的知识就可以由很多种解法
1.向量解法
假设有三点A(a,b),B(c,d),C(e,f)
向量AB = (c-a, d-b) 向量BC = (e-c, f-d)
1.若AB和BC不共线,则AB+BC不等于(C点和A点不重合时,重合时共线)
2.若AB和BC共线,则AB+BC=0向量(AB,BC反向),或AB-BC=0向量(AB,BC同向)
2.斜率解法
先判断有没有相同的点,再判断三点共不共线。
共线的判断方法是,计算点1和点0的斜率,再计算点2和点1的斜率,看两个斜率相不相同。
坑点有三个:
除法计算时除数不能为0;
斜率可能是浮点数所以要用1.0 *一下把计算结果转成浮点数;
两个浮点数比相同不能用等号,要用相减的差和0.0001的比大小来表示
3.面积解法
我们知道
1.当三点共线,三点构成三角形面积为0
2.当三点不共线,三点构成三角形面积不为0
假设有三点A(a,b),B(c,d),C(e,f)
向量AB = (c-a, d-b) 向量BC = (e-c, f-d)
1.若AB和BC不共线,则AB+BC不等于(C点和A点不重合时,重合时共线)
2.若AB和BC共线,则AB+BC=0向量(AB,BC反向),或AB-BC=0向量(AB,BC同向)
先判断有没有相同的点,再判断三点共不共线。
共线的判断方法是,计算点1和点0的斜率,再计算点2和点1的斜率,看两个斜率相不相同。
坑点有三个:
除法计算时除数不能为0;
斜率可能是浮点数所以要用1.0 *一下把计算结果转成浮点数;
两个浮点数比相同不能用等号,要用相减的差和0.0001的比大小来表示
3.面积解法
我们知道
1.当三点共线,三点构成三角形面积为0
2.当三点不共线,三点构成三角形面积不为0
我们知道
1.当三点共线,三点构成三角形面积为0
2.当三点不共线,三点构成三角形面积不为0
知道三点计算三角形面积的公式有很多种,现在介绍下面这一种。
S=1/2[(x1y2-x2y1)+(x2y3-x3y2)+(x3y1-x1y3)
代码实现
def collinear(points):
return (points[0][0] * (points[1][1] - points[2][1]) + points[1][0] * (points[2][1] - points[0][1]) + points[2][0] * (points[0][1] - points[1][1])) != 0
很简短,所以解决问题不要复杂化,先用数学知识解决在用代码实现,效果有时会出乎意料
❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄end❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄



