2015-04-04 2 views
1

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

while (checkCollision(this, cl)){ 
//cl is referring to the other entity, non-cl things my entity 
         double an = Assist.angle(new Vector3f(cl.z, 0, cl.x), 
               new Vector3f(z, 0, x)); 
         double moveZ = Math.cos(Math.toRadians(an)); 
         double moveX = Math.sin(Math.toRadians(an)); 
         cl.z += moveZ; 
         cl.x += moveX; 
        } 

checkCollision() метод отлично работает, обнаруживая, если мои два объекта (в данном случае 3D кораблей) столкнулись.

Я получаю угол между другим объектом и моим текущим, а затем используя этот угол, я отталкиваю другой объект. Однако - он не работает.

Другой объект, как всегда, толкает торможение в направлении + x, и Z, похоже, не имеет строгого шаблона, но также не работает правильно.

Вот мой метод для вычисления угла (Assist.angle()):

public static double angle(Vector3f vec1, Vector3f vec2){ 
    double so = Math.toDegrees(Math.atan2(((vec1.z) - vec2.z), ((vec1.x) - vec2.x))); 
    return Math.abs(so); 
} 

Там, очевидно, должно быть что-то явно не так здесь - Но я не вижу, и я работал в течение нескольких часов, чтобы попробовать и заставить этот код работать.

+0

Несколько вопросов: почему z вместо y? Какой угол под углом должен рассчитывать? Заголовок? угол на носу? – CandiedOrange

+0

@CandiedOrange Поскольку Y направлен вверх. Меня не волнует вверх. Предполагается, что угол будет вычислять угол, который должен иметь объект object2, чтобы посмотреть на объект1. – Joehot200

+0

Наверху, как на севере или вверх, так и вверх? – CandiedOrange

ответ

2

Math.atan2() принимает векторные шнуры не под углом, радиан или иным образом. То, что он возвращает, находится в радианах.

По историческим причинам, чтобы глупо идти в Math.atan2() ожидает y до x.

http://docs.oracle.com/javase/7/docs/api/java/lang/Math.html#atan2(double,%20double)

Кроме того, я не думаю, что Math.abs(so) в конце помогает ничего.

Взгляните на это:

enter image description here

Из ваших комментариев это звучит, как вы думаете, что нужно Ab. Вы этого не сделаете. Если вы просто хотите отскочить (это простое упрощение), вам нужно Та, и это комплимент.

+0

Я думал, что помещаю в него векторные координаты? И я определенно конвертирую его в градусы после использования. Я изменил свои функции Z и X на 'Math.atan2()', однако, похоже, это не решило проблему. – Joehot200

+0

@ Joehot200 Пожалуйста, объясните, почему векторные координаты когда-либо нуждаются в преобразовании из градусов в радианы, когда такие преобразования предназначены для углов. – CandiedOrange

+0

Я опубликовал новый код в обзоре. Результат точно такой же. – Joehot200

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