Modeling Time to Cover Distance with variable acceleration

AI Thread Summary
The discussion focuses on modeling the time it takes for a spaceship to travel from Point A to Point B with variable acceleration due to drag. The user is attempting to implement calculations based on thrust and drag factors, using equations typically applied in jet flight, but struggles with the variability of acceleration. They have experimented with different time sampling rates in their calculations, finding that smaller samples yield results closer to maximum velocity, while larger samples produce longer times than observed in-game. The user seeks assistance in adjusting their equations to account for changing acceleration and has explored more complex equations involving hyperbolic functions. Ultimately, they are looking for guidance on programming these calculations accurately to reflect in-game performance.
Istanbul
Messages
2
Reaction score
0
Greetings all. I am attempting to write a program that will calculate how long a spaceship will take to move from Point A to Point B. This is actually an attempt to model my favorite computer game, so it isn’t 100% accurate in comparison to the real world. The developers introduced an element of drag to make the flying more user friendly.

I assume that the spacecraft starts out motionless, then applies maximum thrust from it’s engines instantaneously. (In reality it takes perhaps .05 seconds to move the throttle slider on my JS from 0 to 100, so I don’t think that this difference is what is throwing me off). For the very early stages of my program where I am just trying to figure out the proper calculations, I am assuming that Point B is 10000 meters away. The mass of the spaceship is 67620000g and the thrust provided by the engines at max throttle is 6400000 of whatever the applicable units of thrust are.

My understanding of the calculations required is that I need to use the calculations used in jet flight without the lift and gravity aspects. So far my internet research has lead me to the equations:

DistanceTraveled = InitialVel * Time + 1/2 Accel * Time ^ 2

Then:

Accel = ( Thrust - Drag ) / Mass

And:

Drag = DragFactor * Vel ^ 2

The only problem is that the first equation assumes the acceleration is a constant, when in my scenario, acceleration varies due to drag. I attempted to use looping and small time samples to model this, basically assuming that acceleration is constant during a very small moment of time (.01 seconds). (BTW, the DragFactor of the ship in my scenario is 35.5) (Another side note: The numbers given for thrust and the drag coefficient work out perfectly to make the ship stop accelerating at the top speed it has in game, so I don’t think those equations are wrong.)

Unfortunately, the results of this method vary wildly depending on the size of the time sample I use. If I use incredibly small samples (I went down to .00001, that actually took my CPU a few seconds to go through that many loops), it ends up with a result approaching the amount of time it takes to cover that distance if the spacecraft started out at it’s maximum velocity. If I use larger sample sizes, then the result is significantly longer than what it actually takes to perform in game. Using a stop watch, I did time trials that showed the ship taking ~28.5 seconds to cover that distance from a full stop.

I’ve tried to investigate calculus operations that would help me perform these calculations, but have found nothing that seemed to apply. Of course, I’ve forgotten anything I learned in Calculus in High School now, so I may have just not understood something and how it would apply. If anyone knows how to adjust the equations I have to continuously calculate the changing acceleration due to drag, please let me know. If anyone here knows programming and wants to look at my code, let me know and I’ll post a copy of the loop.

*Edit* Thanks to this scenario being in a game, we do not have to address changing mass due to fuel consumption.

Thanks,

Istanbul

P.S. No, I'm not from Turkey, sorry to disappoint.
 
Last edited:
Physics news on Phys.org
I've gotten some help (I think) from another forum I visit (a community forum for the game I am attempt to write an application for). I've quoted my comments from that thread, then I have additional commentary below:

T = 1 / x * acosh [ ½ * exp [ 2 * ln ( 2 ) + D * x / q ] – 1 ]

Ok, I’m guessing that this is the appropriate equation, but I’d appreciate a bit of help figuring out what the terms actually are. ‘T’ would be the time obviously, and I’m guessing the ‘D’ is where we would be putting the distance covered. I have no idea what the ‘x’ and the ‘q’ are supposed to be, and I’m guessing that the ‘acosh’ is something to do with cosine. Either that, or when Fido typed this equation, he should have used some spaces. I think I ‘get’ everything else, though I need to investigate how to program in natural logs and natural bases and all that jazz.

Thanks for the link Jonboy, I think you’ve gotten me pointed in the direction I needed. :)

*edit* Further reading of Fido's post, I noticed a couple more equations that define 'x' and 'q'

x = 2 * k * q / M

q = sqrt ( T / k )

‘T’ I’m pretty sure is the thrust, and ‘M’ would probably be the mass, but I am now left just needing to know what the ‘k’ is all about.

acosh: is inverse hyperbolic cosine

k is apparently supposed to be the drag factor.
In the built in functions of vb, ln is apparently log, and log is apparently log10. Kind of an interesting way to do it, but, whatever. They also don’t have acosh (inverse hyperbolic cosine), but it can apparently be derived with what they have. What I found from Microsoft says that

acosh(n)= Log(n+ Sqrt(n*n-1)).

That log would be ln when using a calculator or whatever (unless I misunderstood what they said). In this equation n would be equal to:

[ ½ * exp [ 2 * ln ( 2 ) + D * x / q ] – 1 ]

All the stuff that followed the acosh in the equation up there basically.

To clarify the variables one more time:

T = Time
k = drag factor
M = Mass
T(The other T) = Thrust
D = Distance

x and q are calculated based on the inputs of the variables.
I tried to implant this equation in two ways. One was to substitute everything in as one big equation. The other was to divide each of the parts of the equations into sub functions.

The first method, I started out with the three equations:

T = 1 / x * acosh [ ½ * exp [ 2 * ln ( 2 ) + D * x / q ] – 1 ]

x = 2 * k * q / M

q = sqrt ( T / k )

And did the substitutions.

x = 2 * k * sqrt ( Th / k ) / M

Then into the big equation

Ti = 1 / (2 * k * sqrt ( Th / k ) / M) * acosh [ ½ * exp [ 2 * ln ( 2 ) + D * 2 * k * sqrt ( Th / k ) / M / sqrt ( T / k ) ] – 1 ]

Then, because VB doesn’t have acosh itself as a function, I had to use the method they gave to calculate it.

acosh(n)= Log(n+ Sqrt(n*n-1)).

Then substitute the ‘n’ [ ½ * exp [ 2 * ln ( 2 ) + D * x / q ] – 1 ]

Log([ ½ * exp [ 2 * Log ( 2 ) + D * x / q ] – 1 ]+ Sqrt([ ½ * exp [ 2 * Log ( 2 ) + D * x / q ] – 1 ]* [ ½ * exp [ 2 * ln ( 2 ) + D * x / q ] – 1 ]-1)).

Then add the stuff that’s in front of that part of the equation for the whole kit and caboodle:

Ti = 1 / (2 * k * sqrt ( Th / k ) / M) * Log([ ½ * exp [ 2 * ln ( 2 ) + D * x / q ] – 1 ]+ Sqrt([ ½ * exp [ 2 * log ( 2 ) + D * x / q ] – 1 ]* [ ½ * exp [ 2 * log ( 2 ) + D * x / q ] – 1 ]-1)).

Recall that in vb, log is really ln. This method ended up resulting in the time that it would take to cover the distance flying at top speed the entire time.

The other method, I would’ve thought would yield the same result, but actually gave a time significantly greater than actual. The other method, I set up separate functions to handle each of the subsections of the equation.

First, I had the function that calculated q, then x (which uses q). Then I set up a function to calculate the n for inside the acosh deal. then I set up a function to calculate the acosh, which, again was Log(n+ Sqrt(n*n-1)). Then I simply calculated the 1/x*a (a= the acosh(n)). So, I’m not sure if this equation isn’t actually the right one, or if I’m just making some kinds of algebraic mistakes. Theoretically, both methods should’ve yielded the same answer, but I could have mis-parenthesized and screwed up the order of operations in one, the other or both.

Maybe I should experiment more with my original looping method. I could probably come up with a sample rate that closely approximates what actually happens, but then I’m afraid that that won’t hold up if I change the value of the input variables. It would seem rather stupid of me to set up a program that has to use a different sample rate for every possible scenario that I’d be calculating with the program.

Istanbul
 
Hello everyone, Consider the problem in which a car is told to travel at 30 km/h for L kilometers and then at 60 km/h for another L kilometers. Next, you are asked to determine the average speed. My question is: although we know that the average speed in this case is the harmonic mean of the two speeds, is it also possible to state that the average speed over this 2L-kilometer stretch can be obtained as a weighted average of the two speeds? Best regards, DaTario
The rope is tied into the person (the load of 200 pounds) and the rope goes up from the person to a fixed pulley and back down to his hands. He hauls the rope to suspend himself in the air. What is the mechanical advantage of the system? The person will indeed only have to lift half of his body weight (roughly 100 pounds) because he now lessened the load by that same amount. This APPEARS to be a 2:1 because he can hold himself with half the force, but my question is: is that mechanical...
Some physics textbook writer told me that Newton's first law applies only on bodies that feel no interactions at all. He said that if a body is on rest or moves in constant velocity, there is no external force acting on it. But I have heard another form of the law that says the net force acting on a body must be zero. This means there is interactions involved after all. So which one is correct?
Back
Top