double m = (b.y-a.y)/(b.x-a.x);
double b1 = a.y - m * x;
double y = m * x + b1;
C ++ не использует то, что вы делаете со значением, чтобы повлиять на его вычисление.Тот факт, что вы присваиваете эти значения значениям типа double, не означает, что они вычисляются как значения типа double.Так как математика для целых чисел, вы получаете целочисленную математику, которая определенно не то, что вы хотите.
Одно исправление:
double m = (b.y-a.y) / (double) (b.x-a.x);
double b1 = a.y - (double) m * x;
double y = m * (double) x + b1;
При форсировании хотя бы одного параметрачтобы быть двойным в каждой операции, вы заставляете другую также быть удвоенной и заставляете операцию выполняться на двойниках.
Обратите внимание, что первая строка безопасна, только если y
подписанный тип.Если нет, то (b.y-a.y)
может потеряться.В этом случае вам нужно (b.y - (double) a.y)
.