struct relative3D_32 dcm_absolute_to_relative_32(struct waypoint3D absolute) { struct relative3D_32 rel; rel.z = absolute.z; rel.y = (absolute.y - lat_origin.WW) / 90; // in meters rel.x = long_scale((absolute.x - lon_origin.WW) / 90, cos_lat); return rel; }
static void location_plane(int32_t* location) { location[1] = ((lat_gps.WW - lat_origin.WW)/90); // in meters, range is about 20 miles location[0] = long_scale((lon_gps.WW - lon_origin.WW)/90, cos_lat); #if (USE_BAROMETER_ALTITUDE == 1 ) #warning "using pressure altitude instead of GPS altitude" // division by 100 implies alt_origin is in centimeters; not documented elsewhere // longword result = (longword/10 - longword)/100 : range location[2] = ((get_barometer_altitude()/10) - alt_origin.WW)/100; // height in meters #else location[2] = (alt_sl_gps.WW - alt_origin.WW)/100; // height in meters #endif // USE_BAROMETER_ALTITUDE }
static void location_plane(int16_t* location) { union longbbbb accum_nav; accum_nav.WW = ((lat_gps.WW - lat_origin.WW)/90); // in meters, range is about 20 miles location[1] = accum_nav._.W0; accum_nav.WW = long_scale((lon_gps.WW - lon_origin.WW)/90, cos_lat); location[0] = accum_nav._.W0; #ifdef USE_PRESSURE_ALT #warning "using pressure altitude instead of GPS altitude" // division by 100 implies alt_origin is in centimeters; not documented elsewhere // longword result = (longword/10 - longword)/100 : range accum_nav.WW = ((get_barometer_altitude()/10) - alt_origin.WW)/100; // height in meters #else accum_nav.WW = (alt_sl_gps.WW - alt_origin.WW)/100; // height in meters #endif // USE_PRESSURE_ALT location[2] = accum_nav._.W0; }
static void location_plane(int32_t* location) { location[1] = ((lat_gps.WW - lat_origin.WW)/90); // in meters, range is about 20 miles location[0] = long_scale((lon_gps.WW - lon_origin.WW)/90, cos_lat); location[2] = (alt_sl_gps.WW - alt_origin.WW)/100; // height in meters }