Требуется проверить, проходит ли конкретная точка, лежащая в 2D-плоскости, через определенную линию или нет.
2 заданных начальных точки: (3,1)
и (12, 3)
.Наклон линии можно рассчитать как
(y2-y1) / (x2-x1)
. Затем уравнение линии можно построить с помощью y = mx + c
, где m - наклон, а c - постоянная.Уравнение для представления линии выглядит так: 2x + 3 = 9y
Итак, чтобы проверить, проходит ли вышеуказанная линия через координату (-6, -1)
, мы просто проверяем 2x + 3 = 9y
2x + 3 = 2(-6) + 3 = -12 + 3 = -9 = 9(-1) -> true
Это легко, когда имеешь дело с ручкой и бумагой.
Однако точность в java теряется, когда наклон вычисляется как (3-1) / (12-3) = 2/9
При использовании Bigdecimal при расчете наклона выдается исключение
java.lang.ArithmeticException: не заканчивающееся десятичное расширение;нет точного представимого десятичного результата.
И с двойным
double slope = (double)(3-1)/(double)(12-3); //0.2222222222222222
// Putting (3,1) to get c
double c = (double)(1) - (double)(slope * 3); //0.33333333333333337
Hence the equation of the line is y = 0.2222222222222222(x) + 0.33333333333333337
// to check whether (-6, -1) passes through the above line, put the x coordinate
double yCoordinate = 0.2222222222222222* (-6) + 0.33333333333333337;
yCoordinate получается равным -0.9999999999999999
, который не -1
.Таким образом, результат неверен, но ответ, рассчитанный простой математикой, верен.Как я могу получить ожидаемый результат?