Using check's lat/lon trick to figure out surface velocity bearing I've made a suicide burn landing program. Great mod OP, its pretty fun figuring this stuff out. To test it launch a craft that can land with a reasonably centered COT and reasonable TWR, run the program, and then get some altitude. The program engages after you start descending. It figures out the required constant throttle power and heading to zero out your velocity at altitude = TargetH, and executes it when the required throttle to do the maneuver gets over thrmargin (.7) . clearscreen. print "Started...". set gl to 9.81. set TargetH to 10 . set targetv to -.9 . set thr to 0 . set thrmargin to 0.7 . set tlmargin to 0.8 . set theta to 0 . set tl to 0 . set E to ( TargetH - ALT:RADAR ) . set D to 0 . print "waiting...". until verticalspeed < -1 { }. print "Suicide Burn..." . SAS off. until ( abs(E) < 10 ) AND ( ( abs(verticalspeed) < 2 ) OR ( tl < 0 ) ) { set TMR to ( maxthrust / mass ) + 0.01 . set E to ( TargetH - ALT:RADAR ) . set tl to 2 * tlmargin * E / verticalspeed - .5 . set thr to ( ( (verticalspeed / tl - gl) ^ 2 + surfacespeed ^ 2 / tl ^ 2 ) ^ .5) / TMR . set q to (surfacespeed * verticalspeed)/( verticalspeed^2 - 2*E). set aq to abs(q). set theta to (-90)*( q^5 + 83.29*q^3 + 518.1*q )/( aq^5 + 96.08*aq^3 + 535.5*aq + 597.9 ). set lat1 to latitude . set lon1 to longitude . set lat2 to latitude . set lon2 to longitude . set bearingw to ( lon2 - lon1 ) / cos( lat2 ) . set bearingn to ( lat2 - lat1 ) . set bearingm to ( bearingw^2 + bearingn^2 )^.5 + 0.000001 . lock steering to up + R( theta * bearingn / bearingm , theta * bearingw / bearingm , 180) . if thr < 0 { lock throttle to 0 . }. if thr > 1 { lock throttle to 1 . }. if ( thr < 1 ) AND ( thr > thrmargin ) { lock throttle to thr. }. print "tl: " + tl + " " at (20,0). print "bw: " + bearingw/bearingm + " " at (20,1). print "the: " + theta + " " at (20,2). }. print "Hovering..." . until abs(verticalspeed) < .05 { set theta to surfacespeed. set WTR to (mass*gl/maxthrust). set D to (-.2) * ( verticalspeed - targetv ) * WTR. set thr to D + WTR* cos( theta ). set lat1 to latitude. set lon1 to longitude. set lat2 to latitude. set lon2 to longitude. set bearingw to ( lon2 - lon1 ) / cos( lat2 ) . set bearingn to ( lat2 - lat1 ) . set bearingm to ( bearingw^2 + bearingn^2 )^.5 + 0.000001 . lock steering to up + R( theta*bearingn/bearingm, theta*bearingw/bearingm , 180) . if thr < 0 { lock throttle to 0. } . if thr > 1 { lock throttle to 1 . } . if (thr < 1) AND (thr > 0) { lock throttle to thr. } . } . print "Landed.". set throttle to 0. unlock steering. print "Exiting..". I also figured out an approximation to the atan function that might be useful to people. It has a max error about 2 degrees, but its precise enough for this. The code below executes theta = atand( q ) . set q to something. set aq to abs(q). set theta to (-90)*( q^5 + 83.29*q^3 + 518.1*q )/( aq^5 + 96.08*aq^3 + 535.5*aq + 597.9 ).