Важная информация

User Tag List

Страница 2 из 2 ПерваяПервая 12
Показано с 11 по 16 из 16

Тема: Расчет модуля разности чисел

  1. #11
    goblinish
    Гость

    По умолчанию

    Цитата Сообщение от Barmaley_m Посмотреть сообщение
    Для измерения расстояний в какой геометрии? Не на плоскости ли? Может лучше применять теорему Пифагора и вычислять квадрат разности, а не ее модуль?
    ага, заодно и алгоритм sqr приписать

  2. #12
    Master
    Регистрация
    27.01.2005
    Сообщений
    889
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    170
    Поблагодарили
    136 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Barmaley_m Посмотреть сообщение
    Для измерения расстояний в какой геометрии? Не на плоскости ли? Может лучше применять теорему Пифагора и вычислять квадрат разности, а не ее модуль?
    Я, конечно, строю догадки, но:

    1. В игре возможно нужно не само расстояние, а только "дальше-ближе".

    2. Очевидно, что
    SQRT(X0^2+Y0^2) > SQRT(X1^2+Y1^2) => (abs(X0)+abs(y0)) > (abs(X1)+abs(y1))

    по крайней мере для целых чисел (координаты не дробные ведь).

    3. Исходя из (2) для получения (1) достаточно иметь abs(), что и хочет автор топика.

    Я не прав?

  3. #13
    Veteran
    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,055
    Спасибо Благодарностей отдано 
    219
    Спасибо Благодарностей получено 
    47
    Поблагодарили
    31 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от SfS Посмотреть сообщение
    Я не прав?
    Не прав. Привожу контрпример. Если 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
    То есть квадрат следующего числа равен квадрату предыдущего плюс единица плюс удвоенное предыдущее число. Это тождество используется в алгоритме Брезенхама рисования окружности.

  4. #14
    Master
    Регистрация
    27.01.2005
    Сообщений
    889
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    170
    Поблагодарили
    136 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Barmaley_m Посмотреть сообщение
    Достаточно иметь операцию возведения в квадрат. Потому что если sqrt(x0^2+y0^2)>sqrt(x1^2+y1^2) - то x0^2+y0^2 > x1^2+y1^2. Если расстояние, к тому же, сравнивается с константой - то ее квадрат можно вычислить заранее один раз.

    Точно! Я помню что раньше как-то без корня обходились! Про возведение в квадрат я не подумал)) Прошу прощения.

  5. #15
    Veteran
    Регистрация
    29.12.2010
    Адрес
    Москва
    Сообщений
    1,858
    Спасибо Благодарностей отдано 
    130
    Спасибо Благодарностей получено 
    104
    Поблагодарили
    62 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от SfS Посмотреть сообщение
    Я, конечно, строю догадки, но:

    1. В игре возможно нужно не само расстояние, а только "дальше-ближе".

    2. Очевидно, что
    SQRT(X0^2+Y0^2) > SQRT(X1^2+Y1^2) => (abs(X0)+abs(y0)) > (abs(X1)+abs(y1))

    по крайней мере для целых чисел (координаты не дробные ведь).

    3. Исходя из (2) для получения (1) достаточно иметь abs(), что и хочет автор топика.

    Я не прав?
    Прав. Я так и делаю в нынешней пошаговой стратегии. Особая точность там не нужна. Главное, определить, попадает ли объект в обработку к юниту или нет.

  6. #16
    Member
    Регистрация
    10.07.2009
    Адрес
    Санкт-Петербург
    Сообщений
    121
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от moroz1999 Посмотреть сообщение
    neg? omg, я и не знал, что такой есть.
    А если бы и не было ?
    CPL : INC A

    Абсолютно тоже самое, и по размеру (2 байта) и по времени исполнения (8 тактов). Все отличие во флаге переноса, который устанавливает NEG, но не трогает CPL/INC A.
    Последний раз редактировалось Screw; 15.02.2013 в 21:16.
    ATM-Turbo1 512k
    ATM-Turbo2 1024k + TSFM
    Pentagon 128к
    Sinclair ZX-Spectrum 48+ (1шт), 128+ (1шт), +2А (2шт), +3 (3шт)

  7. #16
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

Страница 2 из 2 ПерваяПервая 12

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ответов: 16
    Последнее: 15.12.2011, 20:29
  2. Опознание процессорного модуля :)
    от Жека:) в разделе Зарубежные компьютеры
    Ответов: 5
    Последнее: 22.09.2010, 22:23
  3. Разные разности...
    от carsman в разделе Барахолка (архив)
    Ответов: 10
    Последнее: 17.04.2008, 10:18
  4. Куплю или поменяю на пиво всякие разности...
    от Orionsoft в разделе Барахолка (архив)
    Ответов: 0
    Последнее: 04.04.2005, 00:57

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •