Уравнение скалярного произведения, которое вы вычисляете, равно нулю тогда и только тогда, когда три точки коллинеарны.Однако на машине с конечной точностью вы не хотите проверять на равенство нулю, а вместо этого проверяете на нулевое значение до некоторого небольшого допуска.
Поскольку уравнение может быть как отрицательным, так и положительным, ваш тест нене собираюсь на работу.Он вернет ложные срабатывания, когда уравнение оценивается в большое отрицательное значение.Таким образом, вам нужно проверить, что значение absolute мало:
function Collinear(const x1, y1, x2, y2, x3, y3: Double): Boolean;
const
tolerance = 0.01;//need a rationale for this magic number
begin
Result := abs((x2 - x1) * (y3 - y1) - (x3 - x1) * (y2 - y1)) < tolerance;
end;
Как точно выбрать допуск, зависит от информации, которую вы не предоставили.Откуда берутся ценности?Они размерны?