Я сделал имитацию движения снаряда в ACS3, и одна из функций включает создание многомерного массива, который отображает время в зависимости от высоты шара, учитывая входной угол и скорость.
Когда я проследил значенияпеременная 't' должна иметь приращения 0,1, однако в некоторых случаях она дает мне приблизительные значения (например, вместо 0,8 она дает 0,7999999 ...). Кроме того, значение массива равно «undefined».
Я не знаю, что еще можно попробовать, потому что, если переменная в цикле равна t = t + 0.1;, то она не должнапоказать приблизительные значения.
Я также попытался добавить скорость * Math.sin (угол / (180 / Math.PI)) вместо vy (компонент скорости y).
shoot.addEventListener(MouseEvent.CLICK, Calculate);
function Calculate(event:MouseEvent):void{
var t = 0;
var position:Array = new Array();
var vy = velocity*Math.sin(angle/(180/Math.PI));
var Time = int(((2*vy)/9.81)*100)/100
time_txt.text = Time;
while (t <= Time){
position[t]= (vy*t)-4.905*(t*t);
t = t + 0.1;
trace(t);
trace(position[t]);
}
}
Я ожидаю, что консоль напечатает правильные интервалы времени (0.1,0.2,0.3 ...) вместе с вычисленным значением позиции вместо «неопределенного» (которое основано на уравнении SUVAT). Таким образом, ожидаемые результаты будут выглядеть следующим образом:
0,1
(расчетная позиция в момент времени 0,1)
0,2
(расчетная позиция в момент времени 0,2)
0,3
(расчетная позиция в момент времени 0,3)
... и продолжается до тех пор, пока переменная 't' не станет больше, чем вычисленная 'Время'.
Вместо этого я получаю:
0.1
undefined
0.2
undefined
0.30000000000000004 // Нижняя строка ... чтоиметь дело с этим?
undefined // Или с этим?
0.4
undefined
0.5
undefined
0,6
не определено
0,7
не определено
0,7999999999999999
не определено
0,8999999999999999
не определено
и т.д ...