cmake库改造前
This commit is contained in:
@@ -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});
|
||||
|
||||
Reference in New Issue
Block a user