Geometric Algorithms III
I tried this problem before but was actually over-complicating it a lot. Problem is simpler than I originally thought. Simply use the standard equation for a line, y=ax+b. Find (a,b) given the two first points. Then for every other point, check whether (y_point - a*x_point - b) is zero. That check needs to be a statistical one since we're dealing with floating points. Also take care of the special case where the line is of the form x=constant. Code is down below, cheers, ACC.
Check If It Is a Straight Line - LeetCode
You are given an array coordinates, coordinates[i] = [x, y], where [x, y] represents the coordinate of a point. Check if these points make a straight line in the XY plane.
Example 1:

Input: coordinates = [[1,2],[2,3],[3,4],[4,5],[5,6],[6,7]] Output: true
Example 2:

Input: coordinates = [[1,1],[2,2],[3,4],[4,5],[5,6],[7,7]] Output: false
Constraints:
2 <= coordinates.length <= 1000coordinates[i].length == 2-10^4 <= coordinates[i][0], coordinates[i][1] <= 10^4coordinatescontains no duplicate point.
public bool CheckStraightLine(int[][] coordinates)
{
if (coordinates[1][0] != coordinates[0][0])
{
double a = (coordinates[1][1] - coordinates[0][1]) / (1.0 * (coordinates[1][0] - coordinates[0][0]));
double b = coordinates[1][1] - a * coordinates[1][0];
for (int i = 2; i < coordinates.Length; i++)
{
double err = coordinates[i][1] - a * coordinates[i][0] - b;
if (!IsZero(err)) return false;
}
return true;
}
else
{
for (int i = 2; i < coordinates.Length; i++)
if (coordinates[i][0] != coordinates[0][0]) return false;
return true;
}
}
private bool IsZero(double x)
{
return Math.Abs(x) <= 0.000001;
}
Comments
Post a Comment