Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Установка значений с определенной скоростью

44K
21 августа 2010 года
NSDaler
36 / / 14.06.2010
вообщем разбираюсь с directx
скачал исходник, разобрался, но не могу понять эту строчку:
 
Код:
float b = float(GetTickCount()%0xffff)/0xffff * 3.141593 * 80

вернее я понял, что она не дает вращаться кубу быстрее (в зависимости от машины)
тот код который я вам предоставил (выше та строчка) размещен в цикле (b - угол вращения), то есть поэтому и используется GetTickCount, чтобы на всех машинах с разными харак-ми куб вращался с одной и той же скоростью

но объясните мне кроме GetTickCount() другое, зачем получать остаток от FFFF ??? зачем умножать на PI и на 80?
397
22 августа 2010 года
SergPas
527 / / 03.02.2007
Ну давайте подумаем. [FONT=monospace]
[/FONT]GetTickCount() возвращает число миллисекунд с момента запуска системы.[FONT=monospace]
[/FONT]GetTickCount()%0xffff - возвращает число в диапозоне от 0 до 0хffff (0..65535)[FONT=monospace]
[/FONT]GetTickCount()%0xffff/0xffff - возвращает число в диапозоне от 0 до 1
Если бы не было числа 80, то за одну секунду куб повернется на 0.027 градусов, т.е. пол оборота совершит за ~109 минут, а полный за 2*109 минут! И ускоряют этот процесс путем увеличения угла в 80 раз, т.е. 0.027*80=2.16, т.е. теперь за одну секунду куб повернется на 2.16 градуса, а полный оборот за 2.8 минуты. И это всё потому, что угол есть функция времени, и не зависит от количества тактов процессора и др. характеристик машины.
P.S. Может быть всё это не так, как я это себе представил, но в шесть утра голова уже совсем не "варит".
44K
25 августа 2010 года
NSDaler
36 / / 14.06.2010
а зачем умножать на пи?
44K
25 августа 2010 года
NSDaler
36 / / 14.06.2010
я понял, что благодаря функции gettickcount куб повернется на всех машинах одинаково, но я не понял как вы высчитали 0.027 градусов?
41K
25 августа 2010 года
gaga
44 / / 22.07.2009
NSDaler, я понял это так:
float(GetTickCount()%0xffff)/0xffff принимает значения от 0 до 1. Причем для того, чтобы стать равным 1, должно пройти 0хffff милисекунд, т.е. чуть больше минуты. Это и будет время одного оборота без домножения на 80. Соответсвенно, умножив на 80, достигают скорости ~1.5 оборота в секунду.
Угол измеряется в радианах и должен меняться от 0 до Пи, поэтому на Пи и домножается.
397
25 августа 2010 года
SergPas
527 / / 03.02.2007
NSDaler, в первом моем посте с расчетами вышла ошибочка по выше указанной причине. gaga верно рассуждает, за что ему поставлю +1 :)
44K
26 августа 2010 года
NSDaler
36 / / 14.06.2010
да я тоже сам разобрался, но только с пи не разобрался, поэтому спасибо!!! =)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог