判断给定的点们是否共线

题目1232. Check If It Is a Straight Line,题目要求判断给定的点是否都是共线的,如果直接使用直线方程,肯定需要涉及计算斜率,这涉及除法,一旦涉及除法,那么要考虑,两个点的x是否相同,还是涉及浮点数比较。越来越麻烦。
可以考虑使用三点形成的三角形的面积公式,只要有这么三个点形成的三角形的面积不是0,那么,肯定,这三个点不共线。
参考文档
设三点坐标,A(a,b),B(c,d),C(e,f),则三角形面积为

S=|ad+be+cf-af-bc-de|/2
这其实是一个三阶行列式的一半
三角形面积公式

不过不用真的计算出三角形的面积,所以不用除以二就行,而且,不用除以二,也避免了当绝对值为1时,整数除法结果为0的错误。

2021/1/31补充

力扣1037. 有效的回旋镖评论区老哥十字相乘太秀了

bool isBoomerang(int** points, int pointsSize, int* pointsColSize){
    int x1 = points[0][0] - points[1][0];
    int y1 = points[0][1] - points[1][1];
    
    int x2 = points[0][0] - points[2][0];
    int y2 = points[0][1] - points[2][1];
    
    return x1 * y2 != x2 * y1;
}

避免了x差值为0是,除数为0的异常

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值