题目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的异常