Closed Lillz closed 10 years ago
I wrote this as a Lua script (it's in #1633). It doesn't tell you anything about your current orbit (there's nowhere near enough information exposed to Lua to do that at the moment) but it does give you some ideal speeds for the current altitude.
It works well. This video shows you how this information can be used for a perfect entry, descent and landing.
There's no visualistion, and as I said no analysis of your actual current orbit. I'm not sure how we'd go about that at all - one of the C++ devs might have a better idea of what's possible.
I understand. If you ever do figure something out, for a general idea of a cool idea to visualize it, you should check out Kerbal Space Program. The map on that game is incredible, but I'm sure it doesn't use lua
I'm sure somebody clever will find a way, eventually.
I've only seen Kerbal Space Program on Youtube, it being a Windowsy commercial demo game and me not feeling attracted to that sort of idea. I'd be very surprised if it used Lua at all.
@Brianetta if it can be run in WINE then I recommend giving at least the demo a go, despite the cutesy appearance it's also got a solid and fun physics side to it and as @Lillz says there's some really good visualisations for things like orbits.
It's not that hard for me to calculate the trajectory parameters (apoapsis, periapsis, eccentricity, x,y,z positions of apoapsis, periapsis, foci, major and minor semiaxes, etc.), but I can do almost nothing with graphics. If someone is willing to draw the trajectory, I can help to fill in the technical stuff. (Just tell me what trajectory parameters you find useful.)
Had a quick poke around in the code, and there is the promising looking PutOrbit method in SystemView (which you get to using F6 on the Map screen):
void SystemView::PutOrbit(SystemBody *b, vector3d offset)
{
vector3f vts[100];
Color green(0.f, 1.f, 0.f, 1.f);
for (int i = 0; i < int(COUNTOF(vts)); ++i) {
const double t = double(i) / double(COUNTOF(vts));
vector3d pos = b->orbit.EvenSpacedPosAtTime(t);
vts[i] = vector3f(offset + pos * double(m_zoom));
}
m_renderer->DrawLines(COUNTOF(vts), vts, green, LINE_LOOP);
}
Takes a SystemBody, which I'm not sure whether your ship is.or not (guessing no?), but it's just getting an Orbit structure from that which is defined as:
struct Orbit {
Orbit(): orbitalPhaseAtStart(0.0) {};
vector3d OrbitalPosAtTime(double t) const;
// 0.0 <= t <= 1.0. Not for finding orbital pos
vector3d EvenSpacedPosAtTime(double t) const;
/* duplicated from SystemBody... should remove probably */
double eccentricity;
double semiMajorAxis;
double orbitalPhaseAtStart; // 0 to 2 pi radians
/* dup " " --------------------------------------- */
double period; // seconds
matrix4x4d rotMatrix;
};
Of course that's a full orbit ellipse (assumes stable), not a trajectory as such.
KSP is available on mac already. Now I don't really understand the code above me, but it looks promising.
a small map somewhere where you could see what your orbit looks like around a planet
It's something I've thought about a bit before.. Along the lines of:
An intuitive way is probably needed to:
My current state of thought is to have a general widget that allows an ellipse to be created and resized/rotated or just display an orbit non-interactively.
This needs things like (full-ish use, we likely won't need all of the features for quite a while):
And other stuff I can't recall off the top of my head:).
As for a 2d map showing the path of the orbit over a surface: I plan to look into some form of cylindrical projection for a variety of uses. A 2d map can be looked at after the map is developed. It's possible to either use this map to texture a 3d globe or use a mini-geosphere with patch restrictions (after multiple camera support is added) .
If a graphics person wants to work further on something a bit like this: A minimum widget (non-interactive) might need
SystemView::PutOrbit
This is a pretty good starting point:).
Takes a SystemBody, which I'm not sure whether your ship is.or not (guessing no?)
A SystemBody is a sysgen output representing something like a planet, starport/station. That struct and its member functions are also used by the physics for orbit rails. The ship is a dynamic body and doesn't use orbit rails.
A function that derives orbital parameters as well as the nature of the trajectory given position and velocity relative to a planet is useful.
The Orbit struct could be extended to provide position/velocity given orbital parameters, convert between more intuitive parameters, and any other related functions.
@skapusniak Offtopic question: How do you do these nice code-blocks with syntax highlighting? Thanks!
You click the link above and right, and scroll down to the "Code" section. I've copied the link here:
Comments are parsed with GitHub Flavored Markdown
Great, thanks!
@irigi Take a look at the syntax highlighting section on the Github Flavoured Markdown page. To do it inline like this
just put the backticks around what you what syntax highlighted within the line.
I figured out how to mark down an example!
```lua print('Hello') -- Comment ```
print('Hello') -- Comment
```c++ printf("Hello"); // Comment ```
printf("Hello"); // Comment
Everything the original poster requested is now in the game, with 3133 merged. Beyond that I suggest dev forum for layout, mockups and feature speculation.
I think it would be very useful for the game to have a small map somewhere where you could see what your orbit looks like around a planet. It would give your apoapsis height and your periapsis height. It would be very useful when trying to land as well.