2012-04-03 3 views
0

В приведенном ниже фрагменте кода тета x и y плавно изменяются при малых значениях theta, но при больших значениях tta происходят резкие изменения, x и y не изменяются для довольно некоторых время, затем резко измените.резкие изменения значений x и y

float tantheta=height/base; 

double theta=-Math.atan(tantheta);  

x=(int) (53*Math.cos(theta)+x0); 
y=(int) (53*Math.sin(theta)+y0); 
+1

Каковы типы 'height' и' base'? – Attila

+0

При оценке сложных математических выражений большие числа обычно требуют больше времени для обработки. * x и y не меняются в течение некоторого времени ... * Сколько времени вы смотрите? – fireshadow52

+0

Высота и основание - это типы данных int, время означает, что они изменяются небольшими приращениями, когда theta невелика, но по мере увеличения тэта приращения становятся больше. –

ответ

0

David, Ваша идея правильная, но я нуждаюсь в тете, потому что я хочу использовать ее для моделирования движения снаряда, моя проблема решена, поскольку я меняю высоту и базу, чтобы удвоить комментарий attila.

2

Всякий раз, когда у вас есть какие-то длины (высоты и основание) и преобразовать в угол (тета), а затем обратно в длину, вы делаете ненужную работу.

Притворись, что основание и высота положительные, чтобы нарисовать картинку. Математика работает для любой базы и высоты.

Представьте себе треугольник с одной вершиной в начале координат и другой вершиной в (основание, высота). Стороны треугольника: (0,0) - (основание, высота) и (0,0) - (основание, 0) и (основание, 0) - (основание, высота). Пусть hypot = sqrt (base * base + height * height). Заметим, что theta - угол треугольника в начале координат. Это означает, что cos (theta) = base/hypot и sin (theta) = height/hypot.

Так, например, ваша формула для x становится x = x0 + 53 * base/hypot;

Эти формулы для cos и sin будут работать для любой базы и высоты, положительной или отрицательной.

Вы почти наверняка видите прыжки из-за ошибок с плавающей запятой, когда база или высота близки к нулю. Они исчезнут, если вы пропустите вычисление theta.

Смежные вопросы