summaryrefslogtreecommitdiffstats
path: root/example
diff options
context:
space:
mode:
authorhybrid <hybrid@hybridlabs.pro>2026-08-10 06:04:25 +0300
committerhybrid <hybrid@hybridlabs.pro>2026-08-10 06:04:25 +0300
commit7ad9c60cdb981d51756755dca4603e77611a0f61 (patch)
tree70eb226e794015f6207eb821c5b8776f14584837 /example
parent1d1796c97867ada2211a39b313ef6398297c7b8f (diff)
downloada3catragmx-7ad9c60cdb981d51756755dca4603e77611a0f61.tar.gz
a3catragmx-7ad9c60cdb981d51756755dca4603e77611a0f61.tar.bz2
a3catragmx-7ad9c60cdb981d51756755dca4603e77611a0f61.zip
upd: tmp
Diffstat (limited to 'example')
-rw-r--r--example/example.c72
1 files changed, 71 insertions, 1 deletions
diff --git a/example/example.c b/example/example.c
index 15615df..977a8ae 100644
--- a/example/example.c
+++ b/example/example.c
@@ -1,9 +1,79 @@
#include <stdio.h>
#include <stdlib.h>
+#include <assert.h>
+
#include "atragmx.h"
int main(int argc, char** argv) {
- printf("Hello, %s\n", argv[0]);
+ ATragMXSolution *result = NULL;
+
+ ATragMXContext ctx = {
+ .atmosphere = {
+ .atmosphere_model = ICAO,
+ .barometric_pressure = 1096.0,
+ .relative_humidity = 50.0,
+ .temperature = 15.2,
+ .wind_dir = 4,
+ .wind_speed = { 2.3, 2.7 }
+ },
+ .gun = {
+ .air_friction = 0.0,
+ .ballistic_coef = 0.4,
+ .bore_height = 0.08,
+ .bullet_mass = 10.0,
+ .drag_model = DRAG_G1,
+ .muzzle_velocity = 850.0,
+ .scope_angle = 0.0,
+ .twist_dir = 1,
+ },
+ .target = {
+ .speed = 5.5,
+ .direction = 5,
+ .inclination_angle = 12.3,
+ .latitude = 45.0,
+ .range = 625.0,
+ },
+ .sim_steps = 100,
+ .stability_factor = 1,
+ .store_range_card = true,
+ };
+
+ ace_ballistics ctx_ace_ballistics = {
+ .enabled = true,
+ };
+ ace_config ctx_ace = {
+ .ballistics = &ctx_ace_ballistics,
+ };
+
+ result = ATragMXCalcSolution(&ctx, &ctx_ace);
+
+ if (!result) {
+ perror("Calculation failed");
+ exit(EXIT_FAILURE);
+ }
+
+ printf("=== Solution ===\n");
+ printf("Elevation (radians): %.6f\n", result->elev);
+ printf("Windage W1: %.6f, W2: %.6f\n", result->windage.w1, result->windage.w2);
+ printf("Lead: %.6f\n", result->lead);
+ printf("Time of flight: %.4f s\n", result->time_of_flight);
+ printf("Remaining velocity: %.2f m/s\n", result->remaining_velocity);
+ printf("Remaining energy: %.2f J\n", result->remaining_energy);
+ printf("Coriolis vertical drift: %.6f\n", result->coriolis_vdrift);
+ printf("Coriolis horizontal drift: %.6f\n", result->coriolis_hdrift);
+ printf("Spin drift: %.6f\n", result->spin_drift);
+
+ assert(ctx.store_range_card);
+
+ assert(result->range_card != NULL);
+
+ if (ctx.store_range_card && result->range_card != NULL) {
+ printf("\nRange card (sim_steps = %zu):\n", ctx.sim_steps);
+ for (size_t i = 0; i < ctx.sim_steps; i++) {
+ printf(" шаг %3zu: %.3f\n", i, result->range_card->card->kinetic_energy);
+ }
+ }
+
exit(EXIT_SUCCESS);
}