FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
BathymetryField.h
1#pragma once
3
4#include <marenv/marenv.h>
5#include <marenv/seafloor/SoilState.h>
6
7#include <cmath>
8
9namespace marenv::seafloor
10{
11
25{
26public:
28
29 virtual ~BathymetryField() = default;
30
38 virtual Status GetDepth(const double pos[2], double& depthOut) = 0;
39
47 virtual Status ComputeSurfaceUnitNormal(const double pos[2], double unitNormalOut[3]) = 0;
48
59 virtual Status GetSoilState(const double pos[3], SoilState& soilOut) = 0;
60
91 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);
92
93protected:
95
96 BathymetryField() = default;
97
99 static bool IsValidRay(const double origin[3], double directionNorm, double maxSearchDistance);
100
102 static double ValidTolerance(double convergenceTolerance);
103
104private:
106 static double FlatSeabedDistance(double altitude, const double unitDirection[3]);
107};
108} // namespace marenv::seafloor
Definition BathymetryField.h:25
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.
virtual Status GetSoilState(const double pos[3], SoilState &soilOut)=0
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
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
Status
Definition marenv.h:40
Policy mixin: this type is neither copyable nor movable.
Definition marenv.h:96
Definition SoilState.h:14