Science makes it known,
Engineering makes it work,
Art makes it beautiful.


Model Rockets & Boost/Gliders Programming

This site is intended for those who wish to learn more about programming model rocket and glider systems in D, FORTRAN, Pascal, and Lazarus; also serves as a tutorial about model rockets and gliders.  This is an ongoing project covering model rockets, boost/gliders, rocket/gliders, lifting bodies, and Rogallo flexwing gliders.  The source files available for download are meant for building your own application and demonstrating how to call subprograms written in multiple programming languages.

Rockets usually consist of three serial stages or less.  X axis is the longitudinal axis (or Axis of Symmetry), Y axis is the lateral or transverse axis.  Nose tip is at (0, 0).  Stages are numbered from the origin.

MRmain is a Lazarus application for input/analysis of a model rocket or parallel stage employing sub-formsAnalysis includes calculating Center of Pressure and Drag Coefficient.
model rocket analysis UI

A spaceplane (or Rocket powered glider) is an air vehicle, rocket powered for lift-off, and unpowered glide recovery. In this context, includes boost/gliders, rocket/gliders, lifting bodies, and Rogallo flexwings (when carried within a model rocket).
(X-15 Image from NASA Armstrong)

glider01 is a Lazarus application for input of boost/glider, rocket/glider, lifting body, or Rogallo flexwing design, also employing sub-formsGliders are resticted to single stage (due to adapting model rocket stage arrays to store fins/wings/stabilizers data).
rocket powered glider application

LftBdy10.pas - Lifting Body related functions/procedures.  Currently in development.

Both applications share units and .dll.  Rockets are dimensioned for six serial stages, gliders for six sets of fins/wings/stabilizers.  Rockets, rocket/gliders, and lifting bodies may have up to 10 body tubes / stage (including payload section) and 10 conical transitions / stage.  Boost/gliders may only have a single body tube for the engine pod.  Global variable AirVhclTyp is used to identify whether model rocket, boost/glider, rocket/glider, etc.  Both applications can save basic data to plain-text comma separated values files.

Calculating Model Rocket Coefficient of Normal Force & Center of Pressure : mathproc.dll FORTRAN Engineering Subprograms called by Object Pascal .dll; introduction to rocket aerodynamics & stability; includes source file downloads - tir33.for,, missle02.pas.  missle02.pas includes a Pascal implementation of ELLIPSE_SEGMENT algorithm from CALCULATING ELLIPSE OVERLAP AREAS, used for finding the surface area of a rear swept elliptical fin/wing/stabilizer where the root chord does not pass through the ellipse origin.  Elliptical area / perimeter calculations can be complex, involving geometric angles, parametric angles, integrations.  Both the unswept/swept elliptical fins/wings area and perimeter calculations are approximations.

These two .dll are the heart of the system.
Multi-Stage Model Rocket User Interface : Lazarus Tab Sheets (TPageControl & TTabSheet) tutorial; each Tab Sheet represents a model rocket stage.  Brief introduction to Lazarus sub-forms.  User interface for inputting rocket design parameters and Calculating Model Rocket Coefficient of Normal Force & Center of Pressure.  For a stable flight, the Center of Pressure (cp) must be aft of the Center of Gravity (cg) by one caliber (largest body diameter).  Each stage configuration is analyzed separately.

Originally this was (and still is) a stand-alone program and the start of this project; now also a MRmain Sub-form.  One of two forms that can be used to enter model rocket fin data.   During initial design, using a separate Tab Sheet for each stage seemed acceptable.  However that was not the case during actual coding and maintenance.

Lazarus Body Tubes Sub-forms : unit/form untBT10 / FrmBT10 used by MRmain and glider01 to define body tube (or fuselage segment) data (rocket/gliders usually have body tubes), missle14 / FrmPayload used by MRmain to define payload section (if any); Lazarus Sub-form, Grid Cell Background Color, StringGrid Cell Editor, and Calling FORTRAN.  Detailed introduction to Lazarus sub-forms and TStringGrids; example of Lazarus unit calling FORTRAN subprograms via Object Pascal .dll; includes downloads.

Body tube data required for CD calculations.  Body tubes, nose cone, and conical transition(s) (if any) comprise the model rocket and rocket/glider fuselageNose cone and conical transition(s) usually comprise lifting bodies, may include body tubes.

From the diagram at right:
BC-54 is an example nose cone;
ST-56, CPT-103, ST-103, ST-133, and ST-812 are body tubes;
BR5-10, BR10-13, and BR8-13 are conical transitions (BR5-10 and BR10-13 are being used as conical shoulders, BR8-13 is being used as conical boattail);
BTC-10 is a coupler;
EM-8 is an engine mount.
(boost/gliders, rocket/gliders, and lifting bodies may use ejectable engine pods)
Fuselage Components

Lazarus Sub-form, Model Rocket Fins, and Glider Wings/Stabilizers : Lazarus Sub-form used by MRmain and glider01; uses TImage.Picture property, MessageDlg(...), QuestionDlg(...).  This form is used for input of flight surfaces3 (fins/wings/stabilizers) data required for cp, C, CD, and other calculations.  Another example of calling FORTRAN from Lazarus via Object Pascal.

Unit defines glider-specific global data.  Stores flight surfaces basic data only.  Both rockets and lifting bodies refer to flight surfaces as fins.  One of two forms that can be used to enter model rocket fin data.  This form must be used for entering glider's fins/wings/stabilizers data (can be adapted for hand launched gliders).

Page shows examples of boost/gliders, rocket/gliders, and lifting bodies.
Flexwing Glider
Rogallo Flexwing Glider

Rocket/Glider External Structural/Stabilizing Body Tubes : Lazarus Sub-form used by glider01; uses TStringGrid, OnSelectEditor, PickList editor, csDropDownList.

Sub-form is used to input External Body Tube data as shown in diagram at right; data required for CD calculations.  Includes source code downloads.

Currently sub-form only handles rocket/gliders, but is easily expandable to include model rockets.

Swing Wing Rocket/Glider
Model Rocket Parallel Stages : Lazarus Sub-form user interface for inputting Parallel Stage data and adding Parallel Stage Pods to a rocket's nth stage; used by MRmain.  Also demonstrates calling FORTRAN mathproc.dll Center of Pressure cp and Coefficient of Normal Force C subroutines from Lazarus via an Object Pascal Library; includes downloads, compiling instructions (including brief hints for building sttstcs.for & mathproc.for, main Lazarus project MRmain).

Parallel Stage data is stored in a separate file, allowing the same Parallel Stage to be used with different model rockets.

In order to reduce complexity, several simplifications were made to Parallel Stage Processing.  Depending on Parallel Stage Pod length, may move cp forward.

Soyuz Rocket with 4 parallel stages
Engine Thrust File I/O - missle05.pas : Object Pascal Windows program to input and save to a file thrust points from a model rocket engine thrust time curve (shown at right).  Uses several of the include files and Object Pascal Libraries mentioned on these pages.

Thrust is a force vector.  Provides acceleration and maintains velocity (both of which are also vectors).

Demonstrates how to call D procedures using its mangled name or its unmangled name when declared as extern (C)Engine Thrust Points right click short cut popup menu processing via calls to D module hedtio.

When Engine Thrust Points > 0.0, time interval is 0.1 seconds; when Engine Thrust Points = 0.0, time interval is 0.5 seconds.  When completed, MRcommon.pas procedure prcsEngFile (...) will be used to process thrust data for flight analysis.

model rocket engines UI

For aircraft, for constant velocity straight and level flight, Thrust = DragLift = Weight


L = CLα ½ ρ V2 Ar

    L     : Lift Force (vector)
  CLα   : Coefficient of Lift at angle of attack α; dimensionless

½ ρ V2 : dynamic pressure
    ρ      : air density
    V     : airstream velocity (vector)
   Ar     : reference area; definition varies depending on vehicle type and force (L, N, or D) being calculated.


D = CD ½ ρ V2 Ar

D, aerodynamic drag, measured as a force vector, is resistance to flight through air.  Drag Coefficient (CD) is a dimensionless measurement of a flight vehicle's resistance to airflow due to its design, shape, and finish.  In simplest terms, drag can be pressure drag (compression drag), friction drag, interference drag (drag between airframe components), or induced drag (drag due to lift).  aero030 is a D Windows program to estimate CD for model rockets, parallel stages, boost/gliders, and rocket/gliders; uses module aero010, which is designed to be the heart of D model rocket & glider programs.  Both modules call Object Pascal libraries.  missle13.dll procedures estimate pressure drag, friction drag, and interference drag coefficients.  These are then summarized for an overall CD.

1. Image from Conditions for Rocket Stability:
2. Image from Centuri Model Rocket Designers Manual, p. 19
3. The definition of flight surfaces has been expanded from its textbook definition to include main wing.
4. Insect Article & Plans
April 1970 American Aircraft Modeler
5. Image from TR-4 Model Rocket Technical Report Boost Gliders,  p. 12, and modified.
6. Image created from
7. Model Rocket Engine Designation
8. Image from NASA Glenn Research Center
Forces acting on an air vehicle in flight.  For rockets, L is usually ignored; Normal Force N is of greater significance.

Primary Site:
Linked In Public Profile:
View Rodney Roberts's profile on LinkedIn

Website is supported on DESKTOP platforms only.  This index page is an expanded "alternate" main page to selected pages of author's website.
To return to this index page, use the Browser's BACK button.
The downloadable source code files (version/revision history unavailable) are enhanced (including error fixes) and tested periodically - check for revised versions.
Free web hosting provided by FREE WEB HOSTING

Any and all © copyrights, ™ trademarks, or other intellectual property (IP) mentioned/used here are the property of their respective owners.  No infringement is intended.  If you suspect infringement occurred, please contact me at, fully describing.  Feel free to use any of the above in your project (without violating any intellectual property rights); please give credit (same idea as Copyleft).