резкие изменения значений х и у - PullRequest
0 голосов
/ 03 апреля 2012

В приведенном ниже фрагменте кода тета 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);

Ответы [ 2 ]

2 голосов
/ 03 апреля 2012

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

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

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

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

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

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

0 голосов
/ 05 апреля 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...