2013-08-09 5 views
0

Итак, я пытаюсь сделать перемещение объекта на основе двух скоростей, которые он создает, используя atan(). Но каждый тест приводит к тому же движению вверх.Объект не перемещается на основе заданного угла?

Поэтому я решил взять это и заменить его, введенными углами, как ни странно, работает только для четырех углов 90 180 270 0

Я не знаю, почему он идет только для тех, кто только для направлений вот мой код:

public void update() { 

    updateDir(); 
    move(); 
} 

public void updateDir(){ 
    dir = Math.atan(spdY/spdX); 


    dir =20; //I know this is here it was used to test if it will actually change 
    dir = dir * Math.PI/180.0; 
    System.out.println("dir: " + dir); 
} 


public void move() { 
    x += (spd*Math.cos(dir)); 
    y -= (spd * Math.sin(dir)); 
} 

Любая причина, по которой это происходит только в 4-х направлениях?

ответ

1

@Nishant Shreshth говорит, что это правда. Но также очень важно использовать плавающие точки (например, float или double) вместо int для ваших dir, x и y переменной. В противном случае десятичная часть вашего значения dir может быть усечена, что в значительной степени является проблемой при использовании радианов и тригонометрических функций.

Также обратите внимание, что вы, вероятно, захотите использовать Math.atan2(spdY, spdX) вместо используемого вами метода atan по умолчанию. Ваш подход завершится неудачно, как только spdX получит нуль: вы разделите его на ноль. atan2 позаботится об этих крайних случаях. Wikipedia дает подробную информацию об этой функции.

+0

Колодец дурак (извините за то, что не вставляете это), но я попробую сделать 20 до двойного. Кроме того, ваше право на то, что я забыл об этом, скоро изменит его. – mkjrfan

+0

Убедитесь, что x и y удваиваются. Я подозреваю, что они были int. –

+0

Да, это устранило проблему. Спасибо! – mkjrfan

3

Знаете ли вы, что поле dir никогда не изменяется в вашем коде.

Способ updateDir печатает то же самое независимо от того, сколько раз вы его называете.

Что такое dir = 20? Думаю, вам, возможно, придется перепроверить или избавиться от этого утверждения.

+0

Ayyyy, он присваивает его, а затем * переустанавливает * его на постоянное значение. 1+ –

+0

Я просто использовал его для тестирования. Дело в том, что все еще идет прямо вверх, вместо того, чтобы на самом деле идти на 20 градусов. – mkjrfan