11#include "lob/lob_export.hpp"
19#define LOB_SPLINE_SEGMENTS 15
21#define LOB_BUILDER_BUFFER_SIZE 272
580 const uint32_t* pranges,
LobOutput* pouts,
614 const uint32_t* pranges,
LobBuilder * LobBuilderAzimuthDeg(LobBuilder *pbuilder, double value)
Sets the azimuth (bearing) of the target in degrees.
double LobPaToInHg(double value)
Converts pascals to inches of mercury.
void LobBuilderInit(LobBuilder *pbuilder)
Initializes a builder to default state. No-op if pbuilder is null.
double LobInchToDeg(double value, double range_ft)
Inches of projection at a given range to degrees.
double LobMilToInch(double value, double range_ft)
Converts milliradians (MIL) to projected inches at a given range in feet.
double LobSToUs(double value)
Converts seconds to microseconds.
size_t LobSolve(const LobContext *pctx, const uint32_t *pranges, LobOutput *pouts, size_t size)
Solves the exterior ballistics problem for a given set of ranges. Results contain a forward-solution.
double LobMsToS(double value)
Converts milliseconds to seconds.
double LobInToMm(double value)
Converts inches to millimeters.
LobBuilder * LobBuilderWindSpeedFps(LobBuilder *pbuilder, double value)
Sets the wind speed in feet per second.
LobBuilder * LobBuilderTemperatureDegF(LobBuilder *pbuilder, double value)
Sets the temperature in degrees Fahrenheit.
LobBuilder * LobBuilderTailLengthInch(LobBuilder *pbuilder, double value)
Sets the projectile tail length in inches.
LobBuilder * LobBuilderOpticHeightInches(LobBuilder *pbuilder, double value)
Sets the height of the optic above the bore in inches.
#define LOB_BUILDER_BUFFER_SIZE
The size in bytes of the builder buffer.
Definition lob.h:21
double LobMoaToMil(double value)
Converts minutes of angle (MOA) to milliradians (MIL).
double LobFtToM(double value)
Converts feet to meters.
LobBuilder * LobBuilderAirPressureInHg(LobBuilder *pbuilder, double value)
Sets the air pressure in inches of mercury (inHg).
double LobMoaToDeg(double value)
Converts minutes of angle (MOA) to degrees.
LobBuilder * LobBuilderMinimumEnergy(LobBuilder *pbuilder, uint16_t value)
Sets the minimum energy threshold for the solver.
double LobYdToFt(double value)
Converts yards to feet.
LobBuilder * LobBuilderRelativeHumidityPercent(LobBuilder *pbuilder, double value)
Sets the relative humidity at the firing site in percent.
uint8_t LobClockAngleT
Clock angle positions for wind direction.
Definition lob.h:43
LobBuilder * LobBuilderDiameterInch(LobBuilder *pbuilder, double value)
Sets the projectile diameter (caliber) in inches.
LobBuilder * LobBuilderBCAtmosphere(LobBuilder *pbuilder, LobAtmosphereReferenceT type)
Sets the atmosphere reference associated with ballistic coefficient.
size_t LobFastInverse(const LobContext *pctx, LobOutput *pouts, size_t size)
Converts forward-solution output to inverse-solution adjustments.
LobBuilder * LobBuilderLengthInch(LobBuilder *pbuilder, double value)
Sets the projectile length in inches.
double LobDegToMoa(double value)
Converts degrees to minutes of angle (MOA).
LobBuilder * LobBuilderTwistInchesPerTurn(LobBuilder *pbuilder, double value)
Sets the twist rate of the barrel in inches per turn.
LobBuilder * LobBuilderBCVelocityBands(LobBuilder *pbuilder, const float *pfps, const float *pbcs, size_t size)
Loads ballistic coefficients measured at multiple velocities.
const char * LobVersion(void)
Gets the library version in major.minor.patch format.
double LobMmToIn(double value)
Converts millimeters to inches.
uint8_t LobAtmosphereReferenceT
Atmosphere reference type.
Definition lob.h:35
double LobMoaToInch(double value, double range_ft)
Converts minutes of angle (MOA) to projected inches at a given range in feet.
double LobCmToIn(double value)
Converts centimeters to inches.
double LobInToFt(double value)
Converts inches to feet.
LobBuilder * LobBuilderReset(LobBuilder *pbuilder)
Resets a builder state by re-initializing. No-op if pbuilder is null.
double LobFtToYd(double value)
Converts feet to yards.
LobBuilder * LobBuilderLatitudeDeg(LobBuilder *pbuilder, double value)
Sets the latitude of the firing location in degrees.
LobBuilder * LobBuilderBCDragFunction(LobBuilder *pbuilder, LobDragFunctionT type)
Sets the drag function associated with ballistic coefficient.
LobBuilder * LobBuilderMaximumTime(LobBuilder *pbuilder, double value)
Sets the maximum time of flight for the solver.
@ kLobDragFunctionG2
G2 drag function.
Definition lob.h:27
@ kLobDragFunctionG1
G1 drag function.
Definition lob.h:26
@ kLobDragFunctionG7
G7 drag function.
Definition lob.h:30
@ kLobDragFunctionG6
G6 drag function.
Definition lob.h:29
@ kLobDragFunctionG8
G8 drag function.
Definition lob.h:31
@ kLobDragFunctionG5
G5 drag function.
Definition lob.h:28
double LobMilToDeg(double value)
Converts milliradians (MIL) to degrees.
LobBuilder * LobBuilderOgiveRtR(LobBuilder *pbuilder, double value)
Sets the Rt/R ratio of the projectile ogive.
@ kLobErrorDiameterOOR
Definition lob.h:74
@ kLobErrorNotFormed
Definition lob.h:87
@ kLobErrorMeplatDiameterOOR
Definition lob.h:85
@ kLobErrorMachDragTableNotMonotonic
Definition lob.h:81
@ kLobErrorBaseDiameterOOR
Definition lob.h:70
@ kLobErrorLatitudeOOR
Definition lob.h:78
@ kLobErrorInternalError
Definition lob.h:77
@ kLobErrorNoseLengthOOR
Definition lob.h:86
@ kLobErrorBallisticCoefficientOOR
Definition lob.h:68
@ kLobErrorZeroAngleOOR
Definition lob.h:92
@ kLobErrorLengthOOR
Definition lob.h:79
@ kLobErrorZeroUnreachable
Definition lob.h:95
@ kLobErrorOgiveRtROOR
Definition lob.h:88
@ kLobErrorMachDragTableTooShort
Definition lob.h:82
@ kLobErrorRangeAngleOOR
Definition lob.h:89
@ kLobErrorZeroDataRequired
Definition lob.h:93
@ kLobErrorMaximumTimeOOR
Definition lob.h:84
@ kLobErrorTailLengthOOR
Definition lob.h:90
@ kLobErrorBallisticCoefficientRequired
Definition lob.h:69
@ kLobErrorBcBandsInvalid
Definition lob.h:71
@ kLobErrorAirPressureOOR
Definition lob.h:63
@ kLobErrorInitialVelocityRequired
Definition lob.h:76
@ kLobErrorNone
Definition lob.h:62
@ kLobErrorHumidityOOR
Definition lob.h:75
@ kLobErrorAzimuthOOR
Definition lob.h:67
@ kLobErrorMassOOR
Definition lob.h:83
@ kLobErrorZeroDistanceOOR
Definition lob.h:94
@ kLobErrorWindHeadingOOR
Definition lob.h:91
@ kLobErrorAltitudeOfThermometerOOR
Definition lob.h:66
@ kLobErrorBcBandsTooShort
Definition lob.h:73
@ kLobErrorMachDragTableInvalid
Definition lob.h:80
@ kLobErrorNumberOfErrors
Definition lob.h:96
@ kLobErrorBcBandsNotMonotonic
Definition lob.h:72
@ kLobErrorAltitudeOfBarometerOOR
Definition lob.h:64
@ kLobErrorAltitudeOfFiringSiteOOR
Definition lob.h:65
double LobSToMs(double value)
Converts seconds to milliseconds.
double LobGToGrain(double value)
Converts grams to grains.
double LobMpsToFps(double value)
Converts meters per second to feet per second.
LobBuilder * LobBuilderZeroAngleMOA(LobBuilder *pbuilder, double value)
Sets the angle between the sight and launch angle used to achieve zero.
double LobJToFtLbs(double value)
Converts joules to foot-pounds.
#define LOB_SPLINE_SEGMENTS
The number of spline pieces comprising a drag function.
Definition lob.h:19
LobBuilder * LobBuilderAltitudeOfThermometerFt(LobBuilder *pbuilder, double value)
Sets the altitude of the location where temperature was taken in feet.
@ kLobClockAngleVIII
eight o'clock
Definition lob.h:52
@ kLobClockAngleIV
four o'clock
Definition lob.h:48
@ kLobClockAngleV
five o'clock
Definition lob.h:49
@ kLobClockAngleI
one o'clock
Definition lob.h:45
@ kLobClockAngleVI
six o'clock
Definition lob.h:50
@ kLobClockAngleXI
eleven o'clock
Definition lob.h:55
@ kLobClockAngleVII
seven o'clock
Definition lob.h:51
@ kLobClockAngleII
two o'clock
Definition lob.h:46
@ kLobClockAngleIII
three o'clock
Definition lob.h:47
@ kLobClockAngleXII
twelve o'clock
Definition lob.h:56
@ kLobClockAngleX
ten o'clock
Definition lob.h:54
@ kLobClockAngleIX
nine o'clock
Definition lob.h:53
double LobKphToMph(double value)
Converts kilometers per hour to miles per hour.
uint8_t LobDragFunctionT
Drag function type.
Definition lob.h:24
@ kLobAtmosphereReferenceArmyStandardMetro
Army Standard Metro.
Definition lob.h:37
@ kLobAtmosphereReferenceIcao
International Civil Aviation Organization (ICAO)
Definition lob.h:38
double LobFtLbsToJ(double value)
Converts foot-pounds to joules.
LobBuilder * LobBuilderSplineFitTable(LobBuilder *pbuilder, const float *pmachs, const float *pdrags, size_t size)
Loads a custom Mach vs Drag table for the projectile.
double LobKgToGrain(double value)
Converts kilograms to grains.
void LobBuilderBuild(LobBuilder *pbuilder, LobContext *presult)
Builds the LobContext object with the configured parameters.
double LobDegToMil(double value)
Converts degrees to milliradians (MIL).
LobBuilder * LobBuilderRangeAngleDeg(LobBuilder *pbuilder, double value)
Sets the range angle (inclination) to the target in degrees.
LobBuilder * LobBuilderStepSize(LobBuilder *pbuilder, uint16_t value)
Sets the step size for the numerical solver.
LobBuilder * LobBuilderZeroImpactHeightInches(LobBuilder *pbuilder, double value)
Sets the zero impact height in inches.
double LobMbarToInHg(double value)
Converts millibars to inches of mercury.
uint8_t LobErrorT
Error codes returned by the builder.
Definition lob.h:60
double LobMoaToIphy(double value)
Converts minutes of angle (MOA) to inches per hundred yards (IPHY).
double LobMilToMoa(double value)
Converts milliradians (MIL) to minutes of angle (MOA).
double LobInchToMil(double value, double range_ft)
Inches of projection at a given range to milliradians (MIL).
LobBuilder * LobBuilderBallisticCoefficientPsi(LobBuilder *pbuilder, double value)
Sets the ballistic coefficient (Psi).
double LobMToYd(double value)
Converts meters to yards.
double LobFtToIn(double value)
Converts feet to inches.
double LobInToCm(double value)
Converts inches to centimeters.
LobBuilder * LobBuilderAltitudeOfFiringSiteFt(LobBuilder *pbuilder, double value)
Sets the altitude of the firing site in feet.
double LobLbsToGrain(double value)
Converts pounds to grains.
LobBuilder * LobBuilderMinimumSpeed(LobBuilder *pbuilder, uint16_t value)
Sets the minimum speed threshold for the solver.
double LobMilToIphy(double value)
Converts milliradians (MIL) to inches per hundred yards (IPHY).
LobBuilder * LobBuilderZeroDistanceYds(LobBuilder *pbuilder, double value)
Sets the zero distance in yards.
double LobMToFt(double value)
Converts meters to feet.
LobBuilder * LobBuilderNoseLengthInch(LobBuilder *pbuilder, double value)
Sets the projectile nose length in inches.
LobBuilder * LobBuilderInitialVelocityFps(LobBuilder *pbuilder, uint16_t value)
Sets the initial velocity of the projectile in feet per second.
LobBuilder * LobBuilderMeplatDiameterInch(LobBuilder *pbuilder, double value)
Sets the projectile meplat diameter in inches.
LobBuilder * LobBuilderWindHeadingDeg(LobBuilder *pbuilder, double value)
Sets the wind heading in degrees.
LobBuilder * LobBuilderAltitudeOfBarometerFt(LobBuilder *pbuilder, double value)
Sets the altitude of the location where air pressure was taken in feet.
double LobInchToMoa(double value, double range_ft)
Inches of projection at a given range to minutes of angle (MOA).
LobBuilder * LobBuilderMassGrains(LobBuilder *pbuilder, double value)
Sets the projectile mass in grains.
size_t LobSolveInverse(const LobContext *pctx, const uint32_t *pranges, LobOutput *pouts, size_t size)
Solves the exterior ballistics problem for a given set of ranges. Results contain an inverse-solution...
double LobPsiToInHg(double value)
Converts pounds per square inch (PSI) to inches of mercury.
double LobKgSqMToPmsi(double value)
Converts kilograms per square meter to pounds mass per square inch.
LobBuilder * LobBuilderWindHeading(LobBuilder *pbuilder, LobClockAngleT value)
Sets the wind heading using a clock angle.
double LobFpsToMps(double value)
Converts feet per second to meters per second.
double LobDegCToDegF(double value)
Converts degrees celsius to degrees fahrenheit.
double LobKnToMph(double value)
Converts Knots to miles per hour.
double LobYdToM(double value)
Converts yards to meters.
void LobBuilderCopy(LobBuilder *dst, const LobBuilder *src)
Copies builder state from src to dst. No-op if either is null.
LobBuilder * LobBuilderBaseDiameterInch(LobBuilder *pbuilder, double value)
Sets the projectile base diameter in inches.
void LobBuilderDestroy(LobBuilder *pbuilder)
Destroys a builder and releases resources. No-op if pbuilder is null.
LobBuilder * LobBuilderWindSpeedMph(LobBuilder *pbuilder, double value)
Sets the wind speed in miles per hour.
double LobUsToS(double value)
Converts microseconds to seconds.
Opaque builder type for constructing LobContext objects.
Definition lob.h:158
size_t align_size
Definition lob.h:161
uint8_t buffer[272]
Definition lob.h:162
double align_double
Definition lob.h:160
Structure of parameters consumed by the solver.
Definition lob.h:123
float drags[15 *4]
Drag curve coefficients.
Definition lob.h:137
double aerodynamic_jump
Aerodynamic jump effect in Moa.
Definition lob.h:133
LobCoriolis coriolis
Coriolis effect parameters.
Definition lob.h:130
double k_lapse
Projected linear density lapse coeff.
Definition lob.h:135
LobWind wind
Wind vector.
Definition lob.h:129
double speed_of_sound
The local speed of sound in Fps.
Definition lob.h:125
double max_time
Max time of flight for solver.
Definition lob.h:136
double drag_coeff
Drag coefficient scaling factor.
Definition lob.h:124
double stability_factor
Miller stability factor.
Definition lob.h:132
LobErrorT error
Error status after build.
Definition lob.h:141
double mass
Mass of the projectile in pounds.
Definition lob.h:126
uint16_t minimum_speed
Minimum speed for solver.
Definition lob.h:139
double optic_height
Height of the optic above the bore.
Definition lob.h:127
LobGravity gravity
Gravity vector.
Definition lob.h:128
double zero_angle
Angle between sight and trajectory.
Definition lob.h:131
uint16_t velocity
Initial velocity of projectile in Fps.
Definition lob.h:138
double spindrift_factor
Spin drift factor.
Definition lob.h:134
uint16_t step_size
Solver step size in inches.
Definition lob.h:140
Coriolis effect parameters.
Definition lob.h:112
double cos_l_sin_a
2*Omega*cos(latitude)*sin(azimuth)
Definition lob.h:113
double sin_l
2*Omega*sin(latitude)
Definition lob.h:114
double cos_l_cos_a
2*Omega*cos(latitude)*cos(azimuth)
Definition lob.h:115
Gravity vector.
Definition lob.h:100
double x
Acceleration ft/s/s in the x-direction.
Definition lob.h:101
double y
Acceleration ft/s/s in the y-direction.
Definition lob.h:102
Structure holding the output results of a ballistic calculation.
Definition lob.h:145
uint32_t energy
Calculated energy in foot-pounds.
Definition lob.h:148
uint16_t velocity
Calculated velocity in feet per second.
Definition lob.h:147
uint32_t range
Associated range in feet.
Definition lob.h:146
double time_of_flight
Time of flight in seconds.
Definition lob.h:154
double elevation
Elevation change in inches (forward-solution) or MOA adjustment (inverse-solution).
Definition lob.h:149
double deflection
Windage deflection in inches (forward-solution) or MOA adjustment (inverse-solution).
Definition lob.h:152
Wind vector.
Definition lob.h:106
double x
Wind speed in fps in the x-direction.
Definition lob.h:107
double z
Wind speed in fps in the z-direction.
Definition lob.h:108