Не прав. Привожу контрпример. Если x0=1, y0=5, x1=3, y1=4, то имеем:
sqrt(x0^2+y0^2) = sqrt(1+25) = sqrt(26)~=5.099
sqrt(x1^2+y1^2) = sqrt(9+16) = sqrt(25)=5
следовательно sqrt(x0^2+y0^2) > sqrt(x1^2+y1^2)
однако при этом
abs(x0)+abs(y0) = 1+5=6
abs(x1)+abs(y1) = 3+4=7
следовательно abs(x0)+abs(y0) < abs(x1)+abs(y1)
На самом деле, работая с расстояниями, часто можно обойтись без операции извлечения квадратного корня. Достаточно иметь операцию возведения в квадрат. Потому что если sqrt(x0^2+y0^2)>sqrt(x1^2+y1^2) - то x0^2+y0^2 > x1^2+y1^2. Если расстояние, к тому же, сравнивается с константой - то ее квадрат можно вычислить заранее один раз.
Квадраты вычислять легко с помощью таблицы квадратов, если исходные числа 8-битные. Таблица занимает в этом случае всего 512 байт памяти.
---------- Post added at 18:22 ---------- Previous post was at 18:14 ----------
В некоторых случаях работа с квадратами еще более упрощается, если вычисляются квадраты последовательных целых чисел, потому что:
(x+1)^2 = x^2 + 2*x + 1
То есть квадрат следующего числа равен квадрату предыдущего плюс единица плюс удвоенное предыдущее число. Это тождество используется в алгоритме Брезенхама рисования окружности.





Ответить с цитированием