В Java я пытаюсь реализовать следующее уравнение для вычисления текущей скорости парашютиста, не пренебрегая сопротивлением воздуха.Java: вычислительная скорость скайдайвера
V (T) = V (трет-& Dgr; t) + (г - [(перетащить й crossArea х airDensity)/(2 * масса)] * v [(трет-& Dgr; t)^2]) * (Δt)
Моя проблема в том, что я не уверен, как перевести «v (t - Δt)» в код. Прямо сейчас у меня есть этот метод ниже, где, как вы можете видеть, я использую метод внутри себя, чтобы найти предыдущую скорость. По-видимому, это продолжало приводить сообщение об ошибке переполнения стека.
(Timestep = & Dgr; t)
public double calculateVelocity(double time){
double velocity;
velocity = calculateVelocity(time - timeStep)
+ (acceleration - ((drag * crossArea * airDensity)
/(2 * massOfPerson))
* (calculateVelocity(time - timeStep)*(time * timeStep)))
* timeStep;
}
return velocity;
}
Я зову вышеуказанный метод в приведенной ниже способом. Предполагая, что конечное время = int, будет пользователем, но написано так, чтобы быть динамическим.
public void assignVelocitytoArrays(){
double currentTime = 0;
while(currentTime <= endingTime){
this.vFinal = calculateVelocity(currentTime);
currentTime += timeStep;
}
}
Я хотел бы рассказать об этом самостоятельно, может ли кто-нибудь дать мне общее направление? Использует ли метод в себе правильную идею, или я полностью не в курсе?
Каково ваше условие остановки/базовый корпус?Использование метода внутри себя называется рекурсией и требует некоторой формы базового случая, чтобы остановить себя от бесконечного вызова самого себя, что является причиной StackOverflowException – yitzih
. Я отредактировал свой вопрос, чтобы показать метод, которым я вызываю метод calculateVelocity. Это то, что вы имеете в виду базовый случай, или вы имеете в виду что-то вроде того, что [v (0) = ускорение] является перерывом? –
Первое, что делает ваш метод вычислений velocity, это снова вызвать метод вычислений. Поэтому он никогда не перестанет постоянно вызывать метод независимо от того, в чем он проходит. Там должен быть какой-то оператор управления, окружающий рекурсивный вызов. Например: if (time-timeStep> 0) {calculateVelocity (time-timeStep) + остальная часть кода} else return speed; '(я не знаю математику, чтобы математика не имела смысла, но ее пример). – yitzih