FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
BathymetryField.h
1#pragma once
3
4#include <marenv/marenv.h>
5
6#include <cmath>
7
8namespace marenv::seafloor
9{
10
24{
25public:
27
28 virtual ~BathymetryField() = default;
29
37 virtual Status GetDepth(const double pos[2], double& depthOut) = 0;
38
46 virtual Status ComputeSurfaceUnitNormal(const double pos[2], double unitNormalOut[3]) = 0;
47
55 virtual Status GetSeabedSigma(const double pos[3], double& sigmaOut) = 0;
63 virtual Status GetSeabedTau(const double pos[3], double& tauOut) = 0;
71 virtual Status GetSeabedRho(const double pos[3], double& rhoOut) = 0;
72
103 virtual Status ComputeRayIntersection(const double origin[3], const double direction[3], double& distanceOut, double maxSearchDistance = 100, double startSearchDistance = -1.0, double stepSize = 1.0, double convergenceTolerance = 0.01);
104
105protected:
107
108 BathymetryField() = default;
109
111 static bool IsValidRay(const double origin[3], double directionNorm, double maxSearchDistance);
112
114 static double ValidTolerance(double convergenceTolerance);
115
116private:
118 static double FlatSeabedDistance(double altitude, const double unitDirection[3]);
119};
120} // namespace marenv::seafloor
Definition BathymetryField.h:24
virtual Status GetSeabedSigma(const double pos[3], double &sigmaOut)=0
virtual Status ComputeRayIntersection(const double origin[3], const double direction[3], double &distanceOut, double maxSearchDistance=100, double startSearchDistance=-1.0, double stepSize=1.0, double convergenceTolerance=0.01)
virtual ~BathymetryField()=default
Virtual destructor.
static double ValidTolerance(double convergenceTolerance)
The convergence tolerance ComputeRayIntersection uses: convergenceTolerance, raised to 1e-12 if small...
virtual Status ComputeSurfaceUnitNormal(const double pos[2], double unitNormalOut[3])=0
virtual Status GetSeabedRho(const double pos[3], double &rhoOut)=0
static bool IsValidRay(const double origin[3], double directionNorm, double maxSearchDistance)
True for an origin with finite coordinates, and a direction norm and a maximum search distance that C...
BathymetryField()=default
Constructor is empty.
virtual Status GetDepth(const double pos[2], double &depthOut)=0
virtual Status GetSeabedTau(const double pos[3], double &tauOut)=0
Status
Definition marenv.h:40
Policy mixin: this type is neither copyable nor movable.
Definition marenv.h:96