Jump to content

Nomographs - Rocket science made easy


Mad Rocket Scientist

Recommended Posts

A nomograph is a kind of analogue computer or graph that lets you calculate solutions to a equation graphically, with an arbitrary number of variables. They are essentially static slide rules with one equation "pre-programmed." 

It's a little unclear what that means in practice, but this example should help:

bmi-nomogram.png

The dashed line is a solution, and the way these are constructed, any straight line is also a solution. So you can simply take the two variables you know, drop a straightedge across the graph at the points you know, then read of the result. They can get much more complex than this too, with many variables, curved lines, etc.

This struck me as being particularly useful for KSP, since the rocket equation is hard to approximate mentally, and calculators require either plugging in the formula over and over, or tabbing back and forth from KSP to test different values by typing each one out. There have been nomopgraphs for KSP before this, but they all are hard to track down, are out of date, lacked something I wanted, or some combination of those. So I started learning PyNomo, which lets you create your own nomographs easily, for some values of easy. Its wiki states that there is no support for it, and it suggests "lot's of trial and error" to learn it.

After a few days of messing with it on and off, I was able to make this:

eSOWiWvg.png?1

Scalable, printable PDF: https://drive.google.com/file/d/1fvlyZMzE21_GBJBR19Vd1bUBtRSDBWYW/view?usp=sharing

@Snark has kindly provided a very clear explanation of how it works:

What problem does this solve?  A simple graphical way to solve rocket-equation problems without resorting to a calculator.  Specifically, if you know 2 of the following 3 things, it will solve the other one for you:

  • dV
  • engine Isp
  • Vessel's mass ratio

How does it work?

There are three lines on the graph, one for each of the above three things.  There's the dV line, which is the vertical axis at left.  There's the engine-Isp line, which is the vertical axis at right.  And there's the mass-ratio line, which is the slanted line in the middle.

To solve any rocket-equation problem, get a straight-edge that's long enough to reach completely across the graph.  Take the two variables that you know, and line up the straight-edge so that it passes through those two lines at the appropriate spot.  To find the solution for the 3rd variable, just read where the straight-edge passes through the third line.

Example 1:  I have an Isp of 400, and need 2000 m/s of dV.  What mass ratio do I need to design into my rocket?
Answer 1:  Set the ruler to pass through "2000" on the left axis and "400" on the right axis, then check where it intersects the slanted mass-ratio line in the middle.  Golly, it intersects at 1.66.  So that's the mass ratio I need.

Example 2:  I have an Isp of 300, and a mass ratio of 1.5.  What dV do I have?
Answer 2:  Set the ruler to pass through 300 on the right-hand axis, and 1.5 on the mass-ratio line in the middle.  Then see where it hits the dV line over at left.  Hmm, I see that I'll get about 1200 m/s of dV.

Example 3:  I need at least 2000 m/s of dV, and I plan on having a mass ratio of 2.  What Isp do I need?
Answer 3:  Set the ruler to pass through 2000 m/s on the left-hand axis, and 2 on the mass-ratio line in the middle.  Then see where it hits the Isp line over at right.  Turns out I need a bit better than 300 Isp.

Note that it only calculates one stage at a time, and so although the graph suggests a Delta V limit for any particular Isp, arbitrarily high Delta Vs can be achieved with staging. Mr is the version arising from the Tsiolkovsky rocket equation rather than the Rocket Propulsion Elements version, and is defined as how many time more massive the vehicle is with propellant than without. Note that 9 is the ratio of stock propellant tanks, and so vehicles will never reach that.

All transfer Delta Vs are assuming a fully propulsive ballistic 100km to a 100km orbit, except the Jool transfer, which assumes a 100km to 10000km orbit.

Thanks to:

@nyrath For making the website where I first heard of these.

@Kowgan For the launch and landing DV values.

@alexmun For the transfer DV values.

@GoSlash27 For showing how valuable reversing the rocket equation is.

This is the code for it:

from pynomo.nomographer import *
isp_start=0.0
isp_stop=800.0
ve_start=0.0
ve_stop=6000.0
mr_start=1
mr_stop=9
dv_start=0
dv_stop=8000
 
def Isp(Ve):
    return Ve*9.81
    
def Prop_fraction(u):
    return 1-(1/u)
 
Ve_para={
        'tag':'A',
        'u_min':isp_start,
        'u_max':isp_stop,
        'function':lambda u:Isp(u),
        'title':r'$I_{sp}$',
        'tick_levels':5,
        'tick_text_levels':3,
        'scale_type':'linear smart',
        'extra_params':[
                        {
                        'scale_type':'manual line',
                        'tick_side':'right',
                        'manual_axis_data':{
                                            290:'Twitch, Mastodon',
                                            320:"Spark, Swivel, Skipper, Cub",
                                            340:"Rhino, Dart",
                                            290:"Spider",
                                            310:"Reliant, Bobcat, Mainsail",
                                            250:"Puff",
                                            330:"Skiff",
                                            412:"Wolfhound",
                                            350:"Poodle",
                                            195:"Hammer",
                                            165:"Flea",
                                            220:"Kickback",
                                            210:"Thumper",
                                            300:'Twin-Boar',
                                            800:'Nerv',
                                            },
                        },
                        {
                        'scale_type':'manual arrow',
                        'tick_side':'left',
                        'arrow_length':1.5,
                        'manual_axis_data':{
                                            290:'Twitch, Mastodon',
                                            315:"Ant, Vector, Mammoth",
                                            345:"Terrier, Cheetah",
                                            305:"Kodiak, Thud",
                                            },
                        }],
        'tick_side':'left',
        'title_x_shift':-0.5
        }
        
Mr_para={
        'tag':'B',
        'u_min':mr_start,
        'u_max':mr_stop,
        'function':lambda u:math.log(u),
        'title':r'$M_r$',
        'tick_levels':4,
        'tick_text_levels':3,
        'scale_type':'log smart',
        'tick_side':'right',
        'title_x_shift':0.1
        }
        
#Pf_para={
#        'tag':'B',
#        'u_min':mr_start,
#        'u_max':mr_stop,
#        'function':lambda u:Prop_fraction(u),
#        'align_func':Prop_fraction,
#        'title':r'$Prop Fraction$',
#        'tick_levels':3,
#        'tick_text_levels':1,
#        'scale_type':'linear',
#        'tick_side':'left',
#        'title_x_shift':1
#        #'u_text_format':r"$%$ ",
#        }

Dv_para={
        'u_min':dv_start,
        'u_max':dv_stop,
        'function':lambda u:u,
        'title':r'$\Delta{}V$',
        'tick_levels':4,
        'tick_text_levels':3,
        'scale_type':'manual line',
        'tick_side':'left',
        'title_x_shift':-0.5,
        'manual_axis_data': {
                     3400:'Kerbin Surface-Low orbit',
                     580:'Mun Surface-Low orbit',
                     8000:'Eve Surface-Low orbit',
                     1450:'Duna Surface-Low orbit',
                     390:'Ike Surface-Low orbit',
                     130:'Pol Surface-Low orbit',
                     2270:'Tylo Surface-Low orbit',
                     860:'Vall Surface-Low orbit',
                     2900:'Laythe Surface-Low orbit',
                     1690:'Kerbin-Duna Transfer',
                     4868:'Kerbin-Moho Transfer',
                     2743:'Kerbin-Eve Transfer',
                     4140:'Kerbin-Dres Transfer',
                     4000:'Kerbin-Jool Transfer',
                     3556:'Kerbin-Eeloo Transfer',
                     },
        'extra_params':[{
                        'text_format':r"$%4.0f$",
                        'u_min':dv_start,
                        'u_max':dv_stop,
                        'scale_type':'linear smart',
                        'tick_levels':4,
                        'tick_text_levels':3,
                        'tick_side':'right',
                        },
                        {
                        'scale_type':'manual point',
                        'tick_side':'right',
                        'manual_axis_data':{
                                            620:'Eeloo Surface-Low orbit',
                                            },
                        }],

        }
 

            
block_1_params={
             'block_type':'type_2',
             'width':20.0,
             'height':20.0,
             'f1_params':Dv_para,
             'f2_params':Mr_para,
             'f3_params':Ve_para,
             }
             

            
#Pf_block={
#         'block_type':'type_8',
#            'f_params':Pf_para
#            }
 
main_params={
              'filename':'Rocket_equation_nomograph.pdf',
              'paper_height':30.0,
              'paper_width':18.0,
              'block_params':[block_1_params],
              'transformations':[('scale paper',)],
              'title_str':r'Rocket Equation $\Delta{}V = V_e\ln(M_r)$'
              }
Nomographer(main_params)

Which you can modify and run as you like here: http://46.101.125.20:8080/

This way of doing rocket science seemed particularly in line with the kerbal style to me: Simplified, inexact, but fast and maximizing power to difficulty ratio. As such I decided to put it in the KSP discussion, since this is about using this graphical aid for KSP, not just nomographs on their own. But I'm not sure it's the right place, so I completely understand if it's moved.

EDIT: Updated with suggestions about readability.

Edited by Mad Rocket Scientist
Link to comment
Share on other sites

First!

Shouldn't "600:'600, Nerv'," be 800s instead?
https://wiki.kerbalspaceprogram.com/wiki/LV-N_"Nerv"_Atomic_Rocket_Motor

Other than that, this is really pretty cool! :D

Maybe we need another graph to convert Liquid fuel number, and vehicle mass, into the mass ratio required by Tsiolkovsky equation. Can it have multiple measure on the right side, for each fuel type (since they have different densities) like balanced LF+O, MonoProp, Xenon, LiquidFuel only

Edited by Blaarkies
Link to comment
Share on other sites

16 hours ago, Mad Rocket Scientist said:

It should be fairly clear how this works if you know what Delta V is.

Not necessarily to everyone.  For example, it wasn't at all obvious to me, and took some head-scratching before I caught on.

Perhaps most folks just happen to be brighter than me.  ;)  It's simple, and it's brilliant... but it's only simple and brilliant if you know how to use it, i.e. what the trick is.  So, for the benefit of folks who aren't any smarter than me, perhaps it's worth providing some simple instructions that explain,

  • What problem does this solve?
  • How to use it?

So, here's what I've been able to work out, after some head-scratching:

 

What problem does this solve?  A simple graphical way to solve rocket-equation problems without resorting to a calculator.  Specifically, if you know 2 of the following 3 things, it will solve the other one for you:

  • dV
  • engine Isp
  • Vessel's mass ratio

How does it work?

There are three lines on the graph, one for each of the above three things.  There's the dV line, which is the vertical axis at left.  There's the engine-Isp line, which is the vertical axis at right.  And there's the mass-ratio line, which is the slanted line in the middle.

To solve any rocket-equation problem, get a straight-edge that's long enough to reach completely across the graph.  Take the two variables that you know, and line up the straight-edge so that it passes through those two lines at the appropriate spot.  To find the solution for the 3rd variable, just read where the straight-edge passes through the third line.

Example 1:  I have an Isp of 400, and need 2000 m/s of dV.  What mass ratio do I need to design into my rocket?
Answer 1:  Set the ruler to pass through "2000" on the left axis and "400" on the right axis, then check where it intersects the slanted mass-ratio line in the middle.  Golly, it intersects at 1.66.  So that's the mass ratio I need.

Example 2:  I have an Isp of 300, and a mass ratio of 1.5.  What dV do I have?
Answer 2:  Set the ruler to pass through 300 on the right-hand axis, and 1.5 on the mass-ratio line in the middle.  Then see where it hits the dV line over at left.  Hmm, I see that I'll get about 1200 m/s of dV.

Example 3:  I need at least 2000 m/s of dV, and I plan on having a mass ratio of 2.  What Isp do I need?
Answer 3:  Set the ruler to pass through 2000 m/s on the left-hand axis, and 2 on the mass-ratio line in the middle.  Then see where it hits the Isp line over at right.  Turns out I need a bit better than 300 Isp.

 

Thanks for posting this... it's brilliant!  What a great idea.  :)

 

Link to comment
Share on other sites

15 hours ago, Blaarkies said:

First!

Shouldn't "600:'600, Nerv'," be 800s instead?
https://wiki.kerbalspaceprogram.com/wiki/LV-N_"Nerv"_Atomic_Rocket_Motor

Other than that, this is really pretty cool! :D

Maybe we need another graph to convert Liquid fuel number, and vehicle mass, into the mass ratio required by Tsiolkovsky equation. Can it have multiple measure on the right side, for each fuel type (since they have different densities) like balanced LF+O, MonoProp, Xenon, LiquidFuel only

Yes it should, that's my bad for grabbing those values from a modded install. 

That's a good idea for another one, I'll get to work on it, but it might take a while. 

2 hours ago, Snark said:

Not necessarily to everyone.  For example, it wasn't at all obvious to me, and took some head-scratching before I caught on.

*snip*

Thanks for posting this... it's brilliant!  What a great idea.  :)

That's a really good point, and a really good explanation. Would you mind if I copied that into the OP when I get back to a desktop? 

Also, thanks!

Link to comment
Share on other sites

56 minutes ago, Mad Rocket Scientist said:

That's a really good point, and a really good explanation. Would you mind if I copied that into the OP when I get back to a desktop?

By all means, be my guest!  :)

By the way... if I might make a minor usability suggestion?

Rationale in spoiler, but what it boils down to is this: get rid of the exhaust velocity numbers completely.  Give that space over entirely to showing Isp numbers, in high-resolution detail with plenty of tick-marks.  Then put all the stock engines on the opposite side of the axis line.

Spoiler

When it comes to Isp, I expect that KSP players are going to be interested mainly in two things:  Actual Isp numeric values, and stock KSP engines.

There are two sides available on the Isp axis line, so it seems to me that it would make a lot of sense to put Isp numbers on one side (with plenty of space for tick-marks to see precise values), and then put the various stock KSP engines on the other side.

Instead, the way it's currently set up, that axis has detailed / hi-res exhaust velocity numbers on one side, with Isp values and KSP stock engines kinda smushed in together on the other.

There's nothing wrong with that, per se-- it's completely scientifically accurate, because what Isp really indicates, physically, is the speed of the exhaust.

However... it seems to me that that's not really useful information for KSP players.  "Exhaust velocity" simply isn't relevant to playing the game.  Nowhere in the UI is that number displayed, anywhere.  I've been playing KSP a lot for four years, and I love punching rocket numbers into a calculator (physics major!) ;) ... and not once have I ever needed the exhaust velocity for anything, because engines don't display that.  They display their Isp values, normalized to Kerbin surface gravity.

So, the way it's currently set up, fully half the available "axis space" is given over to numbers that are of no use at all for playing the game, whereas the stuff that I really care about is smushed together to the point of being difficult to read.  For example, if I want to try to see "where is Isp 320 on this graph?" .... it's pretty much impossible to read, because there are hardly any numbers there, because there's no room.

What do you think?

Link to comment
Share on other sites

4 hours ago, Snark said:

By all means, be my guest!  :)

By the way... if I might make a minor usability suggestion?

Rationale in spoiler, but what it boils down to is this: get rid of the exhaust velocity numbers completely.  Give that space over entirely to showing Isp numbers, in high-resolution detail with plenty of tick-marks.  Then put all the stock engines on the opposite side of the axis line.

  Reveal hidden contents

When it comes to Isp, I expect that KSP players are going to be interested mainly in two things:  Actual Isp numeric values, and stock KSP engines.

There are two sides available on the Isp axis line, so it seems to me that it would make a lot of sense to put Isp numbers on one side (with plenty of space for tick-marks to see precise values), and then put the various stock KSP engines on the other side.

Instead, the way it's currently set up, that axis has detailed / hi-res exhaust velocity numbers on one side, with Isp values and KSP stock engines kinda smushed in together on the other.

There's nothing wrong with that, per se-- it's completely scientifically accurate, because what Isp really indicates, physically, is the speed of the exhaust.

However... it seems to me that that's not really useful information for KSP players.  "Exhaust velocity" simply isn't relevant to playing the game.  Nowhere in the UI is that number displayed, anywhere.  I've been playing KSP a lot for four years, and I love punching rocket numbers into a calculator (physics major!) ;) ... and not once have I ever needed the exhaust velocity for anything, because engines don't display that.  They display their Isp values, normalized to Kerbin surface gravity.

So, the way it's currently set up, fully half the available "axis space" is given over to numbers that are of no use at all for playing the game, whereas the stuff that I really care about is smushed together to the point of being difficult to read.  For example, if I want to try to see "where is Isp 320 on this graph?" .... it's pretty much impossible to read, because there are hardly any numbers there, because there's no room.

What do you think?

That makes sense, the exhaust velocity is just there because when I started making this I did not know how to make scales with conversions. I'll start on fixing the Nerv Isp and those scales soon.

Link to comment
Share on other sites

4 minutes ago, Mako said:

This is neat! I was mostly unaware of and unfamiliar with nomographs until this thread caught my attention. They seem like something I could really geek out over.

Nice work!

Thanks!

I've just updated the OP with @Snark's suggestions, hopefully I didn't make any mistakes in my conversion.

Link to comment
Share on other sites

19 minutes ago, DBowman said:

Would this work for "burn time" / "start burning seconds before node"?

Wait in what sense? If you know one you know the other - just take approximately half. I'm not quote sure why you'd need a nomograph

Link to comment
Share on other sites

2 hours ago, qzgy said:

Wait in what sense? If you know one you know the other - just take approximately half. I'm not quote sure why you'd need a nomograph

Because TWR changes as you burn fuel, causing the ship to expend more dv in the second half of the burn (if split 50/50). The degree of dis-proportionality depends on the changes in TWR of course,  so most burns won't benefit from it...only those really kebal missions do :D

Link to comment
Share on other sites

11 hours ago, DBowman said:

Would this work for "burn time" / "start burning seconds before node"?

 

9 hours ago, Blaarkies said:

Because TWR changes as you burn fuel, causing the ship to expend more dv in the second half of the burn (if split 50/50). The degree of dis-proportionality depends on the changes in TWR of course,  so most burns won't benefit from it...only those really kebal missions do :D

I could probably make it work for that, although I'm not sure exactly what the minimum number of variables I would need would be. It might be possible with just mass ratio and initial TWR.

3 hours ago, FinalFan said:

I think I've seen this sort of thing once or twice before but didn't know what they were called. 

Now I'm torn between wanting to use actual nomographs and wanting to use the word as a nickname for picture menus.  

Either way, thank you!

They are sometimes also called nomograms.

You're welcome, I hope they're useful.  :) 

Link to comment
Share on other sites

23 minutes ago, Mad Rocket Scientist said:

I could probably make it work for that, although I'm not sure exactly what the minimum number of variables I would need would be. It might be possible with just mass ratio and initial TWR.

I am stupid right now, can those two things give you Isp?

Edited by FinalFan
Stupidity
Link to comment
Share on other sites

57 minutes ago, FinalFan said:

I am stupid right now, can those two things give you Isp?

No they can't, I hadn't considered that.

Although if you knew the number of engines you might be able to work backwards to figure out which engines were being used from a set (such as stock engines). You'd also need the payload mass though... I'm not sure.

Link to comment
Share on other sites

19 minutes ago, Mad Rocket Scientist said:

No they can't, I hadn't considered that.

Although if you knew the number of engines you might be able to work backwards to figure out which engines were being used from a set (such as stock engines). You'd also need the payload mass though... I'm not sure.

Come to think of it, maybe I am still being stupid, but why do mass ratio and TWR even matter?  You need Isp to know how much fuel you burn per Delta V, and you need to know how much mass you're starting with, and then ... ?  

For example, it's intuitive to want to know the thrust, but does it actually matter?  More thrust makes a shorter maneuver but would the breakpoint percentage change?  I can't think of a reason it would.  Likewise mass ratio only matters when you run out of fuel.  

I am actually half convinced at least one thing above is wrong.  

Edited by FinalFan
Link to comment
Share on other sites

This thread is quite old. Please consider starting a new thread rather than reviving this one.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...