У меня есть метод внутри класса шара, который имеет атрибуты местоположения, скорости и ускорения. Я пытаюсь создать рудиментарную версию обнаружения столкновений, которая предполагает вычисление расстояния между двумя шарами. У меня есть следующий код для моего расстояния:
public float getDistance(Ball ball2)
{
float distance = (float) (Math.sqrt(Math.pow(ball2.x - x, 2) +
Math.pow(ball2.y - y, 2)));
return distance;
}
В другой части кода я неоднократно печатаю значение этого расстояния, и я продолжаю получать нули. Почему это?
EDIT: Я понял это. Я забыл, что координаты позиции сохраняются в векторном объекте, поэтому вместо того, чтобы говорить ball2.x, я должен был указать ball2.position.x. Теперь все правильно вычисляется, и моя программа работает. Спасибо за помощь людям! Я не уверен, что эти вопросы должны быть закрыты или что-то в этом роде, но что бы ни думали моды!
Метод прекрасен. Проблема кроется в другом месте.
Это может быть так: ball2.x == this.x
и ball2.y == this.y
Это может быть связано с ball2
что ball2
и this
и тот же объект, или потому, что вы забываете инициализировать x
и y
или по ряду других возможных причин.
Другая возможность заключается в том, что значение, которое вы печатаете, не является результатом вызова distance()
, а является чем-то другим (например, из-за ошибки в коде).
Если ваши ball2.x и x являются целыми числами, тогда, когда они находятся в пределах 1 единицы друг от друга, x - x может округлить до 0, потому что вы все еще выполняете математику целых чисел. Вы должны бросить их как плавающие, прежде чем вычесть их. затем выполните математику.
Это одинаково для ball2.y и y.
Как уже отмечали некоторые люди, в коде нет ничего плохого. Я скопировал и вставил его в демо-класс и получил 0.223
public class Demo {
public static void main(String[] args) {
Demo d = new Demo();
Ball b1 = d.new Ball(0.1f, 0.5f);
Ball b2 = d.new Ball(0.2f, 0.7f);
System.out.println(b1.getDistance(b2));
}
class Ball{
float x,y;
public Ball(float x, float y) {
this.x = x;
this.y = y;
}
public float getDistance(Ball ball2)
{
float distance = (float) (Math.sqrt(Math.pow(ball2.x - x, 2) +
Math.pow(ball2.y - y, 2)));
return distance;
}
}
}
Разве вы не хотите сравнивать расстояние до второго шара?
public float getDistance(Ball ball2, Ball ball1)
{
float distance = (float) (Math.sqrt(Math.pow(ball2.x - ball1.x, 2) +
Math.pow(ball2.y - ball1.y, 2)));
return distance;
}
Вы в настоящее время вычитаете x из x, возвращая 0.
Поскольку ball2.x = x и ball2.y = y