lob 0.8.0
 
Loading...
Searching...
No Matches
lob.hpp
Go to the documentation of this file.
1// Copyright (c) 2025 Joel Benway
2// SPDX-License-Identifier: GPL-3.0-or-later
3// Please see end of file for extended copyright information
4
5#pragma once
6
7#include <array>
8#include <cstddef>
9#include <cstdint>
10#include <type_traits>
11
12#include "lob/lob.h"
13
14namespace lob {
15
17constexpr size_t kLobTableSize = LOB_TABLE_SIZE;
20
30
39
59
90
97template <typename E>
98constexpr E ToEnum(std::underlying_type_t<E> value) noexcept {
99 static_assert(std::is_enum<E>::value, "ToEnum() only supports enum types");
100 return static_cast<E>(value);
101}
102
109template <typename E>
110constexpr std::underlying_type_t<E> ToUnderlying(E value) noexcept {
111 return static_cast<std::underlying_type_t<E>>(value);
112}
113
129
130inline bool operator==(::LobErrorT a, ErrorT b) noexcept {
131 return a == static_cast<::LobErrorT>(b);
132}
133inline bool operator!=(::LobErrorT a, ErrorT b) noexcept {
134 return a != static_cast<::LobErrorT>(b);
135}
136inline bool operator==(ErrorT a, ::LobErrorT b) noexcept {
137 return static_cast<::LobErrorT>(a) == b;
138}
139inline bool operator!=(ErrorT a, ::LobErrorT b) noexcept {
140 return static_cast<::LobErrorT>(a) != b;
141}
142
147class Builder {
148 public:
149 Builder() : builder_{} {
150 ::LobBuilderInit(&builder_);
151 }
152 ~Builder() { ::LobBuilderDestroy(&builder_); }
153
154 Builder(const Builder& other) : builder_{} {
155 ::LobBuilderCopy(&builder_, &other.builder_);
156 }
157
158 Builder(Builder&& other) noexcept : builder_{} {
159 ::LobBuilderCopy(&builder_, &other.builder_);
160 ::LobBuilderReset(&other.builder_);
161 }
162
164 Builder& operator=(const Builder& rhs) {
165 if (this != &rhs) {
166 ::LobBuilderCopy(&builder_, &rhs.builder_);
167 }
168 return *this;
169 }
170
172 Builder& operator=(Builder&& rhs) noexcept {
173 if (this != &rhs) {
174 ::LobBuilderCopy(&builder_, &rhs.builder_);
175 ::LobBuilderReset(&rhs.builder_);
176 }
177 return *this;
178 }
179
186 ::LobBuilderBallisticCoefficientPsi(&builder_, value);
187 return *this;
188 }
189
196 ::LobBuilderBCAtmosphere(&builder_,
197 static_cast<::LobAtmosphereReferenceT>(type));
198 return *this;
199 }
200
208 static_cast<::LobDragFunctionT>(type));
209 return *this;
210 }
211
217 Builder& DiameterInch(double value) {
218 ::LobBuilderDiameterInch(&builder_, value);
219 return *this;
220 }
221
228 ::LobBuilderMeplatDiameterInch(&builder_, value);
229 return *this;
230 }
231
237 Builder& BaseDiameterInch(double value) {
238 ::LobBuilderBaseDiameterInch(&builder_, value);
239 return *this;
240 }
241
247 Builder& LengthInch(double value) {
248 ::LobBuilderLengthInch(&builder_, value);
249 return *this;
250 }
251
257 Builder& NoseLengthInch(double value) {
258 ::LobBuilderNoseLengthInch(&builder_, value);
259 return *this;
260 }
261
267 Builder& TailLengthInch(double value) {
268 ::LobBuilderTailLengthInch(&builder_, value);
269 return *this;
270 }
271
277 Builder& OgiveRtR(double value) {
278 ::LobBuilderOgiveRtR(&builder_, value);
279 return *this;
280 }
281
291 Builder& MachVsDragTable(const float* pmachs, const float* pdrags,
292 size_t size) {
293 ::LobBuilderMachVsDragTable(&builder_, pmachs, pdrags, size);
294 return *this;
295 }
296
306 template <size_t N>
307 Builder& MachVsDragTable(const std::array<float, N>& machs,
308 const std::array<float, N>& drags) {
309 ::LobBuilderMachVsDragTable(&builder_, machs.data(), drags.data(), N);
310 return *this;
311 }
312
318 Builder& MassGrains(double value) {
319 ::LobBuilderMassGrains(&builder_, value);
320 return *this;
321 }
322
328 Builder& InitialVelocityFps(uint16_t value) {
329 ::LobBuilderInitialVelocityFps(&builder_, value);
330 return *this;
331 }
332
338 Builder& OpticHeightInches(double value) {
339 ::LobBuilderOpticHeightInches(&builder_, value);
340 return *this;
341 }
342
350 ::LobBuilderTwistInchesPerTurn(&builder_, value);
351 return *this;
352 }
353
362 Builder& ZeroAngleMOA(double value) {
363 ::LobBuilderZeroAngleMOA(&builder_, value);
364 return *this;
365 }
366
372 Builder& ZeroDistanceYds(double value) {
373 ::LobBuilderZeroDistanceYds(&builder_, value);
374 return *this;
375 }
376
385 ::LobBuilderZeroImpactHeightInches(&builder_, value);
386 return *this;
387 }
388
395 ::LobBuilderAltitudeOfFiringSiteFt(&builder_, value);
396 return *this;
397 }
398
404 Builder& AirPressureInHg(double value) {
405 ::LobBuilderAirPressureInHg(&builder_, value);
406 return *this;
407 }
408
419 ::LobBuilderAltitudeOfBarometerFt(&builder_, value);
420 return *this;
421 }
422
428 Builder& TemperatureDegF(double value) {
429 ::LobBuilderTemperatureDegF(&builder_, value);
430 return *this;
431 }
432
443 ::LobBuilderAltitudeOfThermometerFt(&builder_, value);
444 return *this;
445 }
446
453 ::LobBuilderRelativeHumidityPercent(&builder_, value);
454 return *this;
455 }
456
464 ::LobBuilderWindHeading(&builder_, static_cast<::LobClockAngleT>(value));
465 return *this;
466 }
467
474 Builder& WindHeadingDeg(double value) {
475 ::LobBuilderWindHeadingDeg(&builder_, value);
476 return *this;
477 }
478
484 Builder& WindSpeedFps(double value) {
485 ::LobBuilderWindSpeedFps(&builder_, value);
486 return *this;
487 }
488
494 Builder& WindSpeedMph(double value) {
495 ::LobBuilderWindSpeedMph(&builder_, value);
496 return *this;
497 }
498
505 Builder& AzimuthDeg(double value) {
506 ::LobBuilderAzimuthDeg(&builder_, value);
507 return *this;
508 }
509
516 Builder& LatitudeDeg(double value) {
517 ::LobBuilderLatitudeDeg(&builder_, value);
518 return *this;
519 }
520
526 Builder& RangeAngleDeg(double value) {
527 ::LobBuilderRangeAngleDeg(&builder_, value);
528 return *this;
529 }
530
537 Builder& MinimumSpeed(uint16_t value) {
538 ::LobBuilderMinimumSpeed(&builder_, value);
539 return *this;
540 }
541
548 Builder& MinimumEnergy(uint16_t value) {
549 ::LobBuilderMinimumEnergy(&builder_, value);
550 return *this;
551 }
552
559 Builder& MaximumTime(double value) {
560 ::LobBuilderMaximumTime(&builder_, value);
561 return *this;
562 }
563
570 Builder& StepSize(uint16_t value) {
571 ::LobBuilderStepSize(&builder_, value);
572 return *this;
573 }
574
579 Builder& Reset() noexcept {
580 ::LobBuilderReset(&builder_);
581 return *this;
582 }
583
588 Input Build() { return ::LobBuilderBuild(&builder_); }
589
590 private:
591 ::LobBuilder builder_;
592};
593
602inline size_t Solve(const Input& in, const uint32_t* pranges, Output* pouts,
603 size_t size) {
604 return ::LobSolve(&in, pranges, pouts, size);
605}
606
615template <size_t N>
616inline size_t Solve(const Input& in, const std::array<uint32_t, N>& pranges,
617 std::array<Output, N>& pouts) {
618 return ::LobSolve(&in, pranges.data(), pouts.data(), N);
619}
620
625inline const char* Version() { return ::LobVersion(); }
626
632inline double MoaToMil(double value) { return ::LobMoaToMil(value); }
638inline double MoaToDeg(double value) { return ::LobMoaToDeg(value); }
644inline double MoaToIphy(double value) { return ::LobMoaToIphy(value); }
652inline double MoaToInch(double value, double range_ft) {
653 return ::LobMoaToInch(value, range_ft);
654}
655
661inline double MilToMoa(double value) { return ::LobMilToMoa(value); }
667inline double MilToDeg(double value) { return ::LobMilToDeg(value); }
673inline double MilToIphy(double value) { return ::LobMilToIphy(value); }
681inline double MilToInch(double value, double range_ft) {
682 return ::LobMilToInch(value, range_ft);
683}
684
690inline double DegToMoa(double value) { return ::LobDegToMoa(value); }
696inline double DegToMil(double value) { return ::LobDegToMil(value); }
697
704inline double InchToMoa(double value, double range_ft) {
705 return ::LobInchToMoa(value, range_ft);
706}
707
713inline double InchToMil(double value, double range_ft) {
714 return ::LobInchToMil(value, range_ft);
715}
716
722inline double InchToDeg(double value, double range_ft) {
723 return ::LobInchToDeg(value, range_ft);
724}
725
731inline double JToFtLbs(double value) { return ::LobJToFtLbs(value); }
737inline double FtLbsToJ(double value) { return ::LobFtLbsToJ(value); }
738
744inline double MToYd(double value) { return ::LobMToYd(value); }
745
751inline double YdToFt(double value) { return ::LobYdToFt(value); }
757inline double MToFt(double value) { return ::LobMToFt(value); }
763inline double FtToIn(double value) { return ::LobFtToIn(value); }
769inline double MmToIn(double value) { return ::LobMmToIn(value); }
775inline double CmToIn(double value) { return ::LobCmToIn(value); }
781inline double YdToM(double value) { return ::LobYdToM(value); }
787inline double FtToM(double value) { return ::LobFtToM(value); }
793inline double FtToYd(double value) { return ::LobFtToYd(value); }
799inline double InToMm(double value) { return ::LobInToMm(value); }
805inline double InToCm(double value) { return ::LobInToCm(value); }
811inline double InToFt(double value) { return ::LobInToFt(value); }
812
818inline double PaToInHg(double value) { return ::LobPaToInHg(value); }
824inline double MbarToInHg(double value) { return ::LobMbarToInHg(value); }
830inline double PsiToInHg(double value) { return ::LobPsiToInHg(value); }
831
837inline double LbsToGrain(double value) { return ::LobLbsToGrain(value); }
843inline double GToGrain(double value) { return ::LobGToGrain(value); }
849inline double KgToGrain(double value) { return ::LobKgToGrain(value); }
850
856inline double KgSqMToPmsi(double value) { return ::LobKgSqMToPmsi(value); }
857
863inline double FpsToMps(double value) { return ::LobFpsToMps(value); }
869inline double MpsToFps(double value) { return ::LobMpsToFps(value); }
875inline double KphToMph(double value) { return ::LobKphToMph(value); }
881inline double KnToMph(double value) { return ::LobKnToMph(value); }
882
888inline double MsToS(double value) { return ::LobMsToS(value); }
894inline double UsToS(double value) { return ::LobUsToS(value); }
900inline double SToMs(double value) { return ::LobSToMs(value); }
906inline double SToUs(double value) { return ::LobSToUs(value); }
907
913inline double DegCToDegF(double value) { return ::LobDegCToDegF(value); }
914
915} // namespace lob
916
917// This file is part of lob.
918//
919// lob is free software: you can redistribute it and/or modify it under the
920// terms of the GNU General Public License as published by the Free Software
921// Foundation, either version 3 of the License, or (at your option) any later
922// version.
923//
924// lob is distributed in the hope that it will be useful, but WITHOUT ANY
925// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
926// A PARTICULAR PURPOSE. See the GNU General Public License for more details.
927//
928// You should have received a copy of the GNU General Public License along with
929// lob. If not, see <https://www.gnu.org/licenses/>.
Builder & WindHeadingDeg(double value)
Sets the wind heading in degrees.
Definition lob.hpp:474
Builder & LengthInch(double value)
Sets the projectile length in inches.
Definition lob.hpp:247
Builder & TemperatureDegF(double value)
Sets the temperature in degrees Fahrenheit.
Definition lob.hpp:428
Builder & ZeroAngleMOA(double value)
Sets the angle between the sight and launch angle used to achieve zero.
Definition lob.hpp:362
Builder & operator=(const Builder &rhs)
Copy assignment operator.
Definition lob.hpp:164
Builder & MaximumTime(double value)
Sets the maximum time of flight for the solver.
Definition lob.hpp:559
Input Build()
Builds the Input object with the configured parameters.
Definition lob.hpp:588
Builder & MassGrains(double value)
Sets the projectile mass in grains.
Definition lob.hpp:318
Builder & AzimuthDeg(double value)
Sets the azimuth (bearing) of the target in degrees.
Definition lob.hpp:505
Builder & TailLengthInch(double value)
Sets the projectile tail length in inches.
Definition lob.hpp:267
Builder & operator=(Builder &&rhs) noexcept
Move assignment operator.
Definition lob.hpp:172
Builder & InitialVelocityFps(uint16_t value)
Sets the initial velocity of the projectile in feet per second.
Definition lob.hpp:328
Builder & AltitudeOfFiringSiteFt(double value)
Sets the altitude of the firing site in feet.
Definition lob.hpp:394
Builder & MeplatDiameterInch(double value)
Sets the projectile meplat diameter in inches.
Definition lob.hpp:227
Builder & MinimumEnergy(uint16_t value)
Sets the minimum energy threshold for the solver.
Definition lob.hpp:548
Builder & BallisticCoefficientPsi(double value)
Sets the ballistic coefficient (Psi).
Definition lob.hpp:185
Builder & AirPressureInHg(double value)
Sets the air pressure in inches of mercury (inHg).
Definition lob.hpp:404
~Builder()
Destructor.
Definition lob.hpp:152
Builder & DiameterInch(double value)
Sets the projectile diameter (caliber) in inches.
Definition lob.hpp:217
Builder & WindHeading(ClockAngleT value)
Sets the wind heading using a clock angle.
Definition lob.hpp:463
Builder & MachVsDragTable(const std::array< float, N > &machs, const std::array< float, N > &drags)
Loads a custom Mach vs Drag table for the projectile.
Definition lob.hpp:307
Builder & LatitudeDeg(double value)
Sets the latitude of the firing location in degrees.
Definition lob.hpp:516
Builder & OpticHeightInches(double value)
Sets the height of the optic above the bore in inches.
Definition lob.hpp:338
Builder & BCAtmosphere(AtmosphereReferenceT type)
Sets the atmosphere reference associated with ballistic coefficient.
Definition lob.hpp:195
Builder & Reset() noexcept
Resets the builder state by re-initializing.
Definition lob.hpp:579
Builder & ZeroDistanceYds(double value)
Sets the zero distance in yards.
Definition lob.hpp:372
Builder()
Default constructor.
Definition lob.hpp:149
Builder & MinimumSpeed(uint16_t value)
Sets the minimum speed threshold for the solver.
Definition lob.hpp:537
Builder & RangeAngleDeg(double value)
Sets the range angle (inclination) to the target in degrees.
Definition lob.hpp:526
Builder(const Builder &other)
Definition lob.hpp:154
Builder & WindSpeedMph(double value)
Sets the wind speed in miles per hour.
Definition lob.hpp:494
Builder & BCDragFunction(DragFunctionT type)
Sets the drag function associated with ballistic coefficient.
Definition lob.hpp:206
Builder & ZeroImpactHeightInches(double value)
Sets the zero impact height in inches.
Definition lob.hpp:384
Builder(Builder &&other) noexcept
Definition lob.hpp:158
Builder & NoseLengthInch(double value)
Sets the projectile nose length in inches.
Definition lob.hpp:257
Builder & AltitudeOfBarometerFt(double value)
Sets the altitude of the location where air pressure was taken in feet.
Definition lob.hpp:418
Builder & OgiveRtR(double value)
Sets the Rt/R ratio of the projectile ogive.
Definition lob.hpp:277
Builder & TwistInchesPerTurn(double value)
Sets the twist rate of the barrel in inches per turn.
Definition lob.hpp:349
Builder & WindSpeedFps(double value)
Sets the wind speed in feet per second.
Definition lob.hpp:484
Builder & StepSize(uint16_t value)
Sets the step size for the numerical solver.
Definition lob.hpp:570
Builder & MachVsDragTable(const float *pmachs, const float *pdrags, size_t size)
Loads a custom Mach vs Drag table for the projectile.
Definition lob.hpp:291
Builder & BaseDiameterInch(double value)
Sets the projectile base diameter in inches.
Definition lob.hpp:237
Builder & RelativeHumidityPercent(double value)
Sets the relative humidity at the firing site in percent.
Definition lob.hpp:452
Builder & AltitudeOfThermometerFt(double value)
Sets the altitude of the location where temperature was taken in feet.
Definition lob.hpp:442
LOB_EXPORT LobBuilder * LobBuilderNoseLengthInch(LobBuilder *builder, double value)
Sets the projectile nose length in inches.
LOB_EXPORT LobBuilder * LobBuilderWindSpeedMph(LobBuilder *builder, double value)
Sets the wind speed in miles per hour.
LOB_EXPORT LobBuilder * LobBuilderLengthInch(LobBuilder *builder, double value)
Sets the projectile length in inches.
LOB_EXPORT LobBuilder * LobBuilderWindSpeedFps(LobBuilder *builder, double value)
Sets the wind speed in feet per second.
LOB_EXPORT LobBuilder * LobBuilderTemperatureDegF(LobBuilder *builder, double value)
Sets the temperature in degrees Fahrenheit.
LOB_EXPORT LobBuilder * LobBuilderDiameterInch(LobBuilder *builder, double value)
Sets the projectile diameter (caliber) in inches.
#define LOB_BUILDER_BUFFER_SIZE
The size in bytes of the builder buffer.
Definition lob.h:21
LOB_EXPORT LobBuilder * LobBuilderBallisticCoefficientPsi(LobBuilder *builder, double value)
Sets the ballistic coefficient (Psi).
LOB_EXPORT void LobBuilderInit(LobBuilder *builder)
Initializes a builder to default state.
LOB_EXPORT LobBuilder * LobBuilderAltitudeOfThermometerFt(LobBuilder *builder, double value)
Sets the altitude of the location where temperature was taken in feet.
LOB_EXPORT LobBuilder * LobBuilderLatitudeDeg(LobBuilder *builder, double value)
Sets the latitude of the firing location in degrees.
LOB_EXPORT LobBuilder * LobBuilderMinimumEnergy(LobBuilder *builder, uint16_t value)
Sets the minimum energy threshold for the solver.
LOB_EXPORT LobBuilder * LobBuilderOgiveRtR(LobBuilder *builder, double value)
Sets the Rt/R ratio of the projectile ogive.
uint8_t LobClockAngleT
Clock angle positions for wind direction.
Definition lob.h:43
LOB_EXPORT LobBuilder * LobBuilderAirPressureInHg(LobBuilder *builder, double value)
Sets the air pressure in inches of mercury (inHg).
LOB_EXPORT LobBuilder * LobBuilderMinimumSpeed(LobBuilder *builder, uint16_t value)
Sets the minimum speed threshold for the solver.
uint8_t LobAtmosphereReferenceT
Atmosphere reference type.
Definition lob.h:35
LOB_EXPORT void LobBuilderDestroy(LobBuilder *builder)
Destroys a builder and releases resources.
LOB_EXPORT LobBuilder * LobBuilderZeroAngleMOA(LobBuilder *builder, double value)
Sets the angle between the sight and launch angle used to achieve zero.
LOB_EXPORT LobBuilder * LobBuilderMeplatDiameterInch(LobBuilder *builder, double value)
Sets the projectile meplat diameter in inches.
@ 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
#define LOB_TABLE_SIZE
The number of entries in a drag table.
Definition lob.h:19
LOB_EXPORT LobBuilder * LobBuilderReset(LobBuilder *builder)
Resets a builder state by re-initializing.
@ kLobErrorDiameterOOR
Definition lob.h:71
@ kLobErrorNotFormed
Definition lob.h:88
@ kLobErrorMeplatDiameterOOR
Definition lob.h:79
@ kLobErrorBaseDiameterOOR
Definition lob.h:70
@ kLobErrorLatitudeOOR
Definition lob.h:75
@ kLobErrorInternalError
Definition lob.h:74
@ kLobErrorNoseLengthOOR
Definition lob.h:80
@ kLobErrorBallisticCoefficientOOR
Definition lob.h:68
@ kLobErrorZeroAngleOOR
Definition lob.h:85
@ kLobErrorLengthOOR
Definition lob.h:76
@ kLobErrorOgiveRtROOR
Definition lob.h:81
@ kLobErrorRangeAngleOOR
Definition lob.h:82
@ kLobErrorZeroDataRequired
Definition lob.h:86
@ kLobErrorMaximumTimeOOR
Definition lob.h:78
@ kLobErrorTailLengthOOR
Definition lob.h:83
@ kLobErrorBallisticCoefficientRequired
Definition lob.h:69
@ kLobErrorAirPressureOOR
Definition lob.h:63
@ kLobErrorInitialVelocityRequired
Definition lob.h:73
@ kLobErrorNone
Definition lob.h:62
@ kLobErrorHumidityOOR
Definition lob.h:72
@ kLobErrorAzimuthOOR
Definition lob.h:67
@ kLobErrorMassOOR
Definition lob.h:77
@ kLobErrorZeroDistanceOOR
Definition lob.h:87
@ kLobErrorWindHeadingOOR
Definition lob.h:84
@ kLobErrorAltitudeOfThermometerOOR
Definition lob.h:66
@ kLobErrorAltitudeOfBarometerOOR
Definition lob.h:64
@ kLobErrorAltitudeOfFiringSiteOOR
Definition lob.h:65
LOB_EXPORT LobBuilder * LobBuilderZeroImpactHeightInches(LobBuilder *builder, double value)
Sets the zero impact height in inches.
@ 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
LOB_EXPORT LobBuilder * LobBuilderWindHeading(LobBuilder *builder, LobClockAngleT value)
Sets the wind heading using a clock angle.
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
LOB_EXPORT LobBuilder * LobBuilderOpticHeightInches(LobBuilder *builder, double value)
Sets the height of the optic above the bore in inches.
LOB_EXPORT LobBuilder * LobBuilderStepSize(LobBuilder *builder, uint16_t value)
Sets the step size for the numerical solver.
LOB_EXPORT LobBuilder * LobBuilderMaximumTime(LobBuilder *builder, double value)
Sets the maximum time of flight for the solver.
LOB_EXPORT LobBuilder * LobBuilderInitialVelocityFps(LobBuilder *builder, uint16_t value)
Sets the initial velocity of the projectile in feet per second.
uint8_t LobErrorT
Error codes returned by the builder.
Definition lob.h:60
LOB_EXPORT LobBuilder * LobBuilderTwistInchesPerTurn(LobBuilder *builder, double value)
Sets the twist rate of the barrel in inches per turn.
LOB_EXPORT LobBuilder * LobBuilderTailLengthInch(LobBuilder *builder, double value)
Sets the projectile tail length in inches.
LOB_EXPORT LobBuilder * LobBuilderAltitudeOfBarometerFt(LobBuilder *builder, double value)
Sets the altitude of the location where air pressure was taken in feet.
LOB_EXPORT LobBuilder * LobBuilderZeroDistanceYds(LobBuilder *builder, double value)
Sets the zero distance in yards.
LOB_EXPORT LobBuilder * LobBuilderRelativeHumidityPercent(LobBuilder *builder, double value)
Sets the relative humidity at the firing site in percent.
LOB_EXPORT LobBuilder * LobBuilderMachVsDragTable(LobBuilder *builder, const float *pmachs, const float *pdrags, size_t size)
Loads a custom Mach vs Drag table for the projectile.
LOB_EXPORT LobBuilder * LobBuilderBaseDiameterInch(LobBuilder *builder, double value)
Sets the projectile base diameter in inches.
LOB_EXPORT LobBuilder * LobBuilderWindHeadingDeg(LobBuilder *builder, double value)
Sets the wind heading in degrees.
LOB_EXPORT void LobBuilderCopy(LobBuilder *dst, const LobBuilder *src)
Copies builder state from src to dst.
LOB_EXPORT LobBuilder * LobBuilderAltitudeOfFiringSiteFt(LobBuilder *builder, double value)
Sets the altitude of the firing site in feet.
LOB_EXPORT LobBuilder * LobBuilderRangeAngleDeg(LobBuilder *builder, double value)
Sets the range angle (inclination) to the target in degrees.
LOB_EXPORT LobBuilder * LobBuilderBCAtmosphere(LobBuilder *builder, LobAtmosphereReferenceT type)
Sets the atmosphere reference associated with ballistic coefficient.
LOB_EXPORT LobBuilder * LobBuilderBCDragFunction(LobBuilder *builder, LobDragFunctionT type)
Sets the drag function associated with ballistic coefficient.
LOB_EXPORT LobBuilder * LobBuilderAzimuthDeg(LobBuilder *builder, double value)
Sets the azimuth (bearing) of the target in degrees.
LOB_EXPORT LobBuilder * LobBuilderMassGrains(LobBuilder *builder, double value)
Sets the projectile mass in grains.
Definition lob.hpp:14
double MilToDeg(double value)
Converts milliradians (MIL) to degrees.
Definition lob.hpp:667
double InToMm(double value)
Converts inches to millimeters.
Definition lob.hpp:799
double YdToFt(double value)
Converts yards to feet.
Definition lob.hpp:751
double GToGrain(double value)
Converts grams to grains.
Definition lob.hpp:843
bool operator==(::LobErrorT a, ErrorT b) noexcept
Definition lob.hpp:130
double MoaToMil(double value)
Converts minutes of angle (MOA) to milliradians (MIL).
Definition lob.hpp:632
double KgToGrain(double value)
Converts kilograms to grains.
Definition lob.hpp:849
double KnToMph(double value)
Converts Knots to miles per hour.
Definition lob.hpp:881
double DegCToDegF(double value)
Converts degrees celsius to degrees fahrenheit.
Definition lob.hpp:913
double KgSqMToPmsi(double value)
Converts kilograms per square meter to pounds mass per square inch.
Definition lob.hpp:856
double JToFtLbs(double value)
Converts joules to foot-pounds.
Definition lob.hpp:731
AtmosphereReferenceT
Enumerates the supported atmosphere reference types.
Definition lob.hpp:32
@ kArmyStandardMetro
Army Standard Metro.
Definition lob.hpp:33
@ kIcao
International Civil Aviation Organization (ICAO)
Definition lob.hpp:36
double KphToMph(double value)
Converts kilometers per hour to miles per hour.
Definition lob.hpp:875
double LbsToGrain(double value)
Converts pounds to grains.
Definition lob.hpp:837
double PsiToInHg(double value)
Converts pounds per square inch (PSI) to inches of mercury.
Definition lob.hpp:830
double PaToInHg(double value)
Converts pascals to inches of mercury.
Definition lob.hpp:818
::LobCoriolis Coriolis
Coriolis effect parameters. See LobCoriolis for member details.
Definition lob.hpp:119
double CmToIn(double value)
Converts centimeters to inches.
Definition lob.hpp:775
double MToYd(double value)
Converts meters to yards.
Definition lob.hpp:744
::LobOutput Output
Structure holding output results. See LobOutput for member details.
Definition lob.hpp:128
double MmToIn(double value)
Converts millimeters to inches.
Definition lob.hpp:769
double MbarToInHg(double value)
Converts millibars to inches of mercury.
Definition lob.hpp:824
double MoaToDeg(double value)
Converts minutes of angle (MOA) to degrees.
Definition lob.hpp:638
::LobGravity Gravity
Gravity vector. See LobGravity for member details.
Definition lob.hpp:115
double FtToYd(double value)
Converts feet to yards.
Definition lob.hpp:793
double MilToIphy(double value)
Converts milliradians (MIL) to inches per hundred yards (IPHY).
Definition lob.hpp:673
double MpsToFps(double value)
Converts meters per second to feet per second.
Definition lob.hpp:869
ErrorT
Error codes returned by the builder.
Definition lob.hpp:61
@ kOgiveRtROOR
Definition lob.hpp:81
@ kBaseDiameterOOR
Definition lob.hpp:70
@ kMeplatDiameterOOR
Definition lob.hpp:79
@ kZeroDistanceOOR
Definition lob.hpp:87
@ kAzimuthOOR
Definition lob.hpp:67
@ kNotFormed
Definition lob.hpp:88
@ kBallisticCoefficientOOR
Definition lob.hpp:68
@ kNone
Definition lob.hpp:62
@ kTailLengthOOR
Definition lob.hpp:83
@ kMaximumTimeOOR
Definition lob.hpp:78
@ kAltitudeOfBarometerOOR
Definition lob.hpp:64
@ kHumidityOOR
Definition lob.hpp:72
@ kWindHeadingOOR
Definition lob.hpp:84
@ kInitialVelocityRequired
Definition lob.hpp:73
@ kDiameterOOR
Definition lob.hpp:71
@ kLengthOOR
Definition lob.hpp:76
@ kAltitudeOfThermometerOOR
Definition lob.hpp:66
@ kAltitudeOfFiringSiteOOR
Definition lob.hpp:65
@ kBallisticCoefficientRequired
Definition lob.hpp:69
@ kNoseLengthOOR
Definition lob.hpp:80
@ kMassOOR
Definition lob.hpp:77
@ kZeroDataRequired
Definition lob.hpp:86
@ kZeroAngleOOR
Definition lob.hpp:85
@ kRangeAngleOOR
Definition lob.hpp:82
@ kAirPressureOOR
Definition lob.hpp:63
@ kLatitudeOOR
Definition lob.hpp:75
@ kInternalError
Definition lob.hpp:74
double InToCm(double value)
Converts inches to centimeters.
Definition lob.hpp:805
double MoaToInch(double value, double range_ft)
Converts minutes of angle (MOA) to projected inches at a given range in feet.
Definition lob.hpp:652
double InchToMil(double value, double range_ft)
Inches of projection at a given range to milliradians (MIL).
Definition lob.hpp:713
double FtToM(double value)
Converts feet to meters.
Definition lob.hpp:787
::LobInput Input
Structure of input parameters consumed by the solver.
Definition lob.hpp:125
ClockAngleT
Enumerates clock angle positions.
Definition lob.hpp:45
@ kX
ten o'clock
Definition lob.hpp:55
@ kI
one o'clock
Definition lob.hpp:46
@ kXI
eleven o'clock
Definition lob.hpp:56
@ kVII
seven o'clock
Definition lob.hpp:52
@ kVIII
eight o'clock
Definition lob.hpp:53
@ kV
five o'clock
Definition lob.hpp:50
@ kVI
six o'clock
Definition lob.hpp:51
@ kIV
four o'clock
Definition lob.hpp:49
@ kIII
three o'clock
Definition lob.hpp:48
@ kIX
nine o'clock
Definition lob.hpp:54
@ kXII
twelve o'clock
Definition lob.hpp:57
@ kII
two o'clock
Definition lob.hpp:47
double DegToMil(double value)
Converts degrees to milliradians (MIL).
Definition lob.hpp:696
double MilToMoa(double value)
Converts milliradians (MIL) to minutes of angle (MOA).
Definition lob.hpp:661
DragFunctionT
Enumerates the supported drag functions.
Definition lob.hpp:22
@ kG2
G2 drag function.
Definition lob.hpp:24
@ kG5
G5 drag function.
Definition lob.hpp:25
@ kG1
G1 drag function.
Definition lob.hpp:23
@ kG8
G8 drag function.
Definition lob.hpp:28
@ kG7
G7 drag function.
Definition lob.hpp:27
@ kG6
G6 drag function.
Definition lob.hpp:26
double InToFt(double value)
Converts inches to feet.
Definition lob.hpp:811
double FtToIn(double value)
Converts feet to inches.
Definition lob.hpp:763
constexpr E ToEnum(std::underlying_type_t< E > value) noexcept
Converts an integer value to an enum class.
Definition lob.hpp:98
double FtLbsToJ(double value)
Converts foot-pounds to joules.
Definition lob.hpp:737
bool operator!=(::LobErrorT a, ErrorT b) noexcept
Definition lob.hpp:133
double SToUs(double value)
Converts seconds to microseconds.
Definition lob.hpp:906
double InchToMoa(double value, double range_ft)
Inches of projection at a given range to minutes of angle (MOA).
Definition lob.hpp:704
double MsToS(double value)
Converts milliseconds to seconds.
Definition lob.hpp:888
constexpr size_t kLobTableSize
The size of a drag table.
Definition lob.hpp:17
double YdToM(double value)
Converts yards to meters.
Definition lob.hpp:781
size_t Solve(const Input &in, const uint32_t *pranges, Output *pouts, size_t size)
Solves the exterior ballistics problem for a given set of ranges.
Definition lob.hpp:602
double MilToInch(double value, double range_ft)
Converts milliradians (MIL) to projected inches at a given range in feet.
Definition lob.hpp:681
constexpr std::underlying_type_t< E > ToUnderlying(E value) noexcept
Converts an enum class value to its underlying integer type.
Definition lob.hpp:110
double InchToDeg(double value, double range_ft)
Inches of projection at a given range to degrees.
Definition lob.hpp:722
const char * Version()
Gets the library version in major.minor.patch format.
Definition lob.hpp:625
constexpr size_t kLobBuilderBufferSize
The size in bytes of the builder buffer.
Definition lob.hpp:19
double SToMs(double value)
Converts seconds to milliseconds.
Definition lob.hpp:900
double UsToS(double value)
Converts microseconds to seconds.
Definition lob.hpp:894
double MoaToIphy(double value)
Converts minutes of angle (MOA) to inches per hundred yards (IPHY).
Definition lob.hpp:644
::LobWind Wind
Wind vector. See LobWind for member details.
Definition lob.hpp:117
double MToFt(double value)
Converts meters to feet.
Definition lob.hpp:757
double FpsToMps(double value)
Converts feet per second to meters per second.
Definition lob.hpp:863
double DegToMoa(double value)
Converts degrees to minutes of angle (MOA).
Definition lob.hpp:690
Opaque builder type for constructing LobInput objects.
Definition lob.h:146
Coriolis effect parameters.
Definition lob.h:104
Gravity vector.
Definition lob.h:92
Structure of input parameters consumed by the solver.
Definition lob.h:115
Structure holding the output results of a ballistic calculation.
Definition lob.h:136
Wind vector.
Definition lob.h:98