cmake库改造前

This commit is contained in:
2026-08-05 14:37:55 +08:00
parent 587c1d6d01
commit cf17c454a9
29 changed files with 1034 additions and 415 deletions
+11 -19
View File
@@ -1,46 +1,38 @@
#include "../Aircraft/Flight_VTO.h"
#include "Flight_VTO.h"
#include <algorithm>
#include <cmath>
namespace {
double to_radians(double degrees) {
return degrees * 3.14159265358979323846 / 180.0;
}
double track_heading_from_points(const SSR::Position_Info& first,
const SSR::Position_Info& second) {
double track_heading_from_points(const SSR::Position_Info& first, const SSR::Position_Info& second) {
auto lat1 = to_radians(first.lat);
auto lat2 = to_radians(second.lat);
auto dlon = to_radians(second.lon - first.lon);
auto y = std::sin(dlon) * std::cos(lat2);
auto x = std::cos(lat1) * std::sin(lat2) -
std::sin(lat1) * std::cos(lat2) * std::cos(dlon);
auto x = std::cos(lat1) * std::sin(lat2) - std::sin(lat1) * std::cos(lat2) * std::cos(dlon);
auto angle = std::atan2(y, x) * 180.0 / 3.14159265358979323846;
return angle < 0 ? angle + 360.0 : angle;
}
double ground_distance_meters(const SSR::Position_Info& first,
const SSR::Position_Info& second) {
double ground_distance_meters(const SSR::Position_Info& first, const SSR::Position_Info& second) {
auto dlat = to_radians(second.lat - first.lat);
auto dlon = to_radians(second.lon - first.lon);
auto lat1 = to_radians(first.lat);
auto lat2 = to_radians(second.lat);
auto a = std::sin(dlat / 2) * std::sin(dlat / 2) +
std::cos(lat1) * std::cos(lat2) * std::sin(dlon / 2) *
std::sin(dlon / 2);
auto a =
std::sin(dlat / 2) * std::sin(dlat / 2) + std::cos(lat1) * std::cos(lat2) * std::sin(dlon / 2) * std::sin(dlon / 2);
auto safe_a = std::min(1.0, std::max(0.0, a));
return 6371000.0 * 2 *
std::atan2(std::sqrt(safe_a), std::sqrt(1 - safe_a));
return 6371000.0 * 2 * std::atan2(std::sqrt(safe_a), std::sqrt(1 - safe_a));
}
double track_pitch_from_points(const SSR::Position_Info& first,
const SSR::Position_Info& second) {
double track_pitch_from_points(const SSR::Position_Info& first, const SSR::Position_Info& second) {
auto distance = ground_distance_meters(first, second);
return std::atan2(second.alt - first.alt, distance) * 180.0 /
3.14159265358979323846;
return std::atan2(second.alt - first.alt, distance) * 180.0 / 3.14159265358979323846;
}
Flight_Track_Orientation track_orientation_from_points(const SSR::Position_Info& first,
const SSR::Position_Info& second) {
return {track_heading_from_points(first, second),
track_pitch_from_points(first, second), 0.0};
}
return {track_heading_from_points(first, second), track_pitch_from_points(first, second), 0.0};
}
} // namespace
Psc::JSON Flight_Track_Orientation::to_json() const {
auto ret = Psc::JSON::object();
ret.append({"heading", heading});