#ifndef CONTEXT_H #define CONTEXT_H #include #include #include #include "drag_model.h" typedef enum { ICAO, ASM, } AtmosphereModel; typedef struct { double scope_angle; double bullet_mass; double bore_height; double muzzle_velocity; double ballistic_coef; DragFunction drag_model; double twist_dir; double air_friction; } GunConfig; typedef struct { double temperature; double barometric_pressure; double relative_humidity; double wind_speed[2]; size_t wind_dir; AtmosphereModel atmosphere_model; } AtmoContext; typedef struct { double speed; double range; double inclination_angle; double latitude; size_t direction; } TargetContext; typedef struct { GunConfig gun; TargetContext target; AtmoContext atmosphere; size_t sim_steps; bool store_range_card; size_t stability_factor; } ATragMXContext; typedef struct { double w1; double w2; } Windage; typedef struct RangeCardRecord RangeCardRecord; struct RangeCardRecord { size_t n; double range; double elevation; Windage windage; double lead; double time_of_flight; double bullet_speed; double kinetic_energy; }; typedef struct RangeCard RangeCard; struct RangeCard { RangeCardRecord *card; size_t records; }; typedef struct { double elev; Windage windage; double lead; double time_of_flight; double remaining_velocity; double remaining_energy; double coriolis_vdrift; double coriolis_hdrift; double spin_drift; RangeCard *range_card; } ATragMXSolution; #endif