trying stuff

This commit is contained in:
2025-11-09 09:32:12 +01:00
parent c503793f69
commit 6d6da8f5b6
7 changed files with 47 additions and 11 deletions

View File

@@ -33,19 +33,39 @@ void compute_decimal_coords(struct IGC_DataPoint* dp)
dp->lat.decimal = lat; dp->lat.decimal = lat;
dp->lon.decimal = lon; dp->lon.decimal = lon;
printf("DEBUG: %lf, %lf\n", dp->lat.decimal, dp->lon.decimal); //printf("DEBUG: %lf, %lf\n", dp->lat.decimal, dp->lon.decimal);
} }
void compute_cartesian_coords(struct IGC_DataPoint* dp) void compute_cartesian_coords(struct IGC_DataPoint* dp)
{ {
double rad_lat = dp->lat.decimal*(M_PI/180.0); double rad_lat = dp->lat.decimal*(M_PI/180.0);
double rad_lon = dp->lon.decimal*(M_PI/180.0); double rad_lon = dp->lon.decimal*(M_PI/180.0);
printf("DEBUG: %lf, %lf\n", rad_lat, rad_lon); //printf("DEBUG: %lf, %lf\n", rad_lat, rad_lon);
double x = EARTH_RADIUS * cos(rad_lat) * cos(rad_lon); double x = EARTH_RADIUS * cos(rad_lat) * cos(rad_lon);
double y = EARTH_RADIUS * cos(rad_lat) * sin(rad_lon); double y = EARTH_RADIUS * cos(rad_lat) * sin(rad_lon);
dp->lon.meters = x; dp->lon.meters = x;
dp->lat.meters = y; dp->lat.meters = y;
printf("DEBUG: x=%lf, y=%lf\n", x, y); //printf("DEBUG: x=%lf, y=%lf\n", x, y);
}
void compute_world_coords(struct IGC_DataPoint* first, struct IGC_DataPoint* dp)
{
// Get base point (1st element)
// All other coords will be derived according to the base point which will be mapped to pos (0,0,0)
double base_y = first->lat.meters;
double base_x = first->lon.meters;
double base_z = first->gps_alt;
// Get datapoint cartesian coords
double x = dp->lon.meters;
double y = dp->lat.meters;
double z = dp->gps_alt;
// Compute current datapoint world coords as offset from base point
Vector3 current = {x-base_x, y-base_y, z-base_z};
dp->w_coords = current;
printf("DEBUG: dp->w_coords = {x=%lf, y=%lf, z=%lf}; dp->meters = {lon=%lf, lat=%lf, gps_alt=%d\n", dp->w_coords.x, dp->w_coords.y, dp->w_coords.z, dp->lon.meters, dp->lat.meters, dp->gps_alt);
} }

View File

@@ -14,5 +14,6 @@
void compute_decimal_coords(struct IGC_DataPoint* dp); void compute_decimal_coords(struct IGC_DataPoint* dp);
void compute_cartesian_coords(struct IGC_DataPoint* dp); void compute_cartesian_coords(struct IGC_DataPoint* dp);
void compute_world_coords(struct IGC_DataPoint* first, struct IGC_DataPoint* dp);
#endif #endif

View File

@@ -10,8 +10,9 @@
*/ */
#include "raylib.h" #include "raylib.h"
#include "igc.h"
void start_graphics() void start_graphics(struct dp_node* list)
{ {
SetTraceLogLevel(4); SetTraceLogLevel(4);
const int screenWidth = 800; const int screenWidth = 800;
@@ -40,10 +41,11 @@ void start_graphics()
BeginDrawing(); BeginDrawing();
ClearBackground(RAYWHITE); ClearBackground(RAYWHITE);
BeginMode3D(camera); BeginMode3D(camera);
DrawCube(cubePosition, 2.0f, 2.0f, 2.0f, RED); DrawCube(cubePosition, 2.0f, 2.0f, 2.0f, RED);
DrawCubeWires(cubePosition, 2.0f, 2.0f, 2.0f, MAROON); DrawCubeWires(cubePosition, 2.0f, 2.0f, 2.0f, MAROON);
DrawGrid(10, 1.0f);
DrawGrid(1000, 1.0f);
EndMode3D(); EndMode3D();
DrawText("3rd Dimension", 10, 40, 20, DARKGRAY); DrawText("3rd Dimension", 10, 40, 20, DARKGRAY);

View File

@@ -12,6 +12,6 @@
#ifndef GRAPHICS_H #ifndef GRAPHICS_H
#define GRAPHICS_H #define GRAPHICS_H
void start_graphics(); void start_graphics(struct dp_node* list);
#endif #endif

View File

@@ -59,8 +59,6 @@ struct IGC_DataPoint* parse_datapoint(char* line)
void show_datapoint(struct IGC_DataPoint* dp) void show_datapoint(struct IGC_DataPoint* dp)
{ {
printf("Data point: %02d:%02d:%02d | %d°%d'%d\"%c %d°%d'%d\"%c | Baro: %dm GPS: %dm\n", dp->hour, dp->minute, dp->second, dp->lat.deg, dp->lat.min, dp->lat.sec, dp->lat.cardinal, dp->lon.deg, dp->lon.min, dp->lon.sec, dp->lon.cardinal, dp->baro_alt, dp->gps_alt); printf("Data point: %02d:%02d:%02d | %d°%d'%d\"%c %d°%d'%d\"%c | Baro: %dm GPS: %dm\n", dp->hour, dp->minute, dp->second, dp->lat.deg, dp->lat.min, dp->lat.sec, dp->lat.cardinal, dp->lon.deg, dp->lon.min, dp->lon.sec, dp->lon.cardinal, dp->baro_alt, dp->gps_alt);
compute_decimal_coords(dp);
compute_cartesian_coords(dp);
} }
void show_header_info(struct IGC_Header* hdr) void show_header_info(struct IGC_Header* hdr)
@@ -130,7 +128,9 @@ void parse_igc_file(FILE* fp, struct IGC_Header* hdr, struct dp_node* list)
case DATAPOINT: case DATAPOINT:
struct IGC_DataPoint* dp = parse_datapoint(line); struct IGC_DataPoint* dp = parse_datapoint(line);
//show_datapoint(dp); //show_datapoint(dp);
// Doubly linked list of points (so theyre joined in chronological order; opens possibilities for analysis later) // Doubly linked list of points (so theyre joined in chronological order; opens possibilities for analysis later)
compute_decimal_coords(dp);
compute_cartesian_coords(dp);
append_datapoint(list, dp); append_datapoint(list, dp);
break; break;
case HEADER: case HEADER:

View File

@@ -15,6 +15,7 @@
#include <stdio.h> #include <stdio.h>
#include "linkage.h" #include "linkage.h"
#include "raylib.h"
enum IGC_RecordType enum IGC_RecordType
{ {
@@ -89,6 +90,9 @@ struct IGC_DataPoint
// altitude // altitude
int baro_alt; int baro_alt;
int gps_alt; int gps_alt;
// world coordinates (Raylib world units)
Vector3 w_coords;
}; };
void parse_igc_file(FILE* fp, struct IGC_Header* hdr, struct dp_node* list); void parse_igc_file(FILE* fp, struct IGC_Header* hdr, struct dp_node* list);

View File

@@ -16,6 +16,7 @@
#include "igc.h" #include "igc.h"
#include "linkage.h" #include "linkage.h"
#include "graphics.h" #include "graphics.h"
#include "coords.h"
int main(int argc, char* argv[]) int main(int argc, char* argv[])
{ {
@@ -42,7 +43,15 @@ int main(int argc, char* argv[])
print_datapoint_list(head); print_datapoint_list(head);
start_graphics(); struct dp_node* base = head->next;
struct dp_node* current = head->next;
while (current->next != NULL)
{
compute_world_coords(base->data, current->data);
current = current->next;
}
start_graphics(head);
return EXIT_SUCCESS; return EXIT_SUCCESS;
} }