Округление при сложении/вычитании дробных чисел
С добрым утром! Есть задача перемещать объекты по кривой траектории слева направо и справа налево, меняя их скорость в зависимости от угла наклона. Столкнулся с проблемой при сложении и вычитании дробного числа. Код такой:
Код AS1/AS2:
--- 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 как??? Подскажите, пожалуйста, в чем дело и как с этим бороться? |
Загугли as3 твип. У DisplayObject x и y кратны 1/20 в общем. Если критично, чтоб оно точнее считало, то завести отдельно числа, к которым прибавлять скорость и потом уже x и y к ним приравнивать.
|
Объявить две переменные типа Number для хранения значений координат (можно и Point в принципе), изменять их, а после присваивать координатам экранного объекта.
|
Цитата:
Поэтому, если вы хотите иметь более точные значения. То координаты вы должны хранить в специальных переменных и проводить все манипуляции с ними, а уже потом присваивать их значении координатам объекта. |
Я зачастую оперирую координатами в типе int, и перед присваиванием использую конструкцию вида
Код AS3:
Напомните, если ясно о чем я. |
Да, я не знал про эту особенность. Спасибо огромное за подсказку! Такая степень точности нужна из-за малых углов наклона криволинейной траектории, в интервале ~ [-10, + 10] градусов. Объект должен двигаться с постоянной скоростью, и, соответственно, при подъеме и спуске постоянная x-составляющая скорости должна падать на величину наклона. При прохождении пути на большом количестве итераций погрешность от сотых долей вырастает в десятки пикселей, что уже критично.
|
Цитата:
|
Часовой пояс GMT +4, время: 19:09. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.