Page 1 of 1
Finding "shortcuts" and "unreachable" systems via misjumps
Posted: Tue Apr 26, 2011 12:13 pm
by Switeck
There has to be a better way than trial-and-error to determine if "unreachable" systems are completely unreachable using misjumping.
I've resorted to plotting their locations on graphing paper, but found the X, Y number scale for their locations isn't symmetric -- Y is only about 1/2 X distance-wise, so drawing circle arcs up to 7 LY in size doesn't work unless I rescale the Y values to half X.
I know a few basic rules about what I can and cannot do with misjumps -- I can't simply misjump towards an unreachable system, I have to "crab" sideways to get barely in range.
But thanks to Oolite v1.75.x changes to misjump times -- now being LESS than the time to make the complete jump -- there might also be another incentive to misjump: to save time on very long-distance cargo/passenger hauls across a Galaxy Chart.
Assuming 3 systems forming a triangle, and the short sides of that triangle resembling an "L"...
What distances and angles are needed between the 3 systems to make misjumping (to avoid 1 system) quicker than just jumping to each system to go from #1 to #3?
At least the question "Does misjumping work "better" or "worse" if the angle of the "L" is greater than 90 degrees?" is obvious to me -- it's MUCH worse.
But my guess is the "best" angle has to be between 60 and 90 degrees -- at 60 you could probably just go from #3 from #1 in 1 jump anyway.
I'd like to be able to calculate this...but I don't know the exact amount of time misjumping takes relative to a completed jump it would've been.
Re: Finding "shortcuts" and "unreachable" systems via misjum
Posted: Tue Apr 26, 2011 1:30 pm
by JensAyton
Switeck wrote:I've resorted to plotting their locations on graphing paper, but found the X, Y number scale for their locations isn't symmetric -- Y is only about 1/2 X distance-wise, so drawing circle arcs up to 7 LY in size doesn't work unless I rescale the Y values to half X.
If you’re working with the integer coordinates found, e.g., on
EliteWiki, the scaling factors are 0.4 for the x axis and 0.2 for the y axis.
However, the formula for calculating distances isn’t strictly pythagorean; it’s 0.4 ⌊√(∆
x² + ⌊∆
y/2⌋²)⌋, where ⌊
x⌋ is
x rounded down to an integer.
Similarly, when misjumping, the new coordinates are the average of the current coordinates and the destination system coordinates, rounded down.
Switeck wrote:I'd like to be able to calculate this...but I don't know the exact amount of time misjumping takes relative to a completed jump it would've been.
The time taken is exactly (well, give or take a femtosecond) 3/4 of the time to complete a successful jump. A misjump followed by a successful jump from interstellar space to the intended destination bumps the clock by exactly as much as a single successful jump.
Re: Finding "shortcuts" and "unreachable" systems via misjum
Posted: Wed Apr 27, 2011 5:48 pm
by Switeck
So far I've found a way back into the Galaxy 7 Great Rift from the "exit" destination system. I'm now looking for calculating the shortest/quickest way back...as my method takes as many as 21 jumps (mostly misjumps) to do and often crashes the game. Of course this requires an OXP wormhole maker to do.
Re: Finding "shortcuts" and "unreachable" systems via misjum
Posted: Wed Apr 27, 2011 6:11 pm
by Cody
I don't quite follow... do you mean the route back across the Great Rift to the main body of G7?
Re: Finding "shortcuts" and "unreachable" systems via misjum
Posted: Wed Apr 27, 2011 8:10 pm
by Switeck
Yes.
The way "into" the great rift area is at the top left, but the "exit" from them is at the bottom left. (relative each other anyway.)
I found a way to get back into the great rift area without having to go all the way to the top left again, only currently the method is a little ugly and only viable via an OXP wormhole maker.
Re: Finding "shortcuts" and "unreachable" systems via misjum
Posted: Thu Jul 14, 2011 6:40 pm
by JensAyton
Ahruman wrote:However, the formula for calculating distances isn’t strictly pythagorean; it’s 0.4 ⌊√(∆x² + ⌊∆y/2⌋²)⌋, where ⌊x⌋ is x rounded down to an integer.
Following a private conversation: this is only accurate if the ∆y is positive; otherwise, it should actually be round-towards-zero (which is what Oolite does), not floor. 0.4 ⌊√(∆
x² + ⌊|∆
y|/2⌋²)⌋ works.
Re: Finding "shortcuts" and "unreachable" systems via misjum
Posted: Fri Jul 15, 2011 11:57 am
by Switeck
Here's the code I'm currently working with to calculate the distance between current location and "nextStop" of a hyperspace jump:
Code: Select all
curX = player.ship.galaxyCoordinates.x;
curY = player.ship.galaxyCoordinates.y;
nSX = Math.round(10*System.infoForSystem(galaxyNumber,nextStop).coordinates.x)/4;
nSY = Math.round(10*System.infoForSystem(galaxyNumber,nextStop).coordinates.y)/2;
aDis = 4*Math.floor(Math.sqrt(Math.pow(Math.floor(curX - nSX),2) + Math.pow(0.5*Math.floor(curY - nSY),2) ))/10;
aDis = Number(aDis.toFixed(1));
I'm not sure I know exactly how to change this as you mean.
Math.abs(curY -nSY)?
Re: Finding "shortcuts" and "unreachable" systems via misjum
Posted: Fri Jul 15, 2011 12:55 pm
by JensAyton
Yes. Either that, or swap
curY
and
nSY
if
nSY
is greater.
Re: Finding "shortcuts" and "unreachable" systems via misjum
Posted: Fri Jul 15, 2011 11:58 pm
by Switeck
Ahruman wrote:Yes. Either that, or swap
curY
and
nSY
if
nSY
is greater.
So this in total?:
aDis = 4*Math.floor(Math.sqrt(Math.pow(Math.floor(curX - nSX),2) + Math.pow(0.5*Math.floor(Math.abs(curY -nSY)),2) ))/10;
Re: Finding "shortcuts" and "unreachable" systems via misjum
Posted: Sat Jul 16, 2011 1:08 am
by JensAyton
Looks right, yet quite horrible. :-) Adapting the structure of Oolite’s function, I’d use:
Code: Select all
var dx = Math.floor(curX - nSX);
var dy = Math.floor(Math.abs(curY - nSY) / 2);
var dist = Math.floor(Math.sqrt(dx * dx + dy * dy));
return 0.4 * dist;
In C, it’s:
Code: Select all
static inline double distanceBetweenPlanetPositions ( int x1, int y1, int x2, int y2)
{
int dx = x1 - x2;
int dy = (y1 - y2)/2;
int dist = sqrtf(dx*dx + dy*dy); // N.b. Rounding error due to truncation is desired.
return 0.4 * dist;
}
Re: Finding "shortcuts" and "unreachable" systems via misjum
Posted: Sun Jun 22, 2014 10:42 am
by Switeck
Switeck wrote:I'd like to be able to calculate this...but I don't know the exact amount of time misjumping takes relative to a completed jump it would've been.
JensAyton wrote:The time taken is exactly (well, give or take a femtosecond) 3/4 of the time to complete a successful jump. A misjump followed by a successful jump from interstellar space to the intended destination bumps the clock by exactly as much as a single successful jump.
Some time and some changes have occurred to Oolite since this post.
Oolite v1.79 trunk can do partial/percentage misjumps -- no longer are you stuck doing a misjump to the "halfway" point, although this tends to require OXP *.js scripting (or console commands) to pull off.
So what is the time formula for them?
I can reasonable guess what the 25% and 75% distance misjump times should be, as those are like doing 2 "regular" misjumps.
But what about say 81% misjump time?
...or a generalized formula for any arbitrary percentage distance?
Re: Finding "shortcuts" and "unreachable" systems via misjum
Posted: Sun Jun 22, 2014 11:03 am
by cim
The generalised formula is that a misjump of fraction 'f' (0..1) towards the destination takes (2f - f^2)
as long as the original jump would have.
Re: Finding "shortcuts" and "unreachable" systems via misjum
Posted: Sun Jun 22, 2014 11:42 am
by Switeck
That looks good.
Seems that any misjump endpoint, jumping the remainder of the distance plus the original misjump equals about the time as the original "total" jump would take.