bmh/FlightSimulation/Plugins/CesiumForUnreal_5.4/Source/CesiumRuntime/Private/CesiumEllipsoidFunctions.cpp
2025-02-07 22:52:32 +08:00

67 lines
2.4 KiB
C++

// Copyright 2020-2024 CesiumGS, Inc. and Contributors
#include "CesiumEllipsoidFunctions.h"
#include "VecMath.h"
#include <CesiumGeospatial/Ellipsoid.h>
#include <CesiumGeospatial/GlobeTransforms.h>
#include <CesiumUtility/Math.h>
using namespace CesiumGeospatial;
using namespace CesiumUtility;
FVector CesiumEllipsoidFunctions::ScaleToGeodeticSurface(
const CesiumGeospatial::Ellipsoid& Ellipsoid,
const FVector& EllipsoidCenteredEllipsoidFixedPosition) {
std::optional<glm::dvec3> result = Ellipsoid.scaleToGeodeticSurface(
VecMath::createVector3D(EllipsoidCenteredEllipsoidFixedPosition));
if (result) {
return VecMath::createVector(*result);
} else {
return FVector(0.0, 0.0, 0.0);
}
}
FVector CesiumEllipsoidFunctions::GeodeticSurfaceNormal(
const CesiumGeospatial::Ellipsoid& Ellipsoid,
const FVector& EllipsoidCenteredEllipsoidFixedPosition) {
return VecMath::createVector(Ellipsoid.geodeticSurfaceNormal(
VecMath::createVector3D(EllipsoidCenteredEllipsoidFixedPosition)));
}
FVector CesiumEllipsoidFunctions::
LongitudeLatitudeHeightToEllipsoidCenteredEllipsoidFixed(
const CesiumGeospatial::Ellipsoid& Ellipsoid,
const FVector& LongitudeLatitudeHeight) {
glm::dvec3 cartesian =
Ellipsoid.cartographicToCartesian(Cartographic::fromDegrees(
LongitudeLatitudeHeight.X,
LongitudeLatitudeHeight.Y,
LongitudeLatitudeHeight.Z));
return VecMath::createVector(cartesian);
}
FVector CesiumEllipsoidFunctions::
EllipsoidCenteredEllipsoidFixedToLongitudeLatitudeHeight(
const CesiumGeospatial::Ellipsoid& Ellipsoid,
const FVector& EllipsoidCenteredEllipsoidFixedPosition) {
std::optional<Cartographic> result = Ellipsoid.cartesianToCartographic(
VecMath::createVector3D(EllipsoidCenteredEllipsoidFixedPosition));
if (result) {
return FVector(
Math::radiansToDegrees(result->longitude),
Math::radiansToDegrees(result->latitude),
result->height);
} else {
return FVector(0.0, 0.0, 0.0);
}
}
FMatrix CesiumEllipsoidFunctions::EastNorthUpToEllipsoidCenteredEllipsoidFixed(
const CesiumGeospatial::Ellipsoid& Ellipsoid,
const FVector& EllipsoidCenteredEllipsoidFixedPosition) {
return VecMath::createMatrix(
CesiumGeospatial::GlobeTransforms::eastNorthUpToFixedFrame(
VecMath::createVector3D(EllipsoidCenteredEllipsoidFixedPosition),
Ellipsoid));
}