|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Feb 2012
Сообщений: 11
|
Округление при сложении/вычитании дробных чисел
С добрым утром! Есть задача перемещать объекты по кривой траектории слева направо и справа налево, меняя их скорость в зависимости от угла наклона. Столкнулся с проблемой при сложении и вычитании дробного числа. Код такой:
var angle:Number = getAngle(object.x, object.direction); var speed:Number = object.speed * Math.cos(angle / 180 * Math.PI); object.x += object.direction ? -speed : speed; trace("---"); trace(speed); trace(object.x); --- 1.986476715483886 71.95 --- 1.98779389282904 73.9 --- 1.9902263669020062 75.85 Результат при вычитании object.x = 1410: --- 1.969615506024416 1408 --- 1.9771634389942234 1406 --- 1.9836407030825234 1404 Как видно во втором случае вычитаемое он округляет в большую сторону, а в первом: 70 + 1.986 = 71.95 как??? Подскажите, пожалуйста, в чем дело и как с этим бороться? |
|
|||||
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
Загугли as3 твип. У DisplayObject x и y кратны 1/20 в общем. Если критично, чтоб оно точнее считало, то завести отдельно числа, к которым прибавлять скорость и потом уже x и y к ним приравнивать.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
|
|||||
Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
|
Объявить две переменные типа Number для хранения значений координат (можно и Point в принципе), изменять их, а после присваивать координатам экранного объекта.
|
|
|||||
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
|
Цитата:
Поэтому, если вы хотите иметь более точные значения. То координаты вы должны хранить в специальных переменных и проводить все манипуляции с ними, а уже потом присваивать их значении координатам объекта. |
|
|||||
Я зачастую оперирую координатами в типе int, и перед присваиванием использую конструкцию вида
У меня еще не было подобных задач, но я помню что-то о том, что нужно располагать объекты не в 0px или 1px, а в 0.5px. Напомните, если ясно о чем я.
__________________
adobe AS3 manual |
|
|||||
Регистрация: Feb 2012
Сообщений: 11
|
Да, я не знал про эту особенность. Спасибо огромное за подсказку! Такая степень точности нужна из-за малых углов наклона криволинейной траектории, в интервале ~ [-10, + 10] градусов. Объект должен двигаться с постоянной скоростью, и, соответственно, при подъеме и спуске постоянная x-составляющая скорости должна падать на величину наклона. При прохождении пути на большом количестве итераций погрешность от сотых долей вырастает в десятки пикселей, что уже критично.
|
|
|||||
Регистрация: Jan 2012
Сообщений: 35
|
Цитата:
|
Часовой пояс GMT +4, время: 23:55. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|