题目描述:
给定一个数组 coordinates ,其中 coordinates[i] = [x, y] , [x, y] 表示横坐标为 x、纵坐标为 y 的点。请你来判断,这些点是否在该坐标系中属于同一条直线上。
输入:
coordinates = [[1,2],[2,3],[3,4],[4,5],[5,6],[6,7]]
输出:
true
代码实现:
java
//缀点成线
public class Main{
public static void main(String[] args) {
int[][] coordinates = new int[][]{{1, 2}, {2, 3}, {3, 4}, {4, 5}, {5, 6}, {6, 7}};
System.out.println(checkStraightLine(coordinates));//true
}
public static boolean checkStraightLine(int[][] coordinates) {
//设:A*X + B*Y = 0;
//将方程平移过零点
for (int i = 1; i < coordinates.length; i++) {
coordinates[i][0] -= coordinates[0][0];
coordinates[i][1] -= coordinates[0][1];
}
//归零
coordinates[0][0] = 0;
coordinates[0][1] = 0;
//计算参数
int a = coordinates[1][1];
int b = -coordinates[1][0];
//判断剩下的点是否在该直线上
for (int i = 2; i < coordinates.length; i++) {
int[] temp = coordinates[i];//点
int x = temp[0];//横坐标
int y = temp[1];//纵坐标
if (a * x + b * y != 0) {
//如果有任意一点不满足方程:则返回结果假
return false;
}
}
//循环结束之后,则表示都满足方程:则返回真
return true;
}
}