Guest
Новичок
|
При задачах связанных с вычислением координат по углу или вращением или еще каких либо завихрений часто используют математические функции sin, cos. Почему для таких задач не использовать все тот же алгоритм Брезенхема (правда малость модифицированный)? разложив его на части и сделав некое подобие sin и cos, только дискретное. Убрав тем самым из обихода плавающею точку. Ведь при работе с растром, используются целочисленные данные, да и вообще экран монитора целочисленный, там нет координат с плавающей точкой. Все дискретно. Спрашивается на кой хер, если мы работаем с конкретным растром, плавающая точка? Плюс к этому, если я не ошибаюсь, sin и cos большой удар несут на производительность системы(и бывает что одни и те же точки перерисовываются повторно из-за конвертирования float в uint), нежели Брезенхемовский алгоритм. К тому же он работает с дискретными данными, никаких плавающих точек в отличии от sin, cos. Очевидно же что при работе с тригонометрическими функциями, мы на самом деле имеем дело с окружностью. А раз так, то взяв за основу алгоритм Брезенхема построения окружности мы легко можем получить некое подобие sin, cos. Только аргументы функции не угол, а шаг с началом изменения координат относительно окружности и радиус. Возращаемое значение у одной функции координата X у другой Y. Вот мы и получили все тот же sin cos только более производительные и избавились от плавающей точки. P.S. Тем более что сейчас готовиться проект (2D игра) на мобильную платформу и там нет у процессоров аппаратной поддержки плавающей точки, эту идею я планирую применять там, включив эти функции в стандартные функции движка. Что вы думаете об этом?
|